Страничная и сегментная организация памяти. Виртуальная память

Режимы процессора

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 Мбайт младших адресов.

Наши рекомендации