Защищённый режим: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Строка 27:
Вся физическая память делится на ''страницы'' фиксированного размера (4 К[[Байт]], 2 МБ или 4 МБ, в x86_64 также 1 ГБ). Каждая страница, независимо от размера, выравнена по границе 4 К[[Байт]].
 
Основная мысль сводится к формированию таблиц описания памяти, которые определяют состояние её отдельных сегментов/страниц и т. п. При нехватке памяти операционная система может выгрузить часть данных из оперативной памяти на диск, а в таблицу описаний внести указание на отсутствие этих данных в памяти. При попытке обращения к отсутствующим данным процессор сформирует [[Page fault|исключение #PF]] (разновидность прерывания) и отдаст управление операционной системе, которая вернёт данные в память, а затем вернёт управление программе. Таким образом для программ процесс [[подкачка страниц|подкачки данных]] с дисков происходит незаметно.
 
== Линейная адресация ==
Строка 59:
 
Описание флагов:
* Бит P ({{lang-en|Present}}) определяет наличие данной страницы или таблицы страниц в физической памяти. Если он сброшен, то процессор записывает ''линейный адрес'' отсутствующей страницы <ref>Конкретнее, в [[Системные регистры x86|CR2]] записывается полный адрес (32 бита). Напр. если программа обратилась по адресу 00001543h (то есть ко второй странице (№ 1) при страницах по 4 КБайт), то в [[Системные регистры x86|CR2]] запишется именно это число</ref> в регистр [[Системные регистры x86|CR2]] и передаёт управление [[ИсключениеPage PFfault|обработчику #PF]], который должен загрузить страницу в память (или создать её) и установить этот [[бит]].
* Бит RW ({{lang-en|Read/Write}}) определяет, можно ли в эту страницу что-то писать (1 — можно, 0 — нельзя).
* Бит US ({{lang-en|User/Supervisor}}) разрешает коду с [[Сегментная защита памяти|CPL]]=3 (код пользователя) обращаться к этой странице (при US=1).