Память в защищенном режиме
Народ, помогите плз. Нигде не могу найти инфу по распределению памяти в защищенном режиме.
Собственно, имеется в виду вот что: какие участки памяти в защищенном режиме нельзя использовать? Что это за участки (ПЗУ, видеопамять...)?
Hi!
Народ, помогите плз. Нигде не могу найти инфу по распределению памяти в защищенном режиме.
Собственно, имеется в виду вот что: какие участки памяти в защищенном режиме нельзя использовать? Что это за участки (ПЗУ, видеопамять...)?
А вот это, дорогой друг, никто тебе сказать не может. Все зависит от твоей машинки. Карта памяти определяется с помощью функции 0xe820 прерывания 15h BIOS (в real mode!). Описание данной функции поможет найти google.com. Я сам где-то нарыл даже на русском, но сейчас в упор не помню и найти по первым ссылкам не могу. Есть еще несколько устаревших функций: 88h, 0e801h, но это уже не так актуально (для старых машин сгодится).
Прилагаю исходник на ассемблере для определения карты памяти. Карта устроена так:
Размер карты (4 байта)
Начало участка (8 байт)
Длина участка (8 байт)
Тип участка (4 байта) (1 - доступна для использования, 2 - недоступна, другие типы - смотри описание функции 0xe820 int 15h)
(последние три записи повторяются, пока не опишут всю память)
Карта строится по адресу es:MEMORY_MAP (нужно задать). Она работает даже на старых компьютерах.
Если я правильно понял, то занятые участки памяти одинаковы и в реальном и в защищенном режиме, т.е. в реальном режиме нужно получить карту памяти, а затем перейти в защищенный?
Большое спасибо за ответ!
Если я правильно понял, то занятые участки памяти одинаковы и в реальном и в защищенном режиме, т.е. в реальном режиме нужно получить карту памяти, а затем перейти в защищенный?
В реальном режиме вы не можете обратиться к памяти за пределом 1-ого мегабайта, так что по сути это распределение для защищенного режима (что более общее, чем для реального).
Просто многие прерывания BIOS в защищенном не работают, да и карта памяти требуется как раз до перехода в защищенный режим.
Но вы поняли правильно:)