4.3. Страничная трансляция
Механизм сегментации обеспечивает превосходную защиту, но он не очень удобен для реализации виртуальной памяти (подкачки). В дескрипторе сегмента есть бит присутствия, по нему процессор определяет, находится ли данный сегмент в физической памяти или он находится на внешнем запоминающем устройстве (на винчестере). В последнем случае генерируется исключение #11, обработчик которого может подгрузить сегмент в память. Неудобство заключается в том, что различные сегменты могут иметь различную длину. Этого можно избежать, если механизм подкачки реализовывать на основе страничного преобразования. Особенностью этого преобразования является то, что процессор в этом случае оперирует с блоками физической памяти равной длины (4Кбайт) - страницами. Страницы не имеют непосредственного отношения к логической структуре программы.
Страничное преобразование действует только в защищенном режиме и включается установкой в 1 бита PG в регистре CR0.
В страничном преобразовании участвуют два типа структур: каталоги таблиц (Page Directory) и таблицы страниц (Page Table). Эти структуры состоят из 1024 32-битных элементов. Элементы содержат старшие 20 бит физического адреса адресуемых объектов. Элементы таблицы страниц (Page Table Entry - PTE) адресуют страницы, а элементы каталога таблиц (Page Directory Entry - PDE) адресуют таблицы страниц. Старшие 20 бит физического адреса каталога таблиц хранится в регистре CR3 (Page Directory Base Register - PDBR). (Это единственный регистр процессора, который содержит физический адрес памяти). Все структуры выравниваются по границе страницы.
![Страничная трансляция (4К)](paging4k.gif)
В процессе страничной трансляции адресов полученный линейный адрес разбивается на три части. Старшие десять бит (Directory) линейного адреса являются индексом элемента из каталога таблиц. По этому элементу определяется физический адрес таблицы страниц. Биты 21-12 (Table) линейного адреса выбирают элемент из этой таблицы страниц. Выбранный элемент определяет физический адрес страницы. Младшие 12 бит (Offset) линейного адреса определяют смещение от начала страницы.
Страницы начинаются на границах 4Кбайт областей памяти, поэтому младшие 12 бит адреса страницы всегда равны нулю. В каталоге таблиц элементы хранят физические адреса таблиц страниц. В таблице страниц элементы хранят физические адреса самих страниц.
Элементы каталогов таблиц и таблиц страниц в битах 12-31 содержат старшие 20 бит физического адреса объекта (для PDE - таблицы страниц, для PTE - страницы). Биты 9-11 системный программист может использовать по своему усмотрению. Остальные биты имеют следующие значения:
![Формат элемента PDE/PTE (4K)](pde4k.gif)
- P - бит присутствия (Present). Этот бит показывает, может ли элемент таблицы использоваться при трансляции адреса. Если может, то P=1. Если же P=0 в таблице страниц любого уровня, то этот элемент нельзя использовать для трансляции адреса и остальные поля элемента доступны для использования программой. Если P=0 в таблице страниц любого уровня и сделана попытка использовать этот элемент для трансляции адреса, то микропроцессор генерирует страничное нарушение (исключение #14).
- R/W - бит чтения/записи (Read/Write). Этот бит определяет тип доступа к странице (для PTE) или группе страниц (для PDE). Если бит сброшен, страница доступна только для чтения. Если установлен - для чтения и записи.
- U/S - бит уровня привилегий (User/Supervisor). Этот бит определяет уровень привилегий доступа к станице (для PTE) или группе страниц (для PDE). Если бит установлен, страница доступна с уровня пользователя. Если сброшен - только с уровня супервизора.
- PWT - бит сквозной записи (Page Write-Through, 486+). Управляет кэшированием страниц.
- PCD - бит запрещения кэширования (Page Cache Disable, 486+). Запрещает кэширование страницы или группы страниц.
- A - бит обращения (Accessed). Процессор устанавливает этот бит всякий раз, когда обращается для чтения или записи к соответствующей таблице страниц или странице. Процессор самостоятельно этот бит никогда не сбрасывает.
- D - бит изменения (Dirty). Процессор устанавливает этот бит в PTE всякий раз, когда изменяет содержимое соответствующей страницы. Процессор самостоятельно этот бит никогда не сбрасывает. В элементе каталога таблиц этот бит не используется и всегда 0.
- Бит 7 PTE: PS - размер страницы (Page Size, Pentium+). В традиционном страничном преобразовании этот бит должен быть сброшен. При использовании расширения размера страниц (PSE), если PS=1, то этот элемент каталога таблиц указывает не на таблицу страниц, а на страницу размером 4Мбайт (или 2Мбайт, если разрешено PAE).
- Бит 7 PDE: PAT - таблица атрибутов страниц (Page Attribute Table Index, Pentium III+). В процессорах, не поддерживающих таблицы атрибутов страниц, этот бит должен быть 0.
- G - бит глобальности (Global Page, P6+). Влияет на процесс кэширования страниц. В элементах каталога таблиц не используется (игнорируется).
Бит изменения (D) и бит обращения (A) содержат информацию об использовании страницы и устанавливаются аппаратно. Процессор устанавливает биты доступа в таблицах обоих уровней перед операцией чтения или записи страницы. Затем процессор устанавливает бит изменения в таблице страниц второго уровня перед операцией записи по адресу, соответствующему элементу этой таблицы. Бит изменения в элементах каталога таблиц не используется.
В операционной системе, которая поддерживает страничную виртуальную память, эти биты используются для определения тех страниц, которые могут быть удалены из физической памяти в случае, когда требуется больший объем, чем размер доступной в данный момент физической памяти. Ответственность за проверку и очистку этих двух битов лежит на операционной системе.
В процессорах Pentium фирма Intel реализовала новую возможность - расширение размера страниц (Page Size Extension - PSE). PSE позволяет использовать страницы размером 4Мбайт и одноуровневый механизм страничной трансляции.
В подсемействе P6 шина адреса была расширена до 36 бит. Соответственно, процессоры Pentium Pro, Pentium II, Pentium III и более поздние способны адресовать до 64 Гбайт физической памяти. Эта возможность называется расширением физического адреса (Physical Address Extension - PAE) и доступна только при использовании страничной трансляции.
Использование PSE и PAE следующим образом влияет на страничное преобразование:
CR0.PG | CR4.PAE | CR4.PSE | PDE.PS | Размер страницы | Разрядность физ.адреса |
---|---|---|---|---|---|
0 | x | x | x | - | 32 бит |
1 | 0 | 0 | x | 4K | 32 бит |
1 | 0 | 1 | 0 | 4K | 32 бит |
1 | 0 | 1 | 1 | 4M | 32 бит |
1 | 1 | x | 0 | 4K | 36 бит |
1 | 1 | x | 1 | 2M | 36 бит |