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

Материал из Википедии ? свободной энциклопедии
Перейти к навигации Перейти к поиску

Реальный режим (или режим реальных адресов; англ.   real-address mode ) ? режим работы процессоров архитектуры x86 , при котором используется сегментная адресация памяти (адрес ячейки памяти формируется из двух чисел: сдвинутого на 4 бита адреса начала сегмента и смещения ячейки от начала сегмента; любому процессу доступна вся память компьютера). Изначально режим не имел названия, был назван ≪реальным≫ только после создания процессоров 80286 , поддерживающих режим, названный ≪ защищённым ≫ (режим назван ≪защищённым≫, так как создавался для ≪защиты≫ процессов друг от друга ? для того, чтобы не позволить процессам иметь доступ к областям памяти друг друга; но для процессоров 80286 защищённый режим не был по настоящему ≪защищённым≫, так как эти процессоры не поддерживали страничную адресацию памяти , впервые реализованную в процессорах 80386 ).

В реальном режиме виртуальный адрес ячейки памяти состоит из двух чисел:

  • сегментной части разрядностью 16 бит , по которой вычисляется физический адрес начала сегмента;
  • смещения разрядностью 16 бит ячейки памяти от начала сегмента.

Для вычисления физического или линейного адреса ячейки памяти процессор вычисляет физический адрес начала сегмента ? умножает сегментную часть виртуального адреса на число 16 (или, что то же самое, сдвигает её влево на 4 бита ), а затем складывает полученное число со смещением от начала сегмента:

сегментная_часть × 16 + смещение

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

При такой адресации адреса 0400 h :0001h и 0000h:4001h (буква ≪h≫ означает, что число записано в шестнадцатеричной системе счисления ) будут ссылаться на одну и ту же ячейку памяти, так как 400h × 16 + 1 = 0 × 16 + 4001h .

Минимальный адрес: 0000h:0000h ( 0 байт ).

Максимальный адрес: FFFFh:FFFFh ( FFFFh × 16 + FFFFh) = 10FFEFh = 1 114 095  Б = 100000h + 10000h - 11h = Ми Б + 64  Ки Б - 17 Б ).

Описанный способ вычисления физического адреса позволяет адресовать ( 1 МиБ + 64 КиБ - 17 Б + 1 Б ) памяти (диапазон адресов 0000h…10FFEFh ); 1 байт добавляется для учёта байта с нулевым адресом. Однако в процессорах 8086 / 8088 имеется всего 20 адресных линий (металлических дорожек), поэтому размер доступной памяти составляет 2 20 Б = 1 МиБ (диапазон адресов 0000h…FFFFFh ), а при адресации выше (в диапазоне 100000h…10FFEFh ) происходит переполнение (≪заворот≫) ? старший единичный бит адреса игнорируется, и происходит обращение к 64 КиБ в начальных адресах ( 0000h…FFEFh ).

Процессоры 80286 имеют 24?битовую адресную шину (возможна адресация 2 24  Б = 16 МиБ памяти), поэтому в них переполнения (≪заворот≫) не происходит.

Компьютеры IBM PC/AT построены на процессоре Intel 80286 , и для сохранения совместимости с компьютерами IBM PC и IBM PC/XT (построенными на Intel 808x) оснащены логическим элементом ( вентилем ), управляющим работой 21?го адресной линии (провода) (обозначаемой ≪A20≫) и названным ≪Gate A20≫. Этот логический элемент по умолчанию отключен (что соответствует режиму совместимости), и управляется через контроллер клавиатуры (обычно, через микросхему Intel 8042 ).

Использование

[ править | править код ]

После включения питания компьютера или после подачи на процессор сигнала сброса процессор архитектуры x86 начинает работу в реальном режиме. В этом режиме начинается исполнение кода BIOS IBM-PC-совместимого компьютера . В реальном режиме может быть выполнена инициализация некоторой аппаратуры (например, инициализация контроллера ОЗУ чипсета ), необходимая для работы программ после переключения процессора в защищённый режим . Если размеры кода и данных программы, выполняющей инициализацию аппаратуры, невелики, эта программа может выполняться в реальном режиме. Так, например, DOS работает в реальном режиме и не пытается перевести процессор в защищённый режим. Ранние версии ОС Microsoft Windows могли работать только в реальном режиме. Даже ОС Windows 3.0 среди трёх режимов работы предусматривала запуск в реальном режиме и могла выполняться на процессоре 8086.

Процессоры 80286 и более новые модели, работая в реальном режиме, в основном, имеют такие же ограничения на размер адресного пространства , как и процессоры 8086. Для использования памяти большего размера программам, разработанным для реального режима, необходимы специальные программные средства. На машинах с процессором 80286 и более новыми моделями, можно, например, использовать драйверы вроде HIMEM.SYS . Существуют также средства, предоставляемые недокументированной командой LOADALL (что, однако, сопряжено с рядом трудностей). В процессорах 80386 и более новых моделях появилась возможность, не документированная фирмой Intel и позволяющая перевести процессор в режим, неофициально названный режимом ≪ unreal ≫. Работая в режиме unreal, программа может, хоть и с некоторыми ограничениями, использовать 32?битовое физическое адресное пространство ( 2 32  Б = 4 ГиБ ).

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

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

Структура адресного пространства

[ править | править код ]

Адресное пространство IBM-PC-совместимого компьютера в реальном режиме делится на четыре части:

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

Область памяти, называемая ≪верхней≫ или ≪ upper ≫ ( англ.   upper memory area , UMA ), занимает 384 КиБ , используется для размещения информации об аппаратной части компьютера , условно делится на три области размером по 128 КиБ каждая. Первая область служит для хранения видеопамяти . Через вторую область доступны BIOS адаптеры. Третья область используется кодом BIOS, но, как правило, не полностью (обычно остаётся 64 КиБ ). Остальное адресное пространство из верхней области с помощью специальных драйверов (например, EMM386.EXE , EMS.EXE, LIMEMS.EXE и т. п.) и/или устройств расширения может использоваться для доступа к расширенной (expanded) памяти согласно её спецификации ( англ.   expanded memory specification , EMS ).

Область памяти, называемая ≪ high ≫ ( англ.   high memory area , HMA ) располагается сразу за первым мебибайтом и занимает 64 КиБ минус 16 байт . Её появление обусловлено особенностью процессора 80286 , в котором имеется 24 линии адреса, и при обращении по адресам выше FFFFh:000Fh обращение идёт ко второму мебибайту памяти (вместо начала первого мебибайта, как в 8086 / 8088 ). Является подмножеством ≪дополнительной≫ (англ. extended) памяти.

Область памяти, называемая ≪ дополнительной ≫ (англ. extended ) доступна для 16-битовых программам согласно её спецификации ( англ.   e x tended memory specification , XMS ), начинается с адресов, расположенных выше первого мебибайта, и имеет размер, зависимый от размера установленной на компьютере оперативной памяти.

Путаницы в названиях

[ править | править код ]