7.1. Сегментированная модель
Сегментация – механизм адресации, обеспечивающий существование нескольких независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния. В основе механизма сегментации лежит понятие сегмента, который представляет собой независимый, поддерживаемый на аппаратном уровне блок памяти.
Внутри сегмента программа обращается к адресам относительно начала сегмента линейно, то есть с 0 и заканчивается адресом, равным размеру сегмента. Адрес (смещение), который процессор использует для доступа к данным внутри сегмента, называется относительным. Для того, чтобы адресовать другой сегмент, необходимо всего лишь изменить адрес сегментного регистра.
Адрес сегмента хранится в одном из сегментных регистрах (ОСНОВНЫЕ - CS, DS, SS, дополнительные ES, FS, GS). Итак, для адресации используется два числа: адрес сегмента и смещение (рис. 5). Сегменты начинаются через 10h и перекрываются друг с другом.
Рис. 1. Принцип формирования адреса в реальном времени
7.2. Формирование абсолютного адреса в реальном режиме
Под абсолютным адресом понимается адрес памяти, выдаваемый на шину адреса процессора.
В реальном режиме механизм адресации физической памяти имеет следующие характеристики:
Диапазон изменения абсолютного адреса от 0 до 1 Мбайт. Эта величина определяется тем, что шина адреса i8086 имела 20 линий;
Максимальный размер сегмента 64 Кбайт. Это объясняется 16-разрядной архитектурой i8086. Нетрудно подсчитать, что максимальное значение, которое могут содержать 16-разрядные регистры, составляет , что применительно к памяти и определяет величину 64Кбайт;
Для обращения к конкретному абсолютному адресу оперативной памяти необходимо определить адрес начала сегмента (сегментную составляющую) и смещение внутри сегмента. Адрес начала сегмента может быть только в диапазоне 0 – 64 Кбайт от начала оперативной памяти.
Возникает вопрос о том, как адресовать остальную часть оперативной памяти вплоть до 1 Мбайт с учетом того, что размер самого сегмента не превышает 64 Кбайт.
Дело в том, что в сегментном регистре содержатся только 16 бит абсолютного адреса начала сегмента. Недостающие младшие четыре бита 20-битного адреса получаются сдвигом значения в сегментном регистре влево на 4 разряда. Эта операция сдвига выполняется аппаратно и для программного обеспечения абсолютно прозрачна. Получившееся 20-битное значение и является настоящим абсолютным адресом, соответствующим началу сегмента. Второй компонент, участвующего в образовании абсолютного адреса некоторого объекта в памяти – смещение-, то оно представляет 16-биное значение. Две составляющие складываются на аппаратном уровне, в результате получается абсолютный адрес памяти размерностью 20 бит.
Данный механизм образования абсолютного адреса памяти позволяет сделать программное обеспечение перемещаемым, то есть не зависящим от конкретных адресов загрузки его в оперативной памяти.
Недостатки такой организации памяти:
Сегменты бесконтрольно размещаются с любого адреса, кратного 16;
Сегменты имеют максимальный размер 64 Кбайт;
Сегменты могут перекрываться с другими сегментами.
Желание избавится от указанных недостатков привели к появлению защищенного режима.
Пример: Пусть известно смещение ячейки 0435 в сегменте 0FE2. Найти абсолютный адрес данной ячейки.
Указание: использовать формулы формирования адреса в реальном времени. Ответ: 05332.