Список наград и номинаций Depeche Mode
- 1 year ago
- 0
- 0
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 , обычно работают без проблем.