Виртуальный режим 8086 позволяет любому програмному
обеспечению 8086 выполняться в защищенном режиме 80386. Как
показывает таблица 13.1, основные практические функции могут
вытекать из виртуального режима 8086, и, как этот пример
действительно демонстрирует, программное обеспечение PC-DOS может
быть выполнено в виртуальном режиме 8086 на любом персональном
компьютере с процессором 80386. Пример, диспетчеризованный как
команда в PC-DOS, пригоден для экспериментирования любому
программисту, имеющему персональный компьютер с 80386-м
процессором.
Таблица 13.1 Практические функции виртуального супервизора 8086
1. Создание сложной среды DOS для мультизадачной и фоновой
работы
2. Моделирование совместимых с DOS технических средств
постраничной организации EMS и EEMS, расширяющих платы памяти,
обеспечивающих совместимость с системами на 80386 процессорах без
дополнительного оборудования постраничонй организации
3. Поддержка одновременно систем, не сходных с 8086, например
PC-DOS и CP/M
4. Поддержка операционной систем(ы) 8086 под защищенной 32-битной
операционной системой, например PC-DOS под UNIXом
Этот пример программного обеспечения - простая
программа-супервизор защищенного режима, запускаемая с клавиатуры
именем, как команда DOS. Другими словами, программа _супервизор,
взятая в качестве примера, работает как обычное применение из
DOSа. Когда программа выполняется, она вызывает вход 80386-го в
задачу защищенного режима на привилегированном уровне 0 и затем
возвращает управление PC-DOS в виртуальном режиме на уровне 3. С
точки зрения пользователя DOS, рис.13.1, DOS продолжает вести
себя нориально, обеспечивая то, что виртуальный режим 8086
позволяет программам 8086-го функционировать совместимо, даже
если основной компьютер на 80386-м находится под управленим
супервизорной программы защищенного режима на привелегированном
уровне 0.
1.Приглашение PC-DOS 2.Имя пользователя 3.Программа-супервизор
на персональном ком- в виртуальной прог- завершается во 2-й
пьютере, работающем рамме супервизора части. Подсказка DOS
на 80386 процессоре. 8086. повторяется, но сейчас
80386 работоет в вирту-
альном режиме 8086. За-
мечания пользователя не
различаются.
Пример исследует механизм установки защищенного режима,
необходимой до начала работы защищенного режима. Когда
программа-супервизор начинает выполняться, она создает общую
таблицу дескрипторов, таблицу дескрипторов прерываний и сегмент
состояния задачи, включающий поразрядную карту разрешения ввода/
вывода, используемую в защищенном режиме 80386. Для простой
программы-супервизора побитная карта разрешения ввода/вывода
заполняется единицами (1), разрешающими неограниченный ввод/вывод
на все порты. Когда эти необходимые структуры данных установлены,
супервизор разрешает защищенный режим.
Условия защищенного режима, создаваемые примером супервизора -
задача. Ее основная цель состоит в возобновлении DOSа как
программы виртуального режима 8086. Естественно, память,
используемая для вновь созданных GDT, JDT и TSS не должна
перезаписываться, когда DOS продолжает работу, поэтому DOS
восстанавливается выполнением этим супервизором команды RET в
точке входа программы прерывания DOS для прерывания 39
("Terminate But Stay REsident in Memory")(Окончание с оставлением
резидента в памяти). Программа "Term. But St. Res." защищает
DOS от перераспределения памяти, где хранится супервизор
защищенного режима.
Детали возврата в программу Term. But St. Res." очень
интересны. При непосредственной подготовке к возврату
супервизор делает кадр стека на стек DOS, как если бы
программа только что получила сигнал Term. But St. Res.
прерывания 39 реального режима. Для этой цели супервизор
помещает кадр 6 байтов (FLAG, CS, и IP) в стек DOS. Точные
значения не важны, т.к. такова процедура для программного
прерывания. DOS будет регулировать указатель стека, чтобы
освободить 6 байтов в области стека. Супервизор затем
фактически восстанавливает DOS, работая в виртуальном режиме
8086, начиная с точки входа в DOS прерывания 39. Для
максимальной скорости возврат выполняется просто как
межуровневая команда RET; не нужна отдельная задача для
виртуальной программы 8086. Чтобы удобно выполнить эту
начальную команду RET в виртуальном режиме 8086, супервизор
помещает значения CS и IP для программы прерывания 39 в кадр
стека на стек привилегированного уровня 0, инициализирует
образы стеков SS и SP для указания на стек DOS, устанавливает
бит флага VM образа в EFLAG в стек и выполняет команду RET,
чтобы завершить переход с уровня на уровень и начать
выполнение виртуального режима 8086. DOS, таким образом,
восстанавливается с первой командой программы Term. But St.
Res., и, пока DOS может различать, программа прерывания
вызывается в нормальном режиме командой INT 39 из прикладной
программы в реальном режиме.
С тех пор, как программа-супервизор вызвала восстановление
DOS (конечно, в виртуальном режиме 8086), этот пример
супервизора выполняется , например, только после этого.
Характерно, что супервизор выполняется для короткого момента
времени, когда возникает программное или аппаратное
прерывание, но он выполняется просто для направления
выполнения к DOS- программе для прерываний, которое
появляется. Это выполняется в большинстве случаев тем же самым
образом как и при активизировании программы Term. But St. Res.
для начального запуска DOS в виртуальном 8086 режиме. Ясно
только, что FLAG, CS и IP значения, помещенные в стек DOS
должны быть точными, так как DOS будет использовать эти
величины при возврате из программы обработки прерываний.
Распечатка в приложении G - полная, полностью проверенный
пример для разрешения защищенного режима и запуска программы
DOS, в виртуальном 8086 режиме этот код может быть
отранслирован с помощью ассемблера 8086, так как некоторые
необходимые коды операции защищенного режима должны быть
определены, используя операторы DB.
Пример супервизора устанавливает "базовое расположение
операции" в защищенном режиме, в которое могут быть добавлены
дополнительные черты. Например, таблицы страниц 80386, как
отмечено в п. 9, могут быть созданы и впоследствии сделаны
постранично доступными.
На 80386 компьютерах большое практическое использование
постраничных возможностей 80386-го состоит в моделировании
аппаратуры для постраничного разбиения, встроенной в
расширенные платы памяти (платы EMS и EEMS), доступные для PC,
основанных на 8086 и 80286.
Аппаратура для постраничного разбиения, содержащаяся на
таких платах, управляется регистрами, адресующимися как порты
ввода/вывода. При использовании поразрядной карты разрешения
ввода/вывода 80386 для предотвращения ввода/вывода по этим
адресам, попытка ввода/вывода в контрольные регистры этих
полей будет приводить к Общей ошибке защиты (ошибка 13
исключительной ситуации) для прерывания программы 13
супервизора защищенного режима.
Обслуживающая программа в супервизоре может эмулировать
функции составления EMS или EEMS карты соответственно
регулировкой таблиц страниц 80386. Такая программа преобразует
требуюмую физическую память в логические адреса, назнченные
расширенной картой памяти. С этим подходом приложения DOS
могут продолжать использование расширенной памяти без
необходимости внутренней аппаратуры постраничного разбиения.
Обеспечение нескольких сред виртуального 8086 режима
становится значительно более сложной работой для
супервизорного программного обеспечения, хотя это очень хорошо
поддерживается аппаратурой 80386-го. Ввод/вывод и прерывания
должны управляться супервизором, чтобы избежать конфликтов или
тупиковых ситуацийв множественном 8086 режиме. Более сложная
программа супервизора, особенно если она управляет виртуальным
множественным 8086 режимом, возможно может производить более
сложные действия, чем показано на примере в приложении G,
который просто не учитывает прерывания. Сложные действия
обычно служат для координации доступа к перефирийным
устройствам, которые используются двумя или более независимыми
режимами 8086.
Содержание
Вперед