Под сегментом понимается блок смежных ячеек памяти в адресном пространстве 1Mb, с максимальным размером в 64Kb и начальным (базовым) адресом, находящимся на 16-байтной границе (параграфе). Для обращения к памяти необходимо определить базу сегмента и 16-битное расстояние от базы, называемое смещением.
Чтобы упростить обращения к памяти, за каждой командой закрепляется сегментный регистр по умолчанию, т.е. команды адресуются через CS:IP, стек через SS:SP, данные через DS:[смещение] и ES:[смещение].
Преобразование пары СЕГМЕНТ: СМЕЩЕНИЕ в физический производится в соответствии с выше приведенным выражением и, в результате, получаем 20-битный физический адрес. Переход от логического адреса в физический однозначен, а из физического адреса в логический неоднозначен, т.е. каждому физическому адресу может быть сопоставлено в соответствие 4Kb логических адресов.
При таком подходе есть неприятный момент, называемый заворачиванием адреса, возникающий, когда рассчитываемое значение физического адреса больше 1Mb.
|
|
Сегментация памяти процессора 8086 имеете особенности, усложняющие разработку многозадачных систем:
Сегменты памяти имеют всего два атрибута:
- начальный адрес (на границе параграфа);
- максимальный размер (64 Kb).
Никаких аппаратных средств контроля правильности использования сегментов нет.
Размещение сегментов в памяти произвольно, т.е. они могут частично или полностью перекрываться или не иметь общих частей.
Программа может обратиться к любому сегменту для выполнения операций чтения/записи или для выборки команды. Программа может обратиться по любому физическому адресу, а для защиты памяти от несанкционированного доступа требуются внешние схемы.
Нет препятствий для обращения к даже несуществующей физической памяти. Если программа выдаёт адрес несуществующей памяти, то результат работы зависит от аппаратных особенностей конкретной вычислительной машины.
Что же касается процессора архитектуры IA-32, сегменты в нем описываются отдельными информационными структурами, называемыми дескрипторами.
Основное отличие данной модели сегментации памяти заключается в том, что пользовательская программа не может свободно обращаться по любому адресу в пространстве памяти. Программа, в зависимости от уровня привилегий, не может обращаться к сегменту до тех пор, пока он не описан для данной программы.
Определение сегментов в многозадачном режиме производится на системном уровне, причем определяется следующая информация для каждого сегмента:
- базовый адрес;
- размер сегмента;
- целевое использование;
- уровень привилегий;
- другие параметры.
Базовый адрес может быть произвольным, т.е. выравнивание не требуется на границу параграфа или страницы. Размер сегмента может кодироваться от 1b до 4Gb. Это значит, что с помощью 32-битного индекса можно пройти всё адресное пространство, не модифицируя сегментный регистр.