Страничная и сегментная организация памяти. Виртуальная память
Режимы процессора
32-разрядный процессор может работать в одном из двух режимов и переключаться между ними достаточно быстро:
Real Address Mode – режим реальной адресации (или просто реальный режим – Real Mode), полностью совместим с 8086. В этом режиме возможна адресация до 1 Мбайт физической памяти.
Protected Virtual Address Mode – защищенный режим виртуальной адресации (или просто защищенный режим – Protected Mode). В этом режиме процессор позволяет адресовать до 4 Гбайт физической памяти, через которую при использовании механизма страничной адресации могут отображаться до 64 Тбайт виртуальной памяти каждой задачи.
Существенным дополнением является Virtual 8086 Mode – режим виртуального процессора 8086. Этот режим является особым состоянием задачи защищенного режима, в котором процессор функционирует как 8086.
На одном процессоре в таком режиме могут параллельно исполняться несколько задач с изолированными друг от друга ресурсами. При этом использование физического адресного пространства памяти управляется механизмами сегментации и трансляции страниц. Попытки выполнения недопустимых команд, выхода за рамки отведенного пространства памяти и разрешенной области ввода/вывода контролируются системой защиты.
Организация памяти
Ячейка памяти – элементарная адресуемая единица запоминающего устройства.
Память для 32-разрядных процессоров 80х86 подразделяется на байты (8 бит), слова (16 бит), двойные слова (32 бит) и учетверенные слова (64 бит). Все пространство памяти разбивается на параграфы – области из 16 смежных байт, начиная с нулевого адреса.
Более крупными единицами организации памяти являются страницы и сегменты.
Сегмент – единица памяти, которая в зависимости от режима работы процессора может быть 64 Кбайт, 1Мбайт или 4 Гбайта.
Страница памяти – единица памяти, обычно 4Кбайта.
Страничный сегмент – сегмент в памяти, разделенный на страницы.
Память может логически организовываться в виде одного или множества сегментов переменной длины (в реальном режиме – фиксированной). Кроме сегментации, в защищенном режиме возможно разбиение (Paging) логической памяти на страницы размером 4 Кбайта, каждая из которых может отображаться на любую область физической памяти. Начиная с 5-го поколения появилась возможность увеличения размера страницы до 4 Мбайт. Сегментация и разбиение на страницы могут применяться в любых сочетаниях. Сегментация является средством организации логической памяти на прикладном уровне. Разбиение на страницы применяется на системном уровне для управления физической памятью. Сегменты и страницы могут выгружаться из физической оперативной памяти на диск и по мере необходимости подкачиваться с него обратно в физическую память. Таким образом реализуется виртуальная память.
Применительно к памяти различают три адресных пространства: логическое, линейное и физическое. Основным режимом работы 32-разрядных процессоров считается защищенный режим, в котором работают все механизмы преобразования адресных пространств.
Логический адрес, также называемый виртуальным, состоит из селектора сегмента и эффективного адреса, называемого также смещением (offset).
Селектор сегмента хранится в старших 14 битах сегментного регистра (CS, DS, ES, SS, FS или GS), участвующего в адресации конкретного элемента памяти. По значению селектора из специальных таблиц, хранящихся в памяти, извлекается начальный адрес сегмента.
Эффективный адрес вычисляется по формуле
EA=Base+Index · Scale+Disp,
где Смещение (Displacement или Disp) – 8-, 16- или 32-битное число, включенное в команду;
База (Base) – содержимое базового регистра;
Индекс (Index) – содержимое индексного регистра;
Масштаб (Scale) – множитель (1, 2, 4 или 8), указанный в коде инструкции.
Блок сегментации транслирует логическое адресное пространство в 32-битное пространство линейных адресов. Линейный адрес образуется сложением базового адреса сегмента со смещением.
Базовый адрес – адрес, относительно которого указываются другие адреса в сегменте данных.
Смещение – величина, добавляемая к базовому адресу для получения исполнительного адреса.
Базовый адрес сегмента в реальном режиме образуется умножением содержимого используемого сегментного регистра на 16 (как и в 8086). В защищенном режиме базовый адрес загружается из дескриптора, хранящегося в таблице, по селектору, загруженному в используемый сегментный регистр.
32-битный физический адрес памяти образуется после преобразования линейного адреса блоком страничной переадресации. Он выводится на внешнюю шину адреса процессора. В простейшем случае (при отключенном блоке страничной переадресации) физический адрес совпадает с линейным. Включенный блок страничной переадресации осуществляет трансляцию линейного адреса в физический страницами размером 4 Кбайт (для старших поколений процессоров также возможны страницы размером 2 или 4 Мбайт). Блок обеспечивает расширение разрядности физического адреса процессоров шестого поколения до 36 бит.
Шина адреса разрядностью 32/64 бита позволяет адресовать 4/64 Гбайта физической памяти, но в реальном режиме доступен только 1 Мбайт младших адресов.