Реальный режим

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

Реальный режим (или режим реальных адресов) — это название было дано прежнему способу адресации памяти после появления процессора 80286, поддерживающего защищённый режим. Но только с появлением процессора 80386 можно говорить о защищённом режиме в современном понимании, так как в процессоре 80286 нет страничной адресации памяти.

Описание[править | править вики-текст]

В реальном режиме при вычислении линейного адреса, по которому процессор собирается читать содержимое памяти или писать в неё, сегментная часть адреса умножается на 16 (или, что то же самое, сдвигается влево на 4 бита) и суммируется со смещением (если процессору передаётся не полный адрес из двух 16-битных значений — сегмента и смещения, — а только 16-битное смещение, то сегмент берётся из одного из сегментных регистров). Таким образом, адреса 0400h:0001h и 0000h:4001h ссылаются на один и тот же физический адрес, так как 400h×16+1 = 0×16+4001h.

Такой способ вычисления физического адреса позволяет адресовать 1 Мб + 64 Кб − 16 байт памяти (диапазон адресов 0000h…10FFEFh). Однако в процессорах 8086/8088 всего 20 адресных линий, поэтому реально доступен только 1 мегабайт (диапазон адресов 0000h…FFFFFh), а при адресации выше (в диапазоне 100000h…10FFEFh) происходит «заворот» — старший единичный бит адреса игнорируется и происходит обращение к 64 килобайтам в начальных адресах (0000h…FFEFh).

Процессор 80286 имеет 24-битную адресную шину (возможна адресация 224 = 16 Мб памяти), поэтому в них переполнения не происходит. Компьютеры IBM PC/AT построены на процессоре Intel 80286, но, из соображений совместимости с IBM PC и IBM PC/XT, построенных на Intel 808x, в них был введён логический элемент (вентиль), управляющий работой 21-го адресного провода (A20). Этот логический элемент, получивший название "Gate A20", по умолчанию отключен, что соответствует режиму совместимости, но управляется через контроллер клавиатуры (микросхема Intel 8042).

Использование[править | править вики-текст]

После подачи сигнала сброса или включения питания процессор начинает работу в реальном режиме; в этом режиме начинается исполнение BIOS IBM PC-совместимого компьютера. В реальном режиме может быть выполнена инициализация части аппаратуры (например, контроллер ОЗУ чипсета), которая необходима для работы программ после переключения в защищённый режим.

Если размеры кода и данных программы невелики, она может целиком исполняться в реальном режиме. Так, например, DOS использует реальный режим, как основной, и сама не пытается перевести процессор в защищённый режим, предоставляя это пользовательским программам. Ранние версии Microsoft Windows могли работать только в реальном режиме. Даже Windows 3.0, среди трёх режимов работы, предусматривала запуск в реальном режиме и могла выполняться на 8086.

Процессоры 80286 и более поздние, работая в реальном режиме, в основном, сохраняют те же ограничения на размер адресного пространства, что и 8086. Для использования большего объёма памяти программам, разработанным для реального режима, необходимы специальные средства. На машинах с процессором 80286 и выше, можно, например, использовать драйверы вроде HIMEM.SYS. Есть также средства, предоставляемые недокументированной командой LOADALL (что, однако, сопряжено с целым рядом трудностей). Начиная с 80386 появилась опять же не документированная фирмой Intel возможность перевести процессор в режим, неофициально называемый "Unreal mode", позволяющий, хоть и с некоторыми ограничениями, использовать 32-битное физическое адресное пространство (4 Гбайт).

Несмотря на то, что Intel не предусмотрела возврат процессора 80286 из защищённого в реальный режим, компьютер IBM PC/AT имеет такую возможность, благодаря аппаратным особенностям и BIOS. Так, в нём предусмотрена программная подача сигнала сброса на процессор. BIOS также может различать причины/режимы перезапуска, анализируя содержимое ячейки памяти 40h:72h и байта по адресу 0Fh в конфигурационной памяти (CMOS). Поэтому можно заставить BIOS не выполнять начальную загрузку, оставить содержимое ОЗУ тем же, что и до сброса, а управление передать по адресу, помещённому в ячейку 40h:67h. Таким образом программа может многократно переключаться между защищённым и реальным режимами, хотя этот способ требует сравнительно большого расхода времени на каждое переключение.

Возможность "нормального", без ухищрений, программного возврата в реальный режим была предусмотрена Intel только в процессорах 80386 и выше. Однако в 80386 большую ценность имеет другая новая возможность — Режим виртуального 8086 (V86, VM86). При этом программы получают возможность использовать как бы прежний способ адресации 8086, в то время как процессор находится в защищённом режиме, а линейный адрес, вычисленный по правилам 8086, подвергается страничной трансляции. Режим V86 позволил создавать виртуальные машины. Операционная система может ограничить доступ к той или иной области памяти (см. Защита памяти) для каждой виртуальной машины, выделять для них виртуальную память вместо реальной физической и контролировать обращения к портам ввода-вывода. Всё это используется для организации работы DOS внутри многозадачных систем вроде OS/2 и Microsoft Windows. При этом каждой виртуальной DOS-машине доступен только 1 мегабайт адресного пространства, но их может быть запущено одновременно большое количество.

Структура адресного пространства IBM PC в реальном режиме[править | править вики-текст]

Основная область памяти[править | править вики-текст]

В область, называемую основной областью памяти (англ. conventional memory), загружается таблица векторов прерываний, различные данные BIOS, а также могут загружаться 16-битные программы DOS. Основная область памяти занимает 640 Кбайт начиная с адреса 0000:0000.

Upper Memory Area[править | править вики-текст]

Upper Memory Area (UMA) занимает 384 Кбайт и используется для размещения информации об аппаратной части компьютера. Область условно делится на три области по 128 Кбайт. Первая область служит для видеопамяти. Через вторую область доступны BIOS адаптеры. Третья область используется системной BIOS, но, как правило, не полностью (обычно остаётся 64 Кбайт). Остальное адресное пространство из верхней области с помощью специальных драйверов (например, EMM386.EXE, EMS.EXE, LIMEMS.EXE и т. п.) и/или устройств расширения может использоваться для доступа к расширенной памяти через спецификацию расширенной памяти (англ. Expanded Memory Specification, EMS).

Дополнительная область памяти[править | править вики-текст]

Дополнительная память для 16-битных программ доступна через спецификацию дополнительной памяти (англ. eXtended Memory Specification, XMS). Дополнительная память начинается с адресов выше первого мегабайта и её объём зависит от общего объёма оперативной памяти, установленной на компьютере.

High Memory Area[править | править вики-текст]

High Memory Area (HMA) — это область дополнительной памяти сразу за первым мегабайтом размером 64 Кбайт минус 16 байт. Её появление обусловлено особенностью процессора 80286, в котором 24 линии адреса и при обращении по адресам выше FFFF:000F обращение идёт ко второму мегабайту памяти (вместо начала первого мегабайта, как в 8086/8088). Таким образом, программы реального режима получили доступ к HMA.

См. также[править | править вики-текст]