Jump to content

Нереальный режим

В 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]

См. также

[ редактировать ]
  1. ^ Салихун, Дармаван (16 сентября 2013 г.). «Инициализация карты системных адресов в архитектуре x86/x64, часть 1: системы на базе PCI» (PDF) . Проверено 19 августа 2019 г.
  2. ^ Гутманн, Питер (2004) [2003]. Архитектура криптографической безопасности: проектирование и проверка . Springer Science & Business Media . п. 58 . ISBN  978-0-387-95387-8 . Проверено 4 января 2017 г. […] Режим Unreal стал настолько широко использоваться […], что Intel была вынуждена поддерживать его во всех более поздних процессорах, хотя его присутствие никогда не было задокументировано […]
  3. ^ «График режимов» . Архивировано из оригинала (JPG) 18 января 2023 г.
  4. ^ Перейти обратно: а б с «Нереальный режим» . Архивировано из оригинала 3 января 2017 г. Проверено 18 февраля 2015 г.
  5. ^ Перейти обратно: а б Некасек, Михал (18 марта 2011 г.). «HIMEM.SYS, нереальный режим и LOADALL» . Музей OS/2 . Архивировано из оригинала 3 января 2017 г. Проверено 03 января 2017 г.
  6. ^ Рисер, Хокон. «HIMEM.SYS и нереальный/плоский реальный режим, EMM386 и UMB» . Группа новостей : comp.os.msdos.programmer . Архивировано из оригинала 21 апреля 2019 г. Проверено 14 октября 2017 г.
  7. ^ «Краткая история Unreal Mode | Музей OS/2» .
  8. ^ Пелнер, Дженни; Пелнер, Джеймс. «Минимальный загрузчик архитектуры Intel» . Проверено 14 октября 2017 г.
  9. ^ Домас, Кристофер (2015). «Воронка памяти: уязвимость архитектурного повышения привилегий» (PDF) . Мемориальный институт Баттель. Архивировано (PDF) из оригинала 5 января 2017 г. Проверено 4 января 2017 г. Процессор загружает архитектурно определенное состояние системы в режиме «Unreal».
  10. ^ «Кодирование инструкций X86-64» . Архивировано из оригинала 3 января 2017 г. Проверено 18 февраля 2015 г.
  11. ^ «Плоский реальный режим» . 16 марта 1998 г. Архивировано из оригинала 18 августа 2015 г.
  12. ^ Браун, Ральф Д. «Список прерываний» . ИНТ 80 (АМИ БИОС) . Проверено 14 октября 2017 г.
  13. ^ Перейти обратно: а б Некасек, Михал (15 июня 2018 г.). «Краткая история Unreal Mode» . Музей OS/2 .
  14. ^ Браун, Ральф Д. «Список прерываний» . INT 78 (драйвер HugeRealMode) . Проверено 14 октября 2017 г.
  15. ^ Грыштар, Томаш (17 сентября 2010 г.). «нереальный режим» . Проверено 14 октября 2017 г.

Дальнейшее чтение

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: cb884cd578b832a0b66bef625c02e6e4__1706265360
URL1:https://arc.ask3.ru/arc/aa/cb/e4/cb884cd578b832a0b66bef625c02e6e4.html
Заголовок, (Title) документа по адресу, URL1:
Unreal mode - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)