Страничная память: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Заменил слово "мэпируются" на русский аналог
м обновление - добавлена ссылка на "Таблица страниц"
Строка 28:
Адрес, выставляемый процессором на шину, называется «линейный адрес» (который позже преобразуется в физический).
 
Запись [[Таблица страниц|таблицы страниц]] обычно содержит в себе следующую информацию:
* флаг «страница отображена»
* физический адрес
Строка 38:
Число записей в одной таблице ограничено и зависит от размера записи и размера страницы. Используется многоуровневая организация таблиц, часто 2 или 3 уровня, иногда 4 уровня (для 64-разрядных архитектур).
 
В случае 2 уровней используется «каталог» страниц, в котором хранятся записи, указывающие на физические адреса [[Таблица страниц|таблиц страниц]]. В таблицах содержатся записи, указывающие на страницы данных.
 
При использовании 3-уровневой организации добавляется надкаталог, хранящий записи, указывающие на несколько каталогов.
Строка 60:
В архитектуре x86_64 возможно использовать страницы размером 4 килобайта (4096 байтов), 2 мегабайта, и (в некоторых AMD64) 1 гигабайт.
 
Если обращение к памяти не может быть оттранслировано через TLB, то микрокод процессора обращается к [[Таблица страниц|таблицам страниц]] и пытается загрузить PTE оттуда в TLB. Если и после такой попытки сохранились проблемы, то процессор исполняет специальное прерывание, называемое «[[отказ страницы]]» (page fault). Обработчик этого прерывания находится в подсистеме виртуальной памяти ядра ОС.
 
Некоторые процессоры (MIPS) не имеют обращающегося к таблице микрокода, и генерируют отказ страницы сразу после неудачи поиска в TLB, обращение к таблице и её интерпретация возлагаются уже на обработчик отказа страницы. Это лишает [[Таблица страниц|таблицы страниц]] требования соответствовать жёстко заданному на уровне аппаратуры формату.
 
Причины отказа страницы (''page fault''):
Строка 73:
Обработчик отказов в ядре может загрузить нужную страницу из файла или же из области подкачки (см. [[свопинг]]), может создать доступную на запись копию страницы «только для чтения», а может и возбудить исключительную ситуацию (в терминах UNIX — сигнал [[SIGSEGV]]) в данном процессе.
 
Каждый процесс имеет свой собственный набор [[Таблица страниц|таблиц страниц]]. Регистр «каталог страниц» перегружается при каждом [[Переключение контекста|переключении контекста]] процесса. Также необходимо сбросить ту часть TLB, которая относится к данному процессу.
 
В большинстве случаев ядро ОС помещается в то же адресное пространство, что и процессы, для него резервируются верхние 1—2 гигабайта 32-битного адресного пространства каждого процесса. Это делается с целью избежать переключения таблиц страниц при входе в ядро и выходе из него. Страницы ядра помечаются как недоступные для кода режима пользователя.