Интернет магазин китайских планшетных компьютеров



Компьютеры - Страничная память - Концепции

22 января 2011


Оглавление:
1. Страничная память
2. Концепции
3. Отображаемые в память файлы
4. Страничная и сегментная виртуальная память
5. Виртуальная память и дисковый кэш
6. Соображения безопасности



Адрес, используемый в машинном коде, то есть значение указателя, называется «виртуальный адрес».

Адрес, выставляемый процессором на шину, называется «физический адрес».

Процессор содержит в себе небольшой объём сверхбыстрой ассоциативной памяти, т. н. TLB, в котором содержится преобразование нескольких виртуальных адресов страниц в физические. Все обращения процессора к памяти подлежат трансляции адресов через TLB.

Так как 64 строк таблицы явно недостаточно для реальных задач, в архитектуре используются таблицы страниц, размещённые в основной памяти. Каждая таблица страниц сама является страницей с теми же требованиями по выравниваю и тем же размером, и состоит из записей таблицы страниц. Широко используется и отображение самой таблицы страниц как одной из страниц данных для внесения изменений в записи.

Запись таблицы страниц обычно содержит в себе следующую информацию:

  • флаг «страница отображена»
  • физический адрес
  • флаг «страница доступна из режима пользователя». При неустановке данного флага страница доступна только из режима ядра.
  • флаг «страница доступна только на чтение». В некоторых случаях используется только для режима пользователя, то есть в режиме ядра все страницы всегда доступны на запись.
  • флаг «страница недоступна на исполнение».
  • режим использования кэша для страницы. Влияет на тип шинных транзакций, инициируемых процессором при обращении через данную запись. Особенно часто используется для видеопамяти и для отображенных в память регистров устройств.

Так как число записей в одной таблице ограничено и зависит от размера записи и размера страницы, используется многоуровневая организация таблиц, часто 2 или 3 уровня, иногда 4 уровня. В случае 2 уровней используется «директория» страниц, имеющая в себе записи, указывающие на физические адреса таблиц страниц. Таблицы содержат в себе записи, указывающие уже на страницы данных. В случае 3 уровней возникает еще и супер-директория, содержащая в себе записи, указывающие на несколько директорий.

Старшие биты виртуального адреса указывают на номер записи в директории, средние — номер записи в таблице, младшие попадают в физический адрес без трансляции.

Формат записей таблиц, их размер, размер страницы и организация таблиц зависит от типа процессора, а иногда и от режима его работы.

Исторически, x86 использует 32битные PTE, 32битные виртуальные адреса, 4KB страницы, 1024 записи в таблице, двухуровневые таблицы, старшие 10 бит виртуального адреса — номер записи в директории, следующие 10 — номер записи в таблице, младшие 12 — адрес внутри страницы. Начиная с Pentium Pro процессор поддерживает страницы размером 4Мб.

Процессор x86 в режиме PAE и в режиме x86_64, использует 64битные PTE, 32битные виртуальные адреса, 4KB страницы, 512 записей в таблице, трехуровневые таблицы с 4 директориями и 4 записями в супер-директории, старшие 2 бита виртуального адреса — номер записи в супер-директории, следующие 9 — в директории, следующие 9 — в таблице. Физический адрес директории или же супер-директории загружен в один из управляющих регистров процессора.

При использовании PAE вместо 4Мб страниц используются двухмегабайтные. См. также PSE.

В архитектуре x86_64 возможно использовать страницы размером 4 килобайта, 2 мегабайта, и 1 гигабайт.

Если обращение к памяти не может быть оттранслировано через TLB, то микрокод процессора обращается к таблицам страниц и пытается загрузить PTE оттуда в TLB. Если и после такой попытки сохранились проблемы, то процессор исполняет специальное прерывание, называемое «отказ страницы». Обработчик этого прерывания находится в подсистеме виртуальной памяти ядра ОС.

Некоторые процессоры не имеют обращающегося к таблице микрокода, и генерируют отказ страницы сразу после неудачи поиска в TLB, обращение к таблице и её интерпретация возлагаются уже на обработчик отказа страницы. Это лишает таблицы страниц требования соответствовать жёстко заданному на уровне аппаратуры формату.

Причины отказа страницы:

  • не существует таблицы, отображающей данный регион
  • PTE не имеет взведённого флага «страница отображена».
  • попытка обратиться из пользовательского режима к странице «только для ядра».
  • попытка записи в страницу «только для чтения».
  • попытка исполнения кода из страницы «исполнение запрещено».

Обработчик отказов в ядре может загрузить нужную страницу из файла или же из области подкачки, может создать доступную на запись копию страницы «только для чтения», а может и возбудить исключительную ситуацию в данном процессе.

Каждый процесс имеет свой собственный набор таблиц страниц. Регистр «директория страниц» перегружается при каждом переключении контекста процесса. Также необходимо сбросить ту часть TLB, которая относится к данному процессу.

В большинстве случаев ядро ОС помещается в то же адресное пространство, что и процессы, для него резервируются верхние 1-2 гигабайта 32битного адресного пространства каждого процесса. Это делается с целью избежать переключения таблиц страниц при входе в ядро и выходе из него. Страницы ядра помечаются как недоступные для кода режима пользователя.

Память региона ядра часто совершенно одинакова для всех процессов, однако некоторые подрегионы региона ядра могут быть различными для разных групп процессов.

Так как память ядра одинакова у всех процессов, соответствующие ей TLB не нужно перегружать после переключения процесса. Для этой оптимизации x86 поддерживает флаг «глобальный» у PTE.



Просмотров: 5063


<<< Сегментная защита памяти
NX bit >>>