§ Каталог страниц

Каталог страниц - это массив размером в 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.