Читайте также:
|
|
При работе процессора Pentium в защищенном режиме, в распоряжении программиста имеется виртуальное адресное пространство – совокупность сегментов. Каждый сегмент имеет описание, называемое дескриптором сегмента (8 байт) и содержит все характеристики сегмента. Различают три типа сегментов:
1) Сегмент данных
2) Сегмент кода
3) Системный сегмент
Дескрипторы сегментов объединяются в таблицы (LDT, GDT)
GDT – предназначена для описания сегментов ОС и общих сегментов всех прикладных процессов
LDT – дескрипторы сегмента отдельного пользовательского процесса.
IDT – таблица дескрипторов прерываний.
Таблица GDT – одна, а таблиц LDT – столько, сколько в системе выполняется задач, процессов. При этом в каждый момент времени операционной системой используется только одна таблица LDT, которая соответствует выполняемому процессу. GDT описывает общую часть виртуального адресного пространства LDT – конкретный процесс. Таблицы GDT и LDT находятся в виде отдельных сегментов в оперативной памяти.
В каждый момент времени в специальных регистрах GDTR и LDTR хранится информация о местоположении в памяти и размерах таблиц GDT и LDT. Регистр GDTR содержит 32 битный физический адрес начала сегмента GDT в памяти, а также 16 битный размер этого сегмента. Регистр LDTR указывает на сегмент LDT косвенно, он содержит индекс GDT в котором хранится адрес LDT и ее размер.
Процесс обращается к физической памяти по виртуальному адресу (селектор:смещение)
При «сегментной» организации памяти каждый процесс может иметь виртуальное пространство 64 Тбайт.
линейный адрес может считаться физическим адресом, если не включен режим страничной трансляции адресов.
СЕГМЕНТНО – СТРАНИЧНАЯ МОДЕЛЬ (ЛИНЕЙНЫЙ АДРЕС НЕ СОВПАДАЕТ С ФИЗИЧЕСКИМ) (4 Кб страницы)
Прежде всего, нужно понять очень важную вещь: при использовании страничной адресации структуры из сегментной адресации (как то – таблицы дескрипторов, селекторы, регистры таблиц дескрипторов) НИКУДА НЕ ДЕВАЮТСЯ!
ВАЖНЫЙ МОМЕНТ: ЕДИНСТВЕННОЕ МЕСТО, ГДЕ СТРАНИЧНАЯ АДРЕСАЦИЯ ДЕЙСТВИТЕЛЬНО ВКЛИНИВАЕТСЯ В ПРОЦЕСС РАБОТЫ ПРОЦЕССОРА – ПРИ ПЕРЕВОДЕ ЛИНЕЙНОГО АДРЕСА В ФИЗИЧЕСКИЙ!
три понятия:
1) логический, (допустим CS + EIP)
2) линейный;
3) физический адрес.
При использовании страничной адресации линейный адрес не совпадает с физическим, как в случае с сегментной адресацией. Т.е. мы имеем дело с виртуальной памятью. Процессор делит линейное адресное пространство на страницы фиксированного размера (длиной 4Кб, 2Мб или 4Мб), которые, в свою очередь, уже отображаются в физической памяти (или на диске). Когда программа (или задача) обращается к памяти через логический адрес, процессор переводит его в линейный и затем, используя механизму страничной адресации, переводит его в соответсвтующий физический адрес. Если страницы в данный момент нет в физической памяти, то возникает исключение #PF. Это по сути кульминационный момент: обработчик этого исключения (#PF) должен выполнить соответствующие манипуляции по устранению данной проблемы, т.е. подгрузить страницу с харда (или наоборот – скинуть ненужную страницу на диск).
Итак, страничная организация непосредственно в проце управляется тремя флажками:
Теперь подробнее. Флаг PG разрешает страничную адресацию. Сразу после установки его в единицу страничная адресация включена.
Флаг PSE, если его установить, позволяет использовать страницы больших размеров (4Мб и 2Мб). Если сброшен – страницы имеют размер 4Кб.
Флаг PAE позволяет расширить физический адрес до 36 бит (стандартно он 32-х битный). Данный флаг можно использовать ТОЛЬКО в режиме страничной адресации. Узнать, поддерживает ли проц. данное расширение можно по 17 биту в EDX после CPUID.
При трансляции линейного адреса в физический (при включенной страничной адресации) процессор использует 4 структуры данных:
1) Каталог страниц – массив 32-битных записей (PDE – page- directory entry), к-рые хранятся в 4Кб странице (всего 1024 штуки)
2) Таблица страниц – массив 32-битных записей (PTE – page-table entry), которые также все расположены в одной 4Кб странице.
3) Сама страница – 4Кб, 2Мб или 4Мб кусок памяти:)
4) Указатель на каталог страниц – массив 64-битных записей
И что мы видим? А видим мы следующее: линейный адрес (тот самый, который получается в результате сложения базы сегмента со смещением при сегментной организации) при страничной организации с 4Кб страницами делится на три части:
На самом деле, может создаться ошибочное мнение, что каталог страниц – один единственный, и указывает на него регистр CR3 (как в случае с глобальной таблицей дескрипторов и регистром GDTR, помнишь?). На самом же деле все обстоит совсем не так, каталогов страниц может быть несколько, даже у каждой задачи свой, а регистр CR3 меняется после переключения задачи (подробнее – в выпуске, про переключение задач).
Дата добавления: 2015-08-21; просмотров: 181 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Управление памятью | | | Линейная адресная трансляция (4Мб страницы) |