Реальный союз
- 1 year ago
- 0
- 0
Реальный режим (или режим реальных адресов; англ. real-address mode ) — режим работы процессоров архитектуры x86 , при котором используется сегментная адресация памяти (адрес ячейки памяти формируется из двух чисел: сдвинутого на 4 бита адреса начала сегмента и смещения ячейки от начала сегмента; любому процессу доступна вся память компьютера). Изначально режим не имел названия, был назван «реальным» только после создания процессоров 80286 , поддерживающих режим, названный « защищённым » (режим назван «защищённым», так как создавался для «защиты» процессов друг от друга — для того, чтобы не позволить процессам иметь доступ к областям памяти друг друга; но для процессоров 80286 защищённый режим не был по настоящему «защищённым», так как эти процессоры не поддерживали страничную адресацию памяти , впервые реализованную в процессорах 80386 ).
В реальном режиме виртуальный адрес ячейки памяти состоит из двух чисел:
Для вычисления физического или линейного адреса ячейки памяти процессор вычисляет физический адрес начала сегмента — умножает сегментную часть виртуального адреса на число 16 (или, что то же самое, сдвигает её влево на 4 бита ), а затем складывает полученное число со смещением от начала сегмента:
Если сегментная часть адреса не указана (в коде инструкции ), процессор читает сегментную часть адреса из одного из сегментных регистров (из какого именно — зависит от кода инструкции).
При такой адресации адреса 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 = 1 Б + 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 КиБ ). Остальное адресное пространство из верхней области с помощью специальных драйверов (например, , 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 ), начинается с адресов, расположенных выше первого мебибайта, и имеет размер, зависимый от размера установленной на компьютере оперативной памяти.