December 15 2017 04:17:56
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
РЕАЛИЗАЦИЯ РЕЖИМА ВИРТУАЛЬНОГО 8086
ФОРМАТЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ И ВЫПОЛНЕНИЕ ОПЕРАЦИЙ

Все программы, выполняемые в режиме V86, имеют низший уровень привилегий: CPL = 3. Этим режим V86 отличается от реального режима, при котором всем программам предоставляется высший уровень привилегий: CPL=0. При формировании линейного адреса в режиме V86 не используются дескрипторы, поэтому правила доступа к сегментам в соответствии с уровнем привилегий в этом режиме не выполняются. В режиме V86 используются следующие способы защиты.

•   В режиме V86 не осуществляется защита сегментов. Если используется страничная организация памяти, то ее защита при нарушении правил доступа к странице реализуется путем исключения типа #PF («ошибка обращения к странице»).

•   Поступление команд, которые выполняются в защищенном режиме только при уровне CPL = 0, в режиме V86 вызывает исключение типа #GP («нарушение защиты»). Это команды LIDT, LGDT, LMSW, CLTS, HLT, а также MOV для регистров управления, тестирования и отладки.

•   Поступление команд, выполняемых только в защищенном режиме, вызывает в режиме V86 исключение типа #UD («неразрешенный код команды»). Это команды LLDT, SLDT, LTR, STR, LAR, LSL, ARPL.VERR, VERW.

•   Команды PUSHF, POPF, CLI, STI, INT и IRET в режиме V86 чувствительны к значению поля IOPL в EFLAGS. Они выполняются только при IOPL = 3, в противном случае реализуется исключение типа #GP. Отметим, что команды INTO, INT3, ROUND в режиме V86 (и вообще в защищенном режиме) выполняются независимо от значения поля IOPL.

•  Выполнение команд ввода/вывода IN, OUT, INS, OUTS в режиме V86 не зависит от значения поля IOPL (отличие от защищенного режима). Однако при вызове в режиме V86 задачи, имеющей БКВВ в сегменте TSS, данные команды учитывают значение битов разрешения для соответствующих портов. При обращении к порту, для которого в БКВВ бит разрешения установлен в «1», реализуется исключение типа #GP.

С учетом указанных выше особенностей процессор в режиме V86 выполняет весь набор команд, включая битовые операции, операции над числами с плавающей точкой и ряд других, не реализуемых микропроцессором 8086. Допускается использование всех регистров процессора Р6, включая сегментные регистры FS, GS.

По умолчанию в режиме V86 используются 16-разрядные регистры и исполнительные адреса. С помощью префиксов размера можно производить обработку 32-разрядных операндов и формировать 32-разрядные адреса. Однако значение полученного физического адреса в режиме V86 не должно превышать 65535, в противном случае возникает исключение типа #GP.

При работе в режиме V86 процессор формирует 20-разрядный линейный адрес таким же способом, как в реальном режиме. Если при этом бит страничной адресации в регистре управления CR3 имеет значение PG = 1, то используется страничная организация памяти. В этом случае адресуемая в режиме V86 память объемом 1 Мбайт делится на 256 страниц по 4 Кбайта. Младшие 12 разрядов линейного адреса выбирают адресуемый байт в кадре страницы, а старшие 8 разрядов определяют с помощью таблицы страниц базовый адрес страницы. Каталог разделов в режиме V86 не используется, и базовый адрес таблицы страниц задается содержимым регистра CR3. Отдельные страницы могут быть размещены в любом месте адресного пространства, имеющего объем 4 Гбайта. Каждая задача в режиме V86 может использовать свои варианты размещения страниц, так как при переключении задач загружается заново содержимое регистра управления CR3, определяющее базовый адрес таблицы страниц. При использовании страничной организации памяти в режиме V86 реализуются соответствующие способы защиты страниц.

Способ обработки исключений (прерываний) в режиме V86 определяется значением бита VME в регистре управления CR4 (см. рис. 2.7, в). При значении VME = 0 обработка исключений производится в защищенном режиме, если в регистре EFLAGS поле IOPL = 3. Если IOPL < 3, то реализуется исключение типа #GP. При значении VME= 1 способ обработки программных прерываний, реализуемых при поступлении команды INTn, зависит от значения соответствующего бита в таблице, располагаемой в сегменте TSS решаемой задачи. Если этот бит равен «0», и в регистре EFLAGS значение поля IOPL = 3, то прерывание обслуживается как в процессоре 8086:

•   в стек последовательно загружается содержимое регистра EFLAGS, в котором устанавливаются значения бита NT = 0 и поля IOPL = 0, регистров CS, IP (младшие 16 разрядов содержимого EIP);

•   в регистре EFLAGS устанавливаются значения битов IF = TF = 0;

•   из таблицы прерываний, расположенной в начале адресуемой памяти (начиная с адреса 0000000000h), загружается вектор соответствующего прерывания-новое содержимое CS и IP.

Если бит в таблице обслуживания прерываний TSS равен «1», то обработка прерывания производится в защищенном режиме.

Если при VME = 1 значение поля IOPL < 3, то при обслуживании исключений используется механизм виртуальных прерываний.

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.01 секунд 2,297,537 уникальных посетителей