Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 / Lectures / Lect5_pc.doc
Скачиваний:
58
Добавлен:
28.05.2015
Размер:
350.21 Кб
Скачать

Режим виртуального процессора 8086 (v86)

([1], с.85, [2], с.513)

Прикладные программы для процессора Intel8086 могут исполняться на 32-разрядных процессорах как в реальном режиме, так и в режиме виртуального 8086 (V86), который является особым типом задачи, выполняемой в защищенном режиме. Когда операционная система или исполнительный модуль переключаются в режим задачи виртуального 8086, процессор начинает эмулировать процессорIntel8086.

Режим V86 более привлекателен своими возможностями и гибкостью. В этом режиме работают прерывания и исключения защищенного режима, защита памяти и механизм страничной переадресации, позволяющий адресоваться к любой области 4-гигабайтного пространства памяти. Выполнение приложений 8086 в средеV86 возможно параллельно с приложениями защищенного режима. Кроме того, страничная переадресация позволяет несколькимV86 совместно использовать общие области кода операционной системы.

Одним из основных различий реального и защищенного режимов является трактовка содержимого сегментных регистров. В режиме V86, как и в реальном режиме, для получения линейного адреса содержимое сегментных регистров сдвигается на четыре разряда влево и суммируется с эффективным адресом. Как и в реальном режиме, превышение исполнительным адресом границы 64 КБ вызывает исключение 12 или13. (Процессор 8086 в этом случае переходил к начальным адресам того же сегмента, как бы свертывая его кольцом).

Один мегабайт адресуемого таким образом пространства памяти с помощью механизма страничной адресации может отображаться в любую область 4 ГБ физической памяти. Так как начальный адрес директория таблиц страничной трансляции адреса задается в управляющем регистре CR3, то в многозадачном варианте при переключении задач автоматически загружается и соответствующая таблица трансляции (см. сегмент состояния задачи TSS).

Все программы, выполняемые в режиме виртуального 8086, имеют уровень привилегий 3, то есть низший приоритет. (В реальном режиме привилегий нет, так что можно считать, что все задачи имеют привилегию 0). Следовательно, программы в режиме V86 выполняются со всеми проверками защиты. Попытка выполнения привилегированных команд (LIDT, LGDT, LMSW, CTS, HLT, операции с регистрами DR, TR, CR) вызывает исключение 13.

Попытка выполнения команд, разрешенных только для защищенного режима (LTR, STR, LLDT, LAR, LSL, ARPL, VERR, VERW), вызывает исключение 6.

В режиме V86 по-особому трактуется уровень привилегий ввода-вывода. Привилегия IOPL проверяется для команд INT n, PUSHF, POPF, STI, CLI и IRET, которые могут воздействовать на флаг прерываний IF. В то же время, на команды INT 3, INTO и BOUND (прерывание отладки, прерывание по переполнению и проверка границ массива) привилегия IOPL не оказывает влияния.

Команды ввода-вывода: IN, OUT, (REP) INS, (REP) OUTS в режиме V86 к привилегии IOPL не чувствительны, а управление доступом к портам осуществляется только через битовую карту ввода-вывода в сегменте состояния задачи. Попытка обращения к запрещенным портам вызовет исключение 13.

Прерывания в V86 для полноты эмуляции процессора 8086 обрабатываются особым образом. Все прерывания и исключения вызывают смену уровня привилегий на уровень операционной системы защищенного режима. Эта ОС может распознать, что прерывание поступило от V86 по содержимому регистра EFLAGS, сохраненному в стеке. Далее ОС может обработать это прерывание самостоятельно, либо переслать его к ОС реального режима, работающей в V86.

Таким образом, ОС защищенного режима может совершенно прозрачно для приложения, работающего в V86, эмулировать окружение обычной машины 8086, включая прерывания и перехватывая обращения к портам.

Вход в режим V86 – установка бита VM в регистре EFLAGS возможен двумя способами:

при переключении задач на задачу-386, у которой в TSS образ EFLAGS имеет установленный бит VM. Это переключение может быть вызвано либо

выполнением команды CALL или JMP, либо

выполнением команды IRET, если флаг NT (вложенной задачи) в образе регистра EFLAGS в TSS установлен в 1 (при CPL=0, иначе бит VM не установится)

при возврате из прерывания защищенного режима или из обработчика исключения, когда образ EFLAGS сохранен в стеке с установленным битом VM.

Выход из режима V86 возможен только при обработке прерывания. Если вызываемая процедура имеет CPL=0, то бит VM будет сброшен, и она будет выполняться в защищенном режиме. Если ее CPL>0, то произойдет исключение 13 – нарушение защиты.

Если прерывание вызывает переключение задач, состояние регистров с установленным флагом VM сохранится в TSS старой задачи, к которой можно будет вернуться. Новый режим (защищенный или V86) установится в соответствии с TSS новой задачи.

Общая схема входа в режим V86 и выхода из него приведена на рис.4, где цифрами 16 обозначены следующие примечания:

  1. Переключение задачи выполняется одним из двух способов

командами CALL или JMP в область, где флаг VM в образе регистра EFLAGS установлен в 1

командой IRET при флагах VM = 1 и NT = 1

  1. Аппаратное прерывание или исключение; программное прерывание

(INTn) при привилегии IOPL = 3

  1. Исключение 13 (общее нарушение защиты), вызванное программным

прерыванием (INTn), командами IRET, POPF, PUSHF, IN или OUT в

случае привилегии IOPL < 3

  1. Нормальный возврат из обработчика прерывания защищенного

режима или исключения

  1. Возврат из монитора режима виртуального 8086 для перенаправления прерывания или исключения обработчику прерываний или исключений в программе для 8086, выполняемой в режиме виртуального 8086

  2. Внутреннее перенаправление программного прерывания (INTn) при VME = 1, IOPL < 3 м бите перенаправления = 1.

Значение бита VM не может быть изменено никакими другими способами. Кроме того, его значение не может быть прочитано: при программном сохранении регистра флагов VM всегда оказывается нулевым. Таким образом, приложение, выполняемое в режиме V86, не может выяснить, в каком именно режиме – виртуальном или реальном оно выполняется.

(Детали, касающиеся режима эмуляции V86, подробно изложены в [2] с.505-532.)

Соседние файлы в папке Lectures