Сегментация памяти. IA-32

Под сегментом понимается блок смежных ячеек памяти в адресном пространстве 1Mb, с максимальным размером в 64Kb и начальным (базовым) адресом, находящимся на 16-байтной границе (параграфе). Для обращения к памяти необходимо определить базу сегмента и 16-битное расстояние от базы, называемое смещением.

Чтобы упростить обращения к памяти, за каждой командой закрепляется сегментный регистр по умолчанию, т.е. команды адресуются через CS:IP, стек через SS:SP, данные через DS:[смещение] и ES:[смещение].

Преобразование пары СЕГМЕНТ: СМЕЩЕНИЕ в физический производится в соответствии с выше приведенным выражением и, в результате, получаем 20-битный физический адрес. Переход от логического адреса в физический однозначен, а из физического адреса в логический неоднозначен, т.е. каждому физическому адресу может быть сопоставлено в соответствие 4Kb логических адресов.

При таком подходе есть неприятный момент, называемый заворачиванием адреса, возникающий, когда рассчитываемое значение физического адреса больше 1Mb.

Сегментация памяти процессора 8086 имеете особенности, усложняющие разработку многозадачных систем:

Сегменты памяти имеют всего два атрибута:

- начальный адрес (на границе параграфа);

- максимальный размер (64 Kb).

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

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

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

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

Что же касается процессора архитектуры IA-32, сегменты в нем описываются отдельными информационными структурами, называемыми дескрипторами.

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

Определение сегментов в многозадачном режиме производится на системном уровне, причем определяется следующая информация для каждого сегмента:

- базовый адрес;

- размер сегмента;

- целевое использование;

- уровень привилегий;

- другие параметры.

Базовый адрес может быть произвольным, т.е. выравнивание не требуется на границу параграфа или страницы. Размер сегмента может кодироваться от 1b до 4Gb. Это значит, что с помощью 32-битного индекса можно пройти всё адресное пространство, не модифицируя сегментный регистр.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: