Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
org_evm.doc
Скачиваний:
27
Добавлен:
09.11.2018
Размер:
1.22 Mб
Скачать

Вопрос № 8 Сегментная и страничная адресация памяти

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

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

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

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

  1. Сегментная адресация памяти

Особенностью архитектуры процессоров INTEL 8086, 80286, 80386, 80486 является использование механизма сегментации адресного пространства.

Прообраз процессора 8086 - оригинальный микропроцессор INTEL 8080 - имел линейное адресное пространство размером 64 килобайта. В этом микропроцессоре логический и физический адреса совпадали - все 16 адресных линий (адресных шин) использовались непосредственно для адресации памяти, а программы оперировали абсолютными шестнадцатиразрядными адресами.

Однако быстро растущие потребности программ в оперативной памяти привели к необходимости расширения адресного пространства. Следующий микропроцессор 8086 имел уже 20 адресных линий, что позволило непосредственно адресовать до мегабайта оперативной памяти. Архитектурное решение этого микропроцессора позволило легко адаптировать накопленное в большом количестве программное обеспечение для микропроцессора 8080.

Микропроцессор 8086 является шестнадцатиразрядным, поэтому использование двадцатиразрядного адреса в 16-разрядных командах неэффективно. Вместо указания в командах полного 20-разрядного адреса используется двухкомпонентная адресация, причем каждая компонента использует только 16 разрядов.

Эти компоненты называются сегментной компонентой адреса и компонентой смещения. Логический 20-разрядный адрес получается сложением двух компонент, причем сегментный адрес перед сложением умножается на 16 (сдвигается влево на 4 разряда). Сложение и сдвиг выполняется аппаратно, поэтому на формирование 20-разрядного адреса дополнительно время не затрачивается.

На рисунке показано, как в процессоре 8086 происходит формирование 20-разрядного адреса из адреса сегмента и смещения:

19 4 3 0

+----------------------------------+

¦ Сегментный адрес ¦ 0 0 0 0 ¦

+----------------------------------+

+

19 16 15 0

+----------------------------------+

¦ 0 0 0 0 ¦ Смещение ¦

+----------------------------------+

=

19 0

+----------------------------------+

¦ Полный 20-разрядный адрес ¦

+----------------------------------+

Адрес сегмента сдвигается влево на 4 бита с заполнением младших битов нулями, смещение расширяется до 20 битов и складывается со сдвинутым адресом сегмента. Например, если адрес сегмента равен 1234h, а смещение равно 1116h, то полный 20-разрядный адрес будет 12340h + 01116h = 13456h.

Таким образом, оперируя 16-разрядными адресами сегмента и смещением, процессор может адресовать мегабайт памяти. Для хранения сегментных адресов и смещений процессор имеет специальные регистры.

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

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

Для хранения сегментных адресов процессор имеет 4 сегментных регистра: CS, DS, ES, SS. Эти регистры содержат соответственно адреса сегментов кода, данных, дополнительных данных и стека.

При адресации выполняющегося кода вместе с регистром CS используется регистр смещения IP. Пара регистров CS:IP всегда указывает на текущую выполняющуюся команду.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]