Сегментная организация памяти. Защита памяти.

1.Память для процессоров 80х86 разделяются на байты (8 бит), слова (16 бит), двойные слова (32 бит). Слова записываются в двух смежных байтах, начиная с младшего. Адресом слова является адрес его младшего байта. Двойные слова записываются в четырех смежных байтах.

Более крупными единицами являются страницы и сегменты. Память может логически организовываться в виде одного или множества сегментов переменной длины ( в реальном режиме – фиксированной). Сегменты могут выгружаться на диске и по мере необходимости с него подкачиваться в физическую память.

Кроме сегментации, в защищенном режиме возможно разбиение логической памяти на страницы размером 4 Кб (Paging), каждая из которых может отображаться на любую область физической памяти. Сегментация и разбиение на страницы могут применяться в любых сочетаниях. Сегментация является средством организации логической памяти, используемым на прикладном уровне. Разбиение на страницы применяются на системном уровне при управлении физической памятью.

Защищенный режим предусматривает средства переключения задач. Состояние каждой задачи (то есть состояние всех регистров процессора) хранится в специальном сегменте состояния задачи, на который указывает селектор в регистре задачи. При переключении задачи достаточно загрузить в регистр задачи новый селектор, и состояние предыдущей задачи автоматически сохранится, а в процессор загрузится состояние новой (или ранее прерванной) задачи. Это развитие идеи стека.

В защищенном режиме предусматривается иерархическая четырехуровневая (уровни 0, 1, 2, 3) система привилегий, предназначенная для управления выполнением привилегированных команд и доступом к дескрипторам. Уровень 0 соответствует неограниченным правам доступа и отводится ядру операционной системы. Уровень 3 дает минимальные права и отводится прикладным задачам. Уровни привилегий относятся к дескрипторам, селекторам и задачам. Кроме того, в регистре флагов имеется двухбитовое поле привилегий ввода/вывода, управляющее доступом к командам ввода/вывода и флагом прерываний.

Механизм виртуальной памяти, используемый в защищенном режиме, позволяет любой задаче использовать логическое пространство размером до 64 Тбайт (16К сегментов по 4 Гбайта). Для этого каждый сегмент в своем дескрипторе имеет специальный бит, указывающий на присутствие данного сегмента в оперативной памяти в текущий момент. Неиспользуемый сегмент может быть выгружен из оперативной памяти во внешнюю память (обычно — на диск), о чем делается пометка в его дескрипторе. На освободившееся место из внешней памяти может закачиваться другой сегмент (это называется свопингом или подкачкой). При обращении задачи к отсутствующему в оперативной памяти сегменту вырабатывается специальное исключение, которое и выполняет свопинг. С точки зрения выполняемой программы, виртуальная память ничем не отличается от реальной (говорят, что виртуальная память прозрачна), не считая задержки на

процесс перекачки информации на диск и с диска.

Реальное использование системы защиты и виртуальной памяти возлагается на операционную систему, которая в идеале должна обеспечивать работоспособность даже в случае некорректного выполнения прикладных задач.

В памяти существует три типа таблиц дескрипторов: локальная таблица дескрипторов LDT, глобальная таблица дескрипторов GDT и таблица дескрипторов прерываний IDT. Каждой таблице соответствует свой регистр процессора (соответственно, LDTR, GDTR и IDTR), где хранятся дескрипторы сегментов. Глобальная таблица содержит дескрипторы, доступные всем задачам, а локальная может быть для каждой задачи своя. Дескрипторы состоят из 8 байтов (как и у 80286). Однако назначение байтов различно.

Применительно к памяти различают на три адресных пространства: логическое, линейное и физическое. Основным режимом работы 32-разрядных процессоров считается защищенный режим, в котором работают все механизмы преобразования адресных пространств.

Логический адрес, также называется виртуальным, состоит из селектора (в реальном режиме – просто сегмента) и смещение. Смещение формируется суммированием компонентов (base, index, disp) в эффективный адрес. Поскольку каждая задача может иметь до 16 Кб селекторов, а смещение, ограниченное размером сегмента, может достигать 4 Гб, логическое адресное пространство для каждой задачи может достигать 64 Тб. Все это пространство виртуальной памяти в принципе доступно программисту (этот ‘принцип” должна реализовывать операционная система).

Блок сегментации транслирует логическое адресное пространство в 32-битное пространство линейных адресов. Линейный адрес образуется сложением базового адресного сегмента с эффективным адресом. Базовый адрес сегмента в реальном режиме образуется умножением содержимого используемого сегментного регистра на 16 (как и в 8086). В защищенным режиме базовый адрес загружается из дескриптора, хранящегося в таблице, по селектору,

загруженному в используемый сегментный регистр.

Физический 32-битный адрес памяти образуется после преобразования линейного адреса блоком страничной переадресации. В простейшем случае (при отключенном блоке страничной переадресации) линейный адрес совпадает с физическим – присутствующим на внешней шине адреса процессора. Включенный блок страничной переадресации осуществляет трансляцию линейного адреса в физический блоками (страницами) размером 4 Гб. Этот блок может включаться только в защищенном режиме.

Система команд 32-разрядных процессоров предусматривает 11 режимов адресации операндов. Из них только два не имеют отношение к памяти:

. операнд-регистр, который может находится в любом 8, 16 или 32- битном регистре процессора.;

. непосредственный операнд (8, 16 или 32-бит), который может содержаться в самой команде.

Остальные девять режимов используются при формировании эффективного адреса операнда из памяти.

Эффективный адрес вычисляется с использованием комбинации следующих компонентов:

-Смещение (Displacement или Disp) – 8-, 16- или 32-битное число, включенное в команду.

-База (Base) – содержимое базового регистра. Обычно используется для указания на начало некоторого массива.

-Индекс (Index) – содержимое индексного регистра. Обычно используется для выбора элемента массива.

- Масштаб (Scale) – множитель (1, 2, 4 или 8), указанный в коде инструкции. Этот элемент используется для указания размера элемента массива. Доступен только в 32-битном режиме адресации.

Эффективный адрес вычисляется по формуле EA=Base+Index*Scale+Disp.

Отдельные слагаемые в этой формуле могут и отсутствовать.

2.Сегментная организации памяти. В 32-разрядных МП различают три адресных пространства памяти — логическое, линейное и физическое. Логический (или виртуальный) адрес состоит из селектора и смещения ЕА. Линейный адрес получается сложением базового адреса сегмента с эффективным адресом. Физический адрес памяти создается после преобразования линейного адреса блоком страничной переадресации.

Организация памяти зависит от режима работы МП. В реальном и виртуальном режимах i8086 адресация памяти такая же, как в МП i8086. В защищенном режиме используется сегментная и страничная организация памяти. Сегментная организация используется на прикладном уровне, а страничная — на системном. Формирование адреса ячейки памяти в защищенном режиме представлено на рис. 3.9.

Блок сегментации преобразует пространство логических адресов в пространство линейных адресов. Исходными данными для блока сегментации являются смещение ЕА в сегменте и сегментный регистр, которые задаются в команде. Содержимое сегментного регистра в защищенном режиме является селектором. Он содержит информацию о типе дескрипторной таблицы
(глобальной или локальной) и индекс дескриптора (см. рис. 3.1). Индекс дескриптора является номером дескриптора в таблице. Дескриптор содержит базовый адрес сегмента. Линейный адрес определяется сложением базового и эффективного адресов в соответствии с рис. 3.2. Блок страничной переадресации формирует физический адрес памяти. При отключенном блоке линейный адрес совпадает с физическим. Блок вычисления эффективного адреса вычисляет смещение операнда в сегменте согласно типу адресации, приведенному в табл. 3.3. Алгоритм вычисления адреса ячейки памяти для разных типов адресации показан на рис. 3.10.

В реальном режиме по умолчанию используется 16-разрядная адресация, но с помощью префикса изменения разрядности адреса можно переключить на 16-разрядный режим.

В защищенном режиме тип адресации зависит от бита D в дескрипторе кодового сегмента (при D = 0 используется 16-разрядная адресация, при D = 1 — 32- разрядная).

Защищенный режим был предложен для обеспечения независимости одновременного выполнения нескольких задач (как системных, так и прикладных). Для этого предусмотрена защита ресурсов каждой задачи от действий других задач. Под ресурсами здесь понимается память с данными, программами, системными таблицами, а также используемая задачей аппаратура. Защита основывается на сегментации памяти, причем, в отличие от реального режима, задача не может переопределять положения своих сегментов в памяти и использует только сегменты, определенные для нее операционной системой. Сегмент определяется дескриптором сегмента, который задает положение сегмента в памяти, его размер (или лимит), назначение и характеристики защиты.

Защита с помощью сегментации не позволяет:

· использовать сегменты не по назначению, например, трактовать область данных как область программы;

· нарушать права доступа (например, пытаться записывать информацию в сегмент, предназначенный только для чтения, или обращаться к сегменту, не имея достаточных привилегий);

· адресоваться к элементам, выходящим за границу сегмента;

· изменять дескрипторы сегментов, не имея достаточных привилегий.

Пример 3.6. Определить значение физического адреса операнда в команде пересылки в регистр AL содержимого ячейки памяти

MOV AL, [ВХ +4 . SI + 1000Н]

если базовый адрес сегмента данных равен I2456789H. а содержимое регистров ВХ = 0120Н, SI = 1234Н. Блок страничной переадресации отсутствует.

Эффективный адрес ячейки памяти ЕА = 0120Н + 4 • 1234Н + 1000Н = 59F0H.

Выполнив операцию сложения 32-разрядного базового адреса с эффективным адресом ЕА, получим линейный адрес, который совпадает с физическим адресом:

12456789Н + 59F0H = I245CI79H.

Таким образом, физический адрес равен 1245CI79H.

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