Нереальный режим
Часть серии о |
Режимы микропроцессора для x86 архитектуры |
---|
|
В скобках указана первая поддерживаемая платформа. |
В x86 вычислениях : нереальный режим , а также большой реальный режим , плоский реальный режим или режим вуду. [1] — это вариант реального режима , в котором в один или несколько дескрипторов сегментов загружены нестандартные значения, например 32-битные ограничения, разрешающие доступ ко всей памяти. Вопреки названию, это не отдельный режим адресации, в котором могут работать процессоры x86. Он используется в процессорах x86 80286 и более поздних версиях.
Механизм
[ редактировать ]По соображениям эффективности процессоры 80286 и все более поздние версии процессоров x86 используют базовый адрес, размер и другие атрибуты, хранящиеся в их внутреннем кэше дескрипторов сегментов, при вычислении эффективных адресов памяти, даже в реальном режиме. Таким образом, модификация внутреннего дескриптора сегмента позволяет изменить некоторые свойства сегментов в реальном режиме, например размер адресуемой памяти. Этот метод получил широкое распространение и поддерживается всеми процессорами Intel. [2]
Программа в нереальном режиме может без каких-либо преобразований вызывать 16-битный код, запрограммированный для реального режима (BIOS, ядро DOS и драйверы) . Это делает драйвер нереального режима проще, чем драйвер DPMI . Однако нереальный режим несовместим с операционными системами защищенного режима, такими как Windows 3.x/9x/NT и OS/2.
Большой реальный режим имеет сегмент кода размером 1 МБ и сегмент данных размером 4 ГБ. [3] [4]
Использование
[ редактировать ]HIMEM.SYS использует эту функцию (как варианты 286, так и 386) для адресации расширенной памяти . [5] если только DOS не переключен на работу в виртуальном режиме 8086 , несовместимом с нереальным режимом.
Одной из очень немногих игр (если не единственной), в которой использовался нереальный режим, была Ultima VII . [6] [7]
Режим Unreal используется кодом BIOS , поскольку это начальный режим современных процессоров Intel. [8] Кроме того, режим управления системой (SMM) в процессорах Intel 386SL и более поздних версиях переводит процессор в огромный реальный режим. [9]
Некоторые загрузчики (например, LILO ) используют режим unreal для доступа к памяти до 4 ГиБ.
Включение нереального режима
[ редактировать ]Микропроцессор 80286 можно перевести в нереальный режим только с помощью недокументированной инструкции LOADALL , которая модифицирует базовые регистры скрытого сегмента, чтобы они указывали на исходную или целевую ячейку памяти размером более 1 МБ. [5]
Чтобы перевести микропроцессор 80386 или выше в нереальный режим, программа должна сначала войти в защищенный режим , найти или создать плоский дескриптор в GDT или LDT , загрузить некоторые регистры сегментов данных соответствующим «селектором» защищенного режима, а затем переключиться вернуться в реальный режим. После возвращения в реальный режим процессор продолжит использовать кэшированные дескрипторы, установленные в защищенном режиме, что позволяет получить доступ к 4 ГиБ расширенной памяти из реального режима. [4]
Начиная с 80386, программы реального режима могут использовать 32-битные регистры с префиксом замены размера адреса. [10] Это позволяет программам использовать адрес типа DS:[EBX]. В обычном реальном режиме возникает ошибка, если EBX превышает 0xFFFF. В нереальном режиме доступ разрешен.
Варианты нереального режима
[ редактировать ]Как описано выше, нереальный режим обычно предполагает использование одного или нескольких селекторов данных для более эффективной адресации данных в памяти. Это обычная практика, которую часто называют «плоским реальным режимом». [11] или «большой реальный режим». [12] Термин «нереальный режим» был введен в 1991 году Ракешем К. Агарвалом. [13]
32-битный код
[ редактировать ]«Огромный реальный режим» (названный в списке прерываний Ральфа Брауна) или «неРЕАЛЬНЫЙ» режим (названный Томашем Грыштаром) добавляет возможность запуска 32-битного кода с сегментом кода размером 4 ГиБ. Это достигается за счет загрузки селектора кода (CS) из дескриптора, 32-битный атрибут которого (бит D) установлен в 1. Этот режим позволяет избежать префиксов переопределения размера операнда, которые обычно требуются при использовании 32-битной адресации в 16-битном формате. сегмент битового кода, но его сложнее настроить из-за взаимодействия с прерываниями. [14] [4]
Использование 32-битной CS было описано в статье Агарвала 1991 года, в которой был введен термин «нереальный режим». [13] Этот режим используется в FASM с открытым исходным кодом Grysztar и Helix RM386, коммерческом расширителе DOS, поставляемом в комплекте с драйверами мыши Logitech. Гриштар написал описание методов, используемых для входа в этот режим и обработки прерываний в 2010 году. Он также сообщает, что большинство протестированных им процессоров поддерживают этот ранее неизвестный режим, за исключением процессора неизвестной модели («Я думаю, что он был изготовлен by Cyrix "), а в более позднем отчете пользователя — эмуляторы Bochs и DOSBox . [15]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Салихун, Дармаван (16 сентября 2013 г.). «Инициализация карты системных адресов в архитектуре x86/x64, часть 1: системы на базе PCI» (PDF) . Проверено 19 августа 2019 г.
- ^ Гутманн, Питер (2004) [2003]. Архитектура криптографической безопасности: проектирование и проверка . Springer Science & Business Media . п. 58 . ISBN 978-0-387-95387-8 . Проверено 4 января 2017 г.
[…] Режим Unreal стал настолько широко использоваться […], что Intel была вынуждена поддерживать его во всех более поздних процессорах, хотя его присутствие никогда не было задокументировано […]
- ^ «График режимов» . Архивировано из оригинала (JPG) 18 января 2023 г.
- ^ Перейти обратно: а б с «Нереальный режим» . Архивировано из оригинала 3 января 2017 г. Проверено 18 февраля 2015 г.
- ^ Перейти обратно: а б Некасек, Михал (18 марта 2011 г.). «HIMEM.SYS, нереальный режим и LOADALL» . Музей OS/2 . Архивировано из оригинала 3 января 2017 г. Проверено 03 января 2017 г.
- ^ Рисер, Хокон. «HIMEM.SYS и нереальный/плоский реальный режим, EMM386 и UMB» . Группа новостей : comp.os.msdos.programmer . Архивировано из оригинала 21 апреля 2019 г. Проверено 14 октября 2017 г.
- ^ «Краткая история Unreal Mode | Музей OS/2» .
- ^ Пелнер, Дженни; Пелнер, Джеймс. «Минимальный загрузчик архитектуры Intel» . Проверено 14 октября 2017 г.
- ^ Домас, Кристофер (2015). «Воронка памяти: уязвимость архитектурного повышения привилегий» (PDF) . Мемориальный институт Баттель. Архивировано (PDF) из оригинала 5 января 2017 г. Проверено 4 января 2017 г.
Процессор загружает архитектурно определенное состояние системы в режиме «Unreal».
- ^ «Кодирование инструкций X86-64» . Архивировано из оригинала 3 января 2017 г. Проверено 18 февраля 2015 г.
- ^ «Плоский реальный режим» . 16 марта 1998 г. Архивировано из оригинала 18 августа 2015 г.
- ^ Браун, Ральф Д. «Список прерываний» . ИНТ 80 (АМИ БИОС) . Проверено 14 октября 2017 г.
- ^ Перейти обратно: а б Некасек, Михал (15 июня 2018 г.). «Краткая история Unreal Mode» . Музей OS/2 .
- ^ Браун, Ральф Д. «Список прерываний» . INT 78 (драйвер HugeRealMode) . Проверено 14 октября 2017 г.
- ^ Грыштар, Томаш (17 сентября 2010 г.). «нереальный режим» . Проверено 14 октября 2017 г.
Дальнейшее чтение
[ редактировать ]- Технический справочник IBM Operating System/2 — семейство программ (PDF) . Том. 1 (1-е изд.). ИБМ . Сентябрь 1987 г. [1986 г.]. Архивировано (PDF) из оригинала 03 января 2017 г.
- Роден, Томас (ноябрь – декабрь 1989 г.). Написано в Ирвайне, Калифорния, США. «Четыре гигабайта в реальном режиме — ловкий трюк для доступа к большим пространствам памяти на 80386 из DOS» . Журнал программиста — журнал ресурсов для программистов IBM PC . 386 Сейчас. Том. 7, нет. 6. Юджин, Орегон, США: Издательство Oakley Publishing Company. стр. 89–94. ISSN 0747-5861 . Архивировано из оригинала 21 февраля 2020 г. Проверено 21 февраля 2020 г.
- Уильямс, Эл (июль 1990 г.). «DOS + 386 = 4 Гигабайта!» . Журнал доктора Добба . Том. 15. Народная компьютерная компания . стр. 62–71. [1] [2] Ошибки: [3]
- Уильямс, Эл (1991). «Глава 18: Доступ к 4 гигабайтам в реальном режиме». DOS 5: Руководство разработчика - Руководство по расширенному программированию в DOS (1-е изд.). Редвуд-Сити, Калифорния, США: M&T Publishing, Inc. / Prentice Hall International (UK) Limited . стр. 691–712. ISBN 0-13-217993-8 . (Примечание. Реализует «Большой реальный режим» SEG4G.)
- Леспинасс, Мишель. «Как выгнать диспетчер памяти» . Амьен, Франция: Walken / Impact Studios. Архивировано из оригинала 4 января 2017 г. Проверено 21 октября 2015 г.
- Руководство разработчика программного обеспечения Intel IA-32 — том 3A
- Полный Pentium 4: генеалогия процессора IA32, Эддисон Уэсли ISBN 0-321-24656-X . «Большой реальный режим»
- «Вызов функции HugeRealMode Server «Включить модель двухэтапного прерывания»» .
- Некасек, Михал (15 июня 2018 г.). «Краткая история Unreal Mode» . Музей OS/2 . Архивировано из оригинала 15 сентября 2018 г. Проверено 15 сентября 2018 г.
- «Регистры кэша дескрипторов» .
- Чаппелл, Джефф (январь 1994 г.). Шульман, Эндрю; Педерсен, Аморетт (ред.). Внутреннее устройство DOS . Серия программ Эндрю Шульмана (1-е издание, 1-е изд.). Издательская компания Аддисон Уэсли . ISBN 978-0-201-60835-9 . (xxvi+738+iv страниц, 3,5-дюймовая дискета [4] [5] ) Исправления: [6] [7] [8]
- Метод расширения диапазона адресуемой памяти при обработке в реальном режиме для облегчения загрузки больших программ в верхнюю память.