Формирование физического адреса в реальном режиме




Реальный режим был введен для процессоров Intel 8086. Характеристики этого процессора и определили характеристики механизма адресации физической памяти в реальном режиме. Перечислим эти характеристики.

· Диапазон изменения физического адреса — от 0 до 1 Мбайт. Эта величина определяется тем, что шина адреса i8086 имела 20 линий.

· Максимальный размер сегмента — 64 Кбайт. Это объясняется 16-разрядной архитектурой i8086. В эти регистры могут быть записаны значения от 0 до 216-1, что применительно к памяти и определяет размер сегмента 216байт=26210байт=64 Кбайт.

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

Понятие адреса начала сегмента ввиду принципиальной важности требует дополнительного пояснения.

Исходя из разрядности сегментных регистров, можно утверждать, что адрес начала сегмента (или база сегмента) представляет собой всего лишь 16-разрядное значение, помещенное в один из сегментных регистров. Максимальное значение, которое при этом получается, соответствует 216-1. Если так рассуждать, то получается, что адрес начала сегмента может быть только в диапазоне 0-64 Кбайт от начала оперативной памяти. Возникает вопрос: как адресовать остальную часть оперативной памяти вплоть до 1 Мбайт с учетом того, что размер самого сегмента не превышает 64 Кбайт?

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

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

 

Рис. 2. Механизм формирования физического адреса в реальном режиме

 

Процессоры Intel 80486 и Pentium имеют 32-разрядную шину адреса. Пока процессор находится в реальном режиме, старшие 12 линий шины адреса этих процессоров попросту недоступны.

Недостатки реального режима:

· сегменты бесконтрольно размещаются с любого адреса, кратного 16 (так как содержимое сегментного регистра аппаратно смещается на 4 разряда), и, как следствие, программа может обращаться по любым адресам, в том числе и реально не существующим;

· сегменты имеют максимальный размер 64 Кбайт;

· сегменты могут перекрываться другими сегментами.

Дело обстоит следующим образом:

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

Предположим, что в DS (регистр сегмента данных) находится значение , то при сдвиге на 4 разряда влево получим , то есть физический адрес начала сегмента данных будет равен этому числу или 1·25=32.

Предположим, что SS (регистр сегмента стека) находится значение , то при сдвиге на 4 разряда влево получим , то есть физический адрес начала сегмента данных будет равен этому числу или 1·25+1·24=48.

Минимальное расстояние между началами двух сегментов составляет 16 адресов (каждый адрес указывает на один байт). Поскольку максимальный размер сегмента составляет 64 Кбайта, то возможно взаимное перекрытие сегментов (то есть, например, если DI будет содержать смещение, равное 20, то физический адрес данных будет равен 32+20=52, то есть будет происходить обращение в область сегмента стека, который начинается с 48 адреса.

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

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: