Unreal mode

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

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

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

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

Описание[править | править исходный текст]

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

Чтобы снять ограничение по размеру адресного пространства в 1М, необходим защищённый режим, и, скорее всего, 32-битный защищённый режим (в 16-битном доступно только 16М).

Таким образом, для разработки программ под DOS, использующих всю память, приходилось либо программировать в защищённом режиме и использовать расширитель DOS и DPMI (так написан, например, Doom), либо же использовать недокументированную возможность процессора.

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

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

Разработка в защищённом режиме требовала использования всего пакета инструментов и отладчика, рассчитанного на это, и обычно связанного с конкретным расширителем DOS. Такие пакеты были дороги, не так популярны, как обычные среды разработчиков под DOS, и потому часто от их использования отказывались.

Unreal mode позволял использовать всю память из приложения, разработанного в обычной среде разработки под DOS, например, Borland C++.

Ограничения[править | править исходный текст]

Метод не может использоваться на 80286. Нельзя использовать этот метод для адресации кода или стека[2].

Невозможность работы ни в каких многозадачных средах на основе DOS и в «Virtual 8086»-окне операционной системы Windows, в том числе в NTVDM Windows NT. Более того, unreal mode не совместим с EMM386 — последний работает, создавая единственную виртуальную машину режима V86 и помещая в неё весь DOS. Полноценные виртуальные машины, такие, как Virtual PC и VMWare Workstation, обычно работают без проблем. Впрочем, Hyper-V не поддерживает unreal mode (поддержка любых режимов MS-DOS в Hyper-V никогда не обещалась производителем, тем не менее что-то - но не все - работает).

Правильное описание[править | править исходный текст]

В действительности, так называемый "Unreal Mode" не является недокументированным и, более того, не является режимом работы процессора. Данный режим означает особые настройки одного или нескольких сегментных регистров процессора.

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

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

Примечания[править | править исходный текст]

  1. http://books.google.ru/books?id=MKcaOgrUYoMC&pg=PA58&dq=«unreal+mode»&hl=en&sa=X «Unreal mode became so widely used… that Itnel was forced to support it in all later processors, although its presence was never documented»
  2. The Unabridged Pentium 4.

Ссылки[править | править исходный текст]

Литература[править | править исходный текст]

  • The Unabridged Pentium 4 IA32 Processor Genealogy, Addison Wesley ISBN 0-321-24656-X. «Big real mode»