![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Адресация памяти в реальном режиме
Для работы с памятью используются две шины - шина адреса и шина данных. Физически память устроена таким образом, что возможна адресация как 16-битовых слов, так и отдельных байтов памяти. Кроме того, процессоры i80386 и i80486 могут адресовать 32-битовые слова памяти.
В любом случае так называемый физический адрес передаётся из процессора в память по шине адреса. Ширина шины адреса определяет максимальный объём физической памяти, непосредст- венно адресуемой процессором. На рис. 1 показана схема взаимодействия процессора и памяти через шины адреса и данных.
Рис. 1. Шина адреса и шина данных
Например, компьютер IBM XT оснащён 20-разрядной шиной адреса и 16-разрядной шиной дан- ных. Это означает, что имеется возможность адресоваться к 216 байтам памяти, т.е. к 1 мегабайту памяти. Причём возможно адресоваться к байтам и словам размером в 16 бит.
Так как адреса принято записывать в шестнадцатеричной форме, то мы можем записать диапазон физических адресов для 20-разрядной шины адреса следующим образом:
00000h < = [физический адрес] < = FFFFFh
Таким образом, для представления физического адреса в компьютерах IBM PC и IBM XT использу- ется двадцать двоичных или пять шестнадцатеричных разрядов.
Однако все регистры процессора i8086 являются 16-разрядными. Возникает проблема представ- ления 20-разрядного физического адреса памяти при помощи содержимого 16-разрядных регист- ров.
Для разрешения этой проблемы используется двухкомпонентный логический адрес.
Логический адрес состоит из 16-разрядных компонент: компоненты сегмента памяти и компонен- ты смещения внутри сегмента.
Для получения 20-разрядного физического адреса к сегментной компоненте приписывается спра- ва четыре нулевых бита (для расширения до 20 разрядов), затем полученное число складывается с
компонентой смещения. Перед сложением к компоненте смещения слева дописывается четыре нулевых бита (также для расширения до 20 разрядов). Эту процедуру иллюстрирует рис. 2.
Рис. 2. Адресация памяти в реальном режиме.
Логический адрес принято записывать в форме < сегмент: смещение>.
Например, пусть у нас есть логический адрес 1234h: 0123h. Сегментная компонента равна 1234h, компонента смещения - 0123h. Вычислим физический адрес, соответствующий нашему логиче- скому адресу:
расширяем до 20 бит сегментную компоненту, дописывая справа 4 нулевых бита, получаем число 12340h;
расширяем до 20 бит компоненту смещения, дописывая слева 4 нулевых бита, получаем число 00123h;
для получения физического адреса складываем полученные числа: 12340h + 00123h = 12453h.
Очевидно, что одному физическому адресу может соответствовать несколько логических. Напри- мер, физическому адресу 12453h соответствует логический адрес 1245h: 0003h.
Фактически в схеме адресации памяти реального режима вся память как бы разбивается на сег- менты. Физический адрес начала сегмента (базовый адрес сегмента) равен расширенной до 20 бит сегментной компоненте адреса (расширение выполняется дописыванием справа 4 нулевых бит).
Сегменты могут начинаться не с любого физического адреса, а только с такого, который кратен 16 байтам. Поэтому сегмент может начинаться только с границы параграфа.
Компонента смещения при такой схеме адресации является смещением внутри сегмента памяти. А сам сегмент памяти задаётся сегментной компонентой.
Рис.3 иллюстрирует сказанное выше. На этом рисунке показано соответствие логического адреса 0002h: 0028h физическому адресу 00048h.
Рис. 3. Соответствие логического и физического адресов.
Логический адрес должен находиться в следующих пределах:
0000h: 0000h < = [логический адрес] < = FFFFh: 000Fh
Здесь есть одна тонкость. Логический адрес FFFFh: 000Fh соответствует максимально возможному физическому адресу FFFFFh. Но используя 16-разрядные регистры процессора вы можете задать и большее значение для логического адреса, например, FFFFh: 0010h. Что произойдёт в этом случае?
Если в компьютере установлены процессоры i8086 или i8088, произойдёт переполнение адреса, которое будет проигнорировано процессором. В результате логическому адресу FFFFh: 0010h бу- дет соответствовать физический адрес 00000h.
Если же используются процессоры i80286, i80386 или i80486, физическая шина адреса шире 20 бит. Для процессора i80286 шина адреса имеет ширину 24 бита, а для процессоров i80386 и i80486 - 32 бита. При работе в реальном режиме используются младшие 20 адресных линий - от A0 до A19, остальные адресные линии аппаратура компьютера блокирует.
Однако есть возможность снять блокировку с адресной линии A20. При этом в реальном режиме появляется ещё один " льготный" сегмент памяти, лежащий выше границы первого мегабайта. Этот сегмент называется областью старшей памяти (High Memory Area). Ему соответствует диапа- зон логических адресов от FFFFh: 0010h до FFFFh: FFFFh. Размер области старшей памяти составляет 64 килобайта без 16 байт.
Операционная система MS-DOS умеет использовать старшую область памяти, располагая там своё ядро. Для этого необходимо подключить драйвер HIMEM.SYS и поместить в файл CONFIG.SYS строку:
DOS=HIGH
Архитектура процессоров серии i80XXX, работающих в реальном режиме, предполагает
хранение сегментной компоненты адреса в специальных сегментных регистрах:
CS - сегмент кода;
DS - сегмент данных;
ES - дополнительный сегмент данных;
SS - сегмент стека.
Компонента смещения может находиться в регистрах BX, BP, SI, DI, IP.
Задавая произвольные значения сегментной компоненты и компоненты смещения любая про- грамма может адресоваться к любому участку памяти компьютера. В частности, любая программа может преднамеренно или из-за ошибки разрушить области данных, принадлежащие операци- онной системе.
Выделим два основных недостатка схемы адресации памяти реального режима:
ограниченное адресное пространство (до 1 мегабайта плюс примерно 64 килобайта старшей об- ласти памяти для процессоров i80286, i80386 и i80486);
свободный доступ для любых программ к любым областям данных, что представляет потенци- альную опасность для целостности операционной системы.
Этих недостатков полностью лишена схема адресации памяти, которая используется в защищён- ном режиме. Алгоритм обработки прерываний в защищенном режиме.
|