Interested Article - Unreal mode

Unreal mode (иногда также Big Real Mode, 32 bit Real Mode, Flat Real Mode ) — метод, с помощью которого реализуется возможность из реального режима работы процессора Intel 80386 и выше адресовать до 4 гигабайт памяти , вместо 1 мегабайта, доступного в реальном режиме . Вопреки названию, данный метод не является режимом работы процессора .

Активно использовался в некоторых приложениях MS-DOS в начале 1990-х годов, в том числе, некоторых играх (например, в Ultima VII ). Также используется при исполнении кода SMM .

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

Описание

Ядро MS-DOS исполняется в 16-битном режиме процессора , реальном или же V86.

Чтобы снять ограничение по размеру адресного пространства в 1 МиБ (налагаемым 16-битной адресацией реального режима процессора), необходим защищённый режим (при этом доступными становятся 16 МиБ ОЗУ, чтобы получить больший объём — до 4 ГиБ, необходим 32-битный защищённый режим, появившийся в процессорах 80386).

Таким образом, для разработки программ под DOS, требующих большой объём памяти, приходилось либо программировать в защищённом режиме и использовать расширитель DOS и DPMI (так написан, например, Doom ), либо же использовать недокументированную возможность процессора. Разработка в защищённом режиме требовала использования всего пакета инструментов и отладчика , рассчитанного на это, и обычно связанного с конкретным расширителем DOS. Такие пакеты были дороги, не так популярны, как обычные среды разработчиков под DOS, и потому часто от их использования отказывались. Недокументированная возможность позволяла использовать всю память из приложения, разработанного в обычной среде разработки под DOS, например, Borland C++ .

Эта возможность состоит в том, что можно кратковременно войти в 32-битный защищенный режим, загрузить там дескрипторы сегментов с границами, превышающими 64К, и потом выйти обратно в 16-битный реальный режим. При выходе сохраняется значение границы, превышающее 64К, граница не сбрасывается при выходе сама. После этого можно, применяя явно написанные на ассемблере 32-битные команды , обращаться ко всей памяти машины напрямую, относительно сегмента с «неправильной» границей.

Возможность подобной адресации напрямую следует из технических спецификаций 80386 , в котором появились две необходимые для этого возможности. Первая — документированный переход из защищенного режима в реальный путём сброса флага PE в регистре CR0 (его предшественник, 80286 , игнорировал попытки сбросить данный флаг в своей 16-битной версии CR0, называвшейся MSW). Вторая — возможность установить размер сегмента равным размеру всего доступного физического адресного пространства (из-за того, что разрядность регистров сравнялась с разрядностью шины адреса).

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

Ограничения

Этот метод невозможно использовать для адресации кода или стека , ни в каких многозадачных средах на основе DOS и в «Virtual 8086»-окне операционной системы Windows , в том числе в NTVDM . Более того, Unreal mode несовместим с — последний работает, создавая единственную виртуальную машину режима V86 и помещая в неё весь DOS. Полноценные виртуальные машины, такие, как Virtual PC и VMware Workstation , обычно работают без проблем.

Примечания

  1. Riiser, Haakon . comp.os.msdos.programmer . Дата обращения: 14 октября 2017. 7 декабря 2019 года.
  2. от 5 января 2017 на Wayback Machine «The processor loads an architecturally defined system state „Unreal“ mode»
  3. Gutmann, от 10 марта 2016 на Wayback Machine , 2004, ISBN 9780387953878 , page 58 «Unreal mode became so widely used… that Itnel was forced to support it in all later processors, although its presence was never documented»
  4. The Unabridged Pentium 4 IA32 Processor Genealogy, Addison Wesley ISBN 0-321-24656-X . «Big real mode»

Ссылки

Литература

  • The Unabridged Pentium 4 IA32 Processor Genealogy, Addison Wesley ISBN 0-321-24656-X . «Big real mode»
Источник —

Same as Unreal mode