§ Каталог страниц
Каталог страниц - это массив размером в 4Кб, состоящий из 4-байтовых элементов PDE (Page Directory Entries). Каждый элемент указывает на таблицу страниц и по формату почти совпадает с PTE.Элемент PDE определяет положение таблицы страниц, указывая адрес физической страницы памяти, следовательно, во-первых, таблица страниц должна целиком находится в одной физической странице памяти, а во-вторых, размещена по физическому адресу. Сами таблицы страниц могут участвовать в процессе свопинга как обычные страницы, но следует помнить, что они размещены не в линейном адресном пространстве, а в пространстве физической памяти.
Каталог страниц, как правило, один на всю операционную систему защищённого режима, хотя процессор допускает любое количество каталогов страниц, со своими таблицами и страницами, но с точки целостности ОС и её защиты, нужно использовать одну таблицу и все процедуры распределения памяти реализовывать в ядре ОС.
Формат PDE
(все флаги в элементе PDE действуют на соответствующую таблицу страниц): | |
Бит: | Описание |
0: | P (Present - присутствие). Если 0, то таблица страниц не отображена на физическую память. Это значит, что она либо не определена, либо её содержимое было записано на диск операционной системой в процессе свопинга. Если происходит обращение к неприсутствующей таблице страниц (у которой бит P = 0), то процессор генерирует исключение страничного нарушения (#PF). |
1: | R / W (Read / Write - Чтение / Запись). Если 0, то для всех страниц этой таблицы разрешено только чтение, 1 - чтение и запись. |
2: | U / S (User / Supervisor - Пользователь / Система). Если 0, то доступ ко всем страницам данной таблицы разрешён только с нулевого уровня привилегий, если 1 - то со всех. |
3: | PWT (Write-Through - Сквозная запись). Когда этот флаг установлен, разрешено кэширование сквозной записи (write-through) для всех страниц данной таблицы страниц, когда сброшен - разрешено кэширование обратной записи (write-back). |
4: | PCD (Cache Disabled - Кэширование запрещено). Когда установлен, кэширование всех страниц данной таблицы страниц запрещено. Кэширование страниц запрещают для портов ввода/вывода, отображённых на память либо в случаях, когда кэширование не даёт выигрыша в производительности. Также, кэширование запрещается при обработке исключений и отладке в ситуациях, связанных с программированием кэшей.
Более подробно работа с флагами PWT и PCD описана в разделе "Управление кэшами". |
5: | A (Accessed - Доступ). Устанавливается процессором каждый раз, когда он производит обращение к страницам данной таблицы страниц. Процессор не сбрасывает этот флаг - его может может сбросить программа, чтобы потом, через некоторое время определить, был ли доступ к этой таблице страниц, или нет. |
6: | 0 (зарезервировано). |
7: | PS (Page size - Размер страницы). Если 0, то используются страницы размером 4Кб и данный элемент PDE указывает на таблицу страниц. Если флаг PS установлен в 1, то данный элемент PDE указывает на страницу размером 4Мб (для 32-разрядной адресации), либо размером 2Мб (при расширенной физической адресации). |
8: | G (Global Page - Глобальная страница). В PDE этот бит процессором игнорируется. |
9..11: | Доступно для использования программой. Процессор не использует эти биты. |
12..31: | Базовый адрес таблицы страниц - это адрес, с которого начинается таблица страниц, другими словами - это физический адрес, на который она отображена. |
Если таблица страниц не присутствует в памяти (бит P=0), то процессор не использует все остальные биты элемента PDE и программа может их использовать по своему усмотрению, например, хранить информацию о том, куда эту таблица страниц была перемещена:
Для начала мы будем использовать модель памяти процессора i368, поэтому флаги U/S, PWT, PCD и PS будем устанавливать в 0.