Формирование линейного адреса в реальном режиме.

Сегментированная модель памяти.

 

Сегментация [Юров,2002] - это механизм адресации, обеспечивающий существование нескольких независимых адресных пространств как в пределах одной задачи, так и в системе в целом для защиты задач от взаимного влияния.

Суть сегментной адресации заключается в следующем.

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

Существуют три модели сегментированной организации памяти:

- сегментированная модель памяти реального режима;

- сегментированная модель памяти защищенного режима;

- сплошная модель памяти защищенного режима.

Рассмотрим процесс формирования физического (линейного) адреса в реальном режиме.

В реальном режимесегментные регистры процессора содержат старшие 16 бит физического адреса начала сегмента. Максимальное значение, которое могут содержать 16-битные регистры, составляет 216-1 или 64 Кбайт. Но адресное пространство реального режима составляет 1 Мбайт.

Возникает вопрос о том, как адресовать остальную часть оперативной памяти вплоть до 1 Мбайта, если размер самого сегмента не превышает 64 Кбайт. Чтобы организовать работу с мегабайтным адресным пространством памяти, используется искусственное выделение из адресного пространства сегментов по 64К (так как в таком объеме мы можем использовать шестнадцатиразрядные адреса). Недостающие младшие четыре бита 20-битного адреса получаются сдвигом значения в сегментном регистре на 4 разряда влево.

Физический адрес получается путем сложения этого адреса с 16-разрядным значением смещения в сегменте, формируемого по заданному режиму адресации для операнда или извлекаемому из регистра IP для команды

Рис.3.2 Формирование физического адреса памяти из адреса сегмента и смещения.

 

На рисунке видно, что сегментная часть извлекается из одного из сегментных регистров, сдвигается на четыре разряда влево и суммируется со смещением. Получившиеся 20-битное значение и является настоящим физическим адресом, соответствующим началу сегмента.

Процедура умножения сегментного адреса на 16 (или, что то же самое, на 10h) является принципиальной особенностью реального режима, ограничивающей диапазон адресов, доступных в реальном режиме, величиной 1 Мбайт. Действительно, максимальное значение сегментного адреса составляет FFFFh, или 64К-1, из чего следует, что максимальное значение начального адреса сегмента в памяти равно FFFF0h, или 1 Мбайт - 16. Если, однако, учесть, что к начальному адресу сегмента можно добавить любое смещение в диапазоне от 0 до FFFFh, то адрес последнего адресуемого байта окажется равен 10FFEFh, что соответствует величине 1 Мбайт + 64 Кбайт - 17.