Страничная память. Причины отказа страницы (page fault). Страничная и сегментная виртуальная память

Страницы работы

Фрагмент текста работы

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

Поддержка такого режима присутствует в большинстве 32битных и 64битных процессоров. Такой режим является классическим для почти всех современных ОС, в том числе Windows и семейства UNIX. Широкое использование такого режима началось с процессора VAX и ОС VMS с конца 70х годов (по некоторым сведениям, первая реализация). В семействе x86 поддержка появилась с поколения 386, оно же первое 32битное поколение.

Решаемые задачи поддержка изоляции процессов и защиты памяти путём создания своего собственного виртуального адресного пространства для каждого процесса поддержка изоляции области ядра от кода пользовательского режима поддержка памяти «только для чтения» и неисполняемой памяти поддержка отгрузки давно не используемых страниц в область подкачки на диске поддержка отображённых в память файлов, в том числе загрузочных модулей поддержка разделяемой между процессами памяти, в том числе с копированием-по-записи для экономии физических страниц поддержка системного вызова fork() в ОС семейства UNIX

Концепции

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

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

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

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

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

флаг «страница отображена»

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

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

флаг «страница недоступна на исполнение».

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

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

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

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

Например, x86 использует 32битные PTE, 32битные виртуальные адреса

Похожие материалы

Информация о работе