Режимы работы процессора i486 и их инициализация.

11/18/94 09:40am i4_rej.lek
А.В.Фролов, Г.В.Фролов "Защищенный режим процессоров Intel 80286/80386/80486. Практическое руководство по использованию защищенного режима" БСП том 6 М "Диалог-МИФИ" 1993
В.Б.Бродин, И.И.Шагурин "Микропоцессор i486. Архитектура, программирование, интерфейс" М "Диалог-МИФИ" 1993
--"i486tm микропроцессор" в 2-х книгах Библиотека программиста "И.В.К.-СОФТ" М 1993

Режимы работы процессора i486 и их инициализация.

Реальный режим.

Этот режим в качестве основного не используется. При выполнении программ в реальном режиме микропроцессор может рассматриваться как более ранняя модель, но с большим быстродействием, расширенным набором команд и увеличенным числом регистров (используются 16-ти разрядные операнды). Адреса вычисляются на основе содержимого регистров сегмента и смещения и не могут выходить за пределы 1M всего адресного пространства и 64K размера сегмента. Доступны практически все команды, за исключением тех что используют операнд как регистр селектора. В целом система прерываний не отличается от системы прицессора i8086.

Однако не следует думать, что процессор i486 идентичен процессору i8086 В нем некотрые принципиальные вопросы решены иначе, чем в базовом микропроцессоре, но эти отличия проявляются в "экзотических" ситуациях.
Всего задокументировано около 20 отличий; ниже перечислены некотрые из них:

  1. Отличается количество тактов, необходимое для выполнения команд;

  2. Ограничено максимальное количество сдвигов операнда (31 сдвиг);

  3. Установлено ограничение на длину команды (15 байт);

  4. Нет "зацикливания" внутри сегмента в 64K и в адресном пространстве 1M во всех возможных случаях;

  5. Введены ограничения на использование префикса LOCK (указан исчерпывающий список каманд при которых уместна блоккировка);

  6. Изменена логика обработки прерываний, в том числе пошагового выполнения и назначение отдельных прерываний;

  7. Введено понятие максимального отрицательного числа при операции IDIV;

  8. Изменена логика работы с шинами;

  9. Введена возможность установки размера таблицы векторов прерывания.

Отличия процессора i486 от i286 и i386 в основном касаются набора команд и архитектуры.

Реальный режим используется при начальной инициализации вычислительной системы и загрузке ОС; а так же для более быстрого выполнения программ в однозадачном режиме.

Одним из способов перехода в реальный режим является переход по сигналу RESET, вырабатываемому внешними схемами при включении питания или в другой предусмотренный схемой ЭВМ момент.
После окончания процедуры сброса процессор эмулирует 16-ти разрядный микропроцессор i8086; при этом в регистре EDX оказывается идентификатор процессора:

DH - содержит число, идентифицирующее тип процессора (4);

DL - уникальный идентификатор номера версии процессора.

Состояние остальных регистров оговаривается в документации, но желательно производить необходимые настройки программно.

Если во время снятия сигнала RESET присутствовал запрос на тестирование (сигнал AHOLD), то процессор выполняет процедуру автотестирования и в регистр EAX помещается код обнаруженной ошибки (в норме =0). Тестирование выполняется около 2^20 тактов, если тестирование не производилось, то состояние EAX может быть любым.

ПРИМЕЧАНИЕ: С точки зрения проектирования компьютера удобнее разрабатывать единый модуль оперативной памяти (не помещать в промежутке от 640К до 1М внешние устройства и ПЗУ). Для обеспечения совместимости с 16-ти разрядным реальным режимом процессора i86 считается, что регистр CS содержит значение F000h. Однако при выдаче адреса на шину старшие разряды устанавливаются в "1", это положение сохраняется до первой команды "дальнего" перехода.

Защищенный режим.

Основной режим работы процессора. Переход в этот режим осуществляется после подготовки всех необходимых таблиц. Переключение режима осуществляется установкой бита PE в регистре CR0 (бит 0). Для обеспечения совместимости это можно сделать командой LMSW или MOV, причем последняя позволяет вернуться в реальный режим.

В целом переход в защищенный режим не отличается от процедуры, приведенной для процессора i286 (не надо заботиться о адресе возврата - для возврата нет необходимости генерировать "сброс" и о разрешении старшей части адреса).

Для переключения в реальный режим из защищенного необходимо выполнить следующие действия:

1 Обеспечить равенство линейных адресов физическим;

2 Отключить трансляцию страниц, сбросив бит PG в ренистре CR0;

3 Загрузить ноль в регистр CR3 для сброса КЭШ-памяти страниц;

4 Передать управление сегменту кода с пределом 64К;

5 Загрузить в сегментные регистры SS, DS, ES, FS, GS селекторы дескрипторов, соответствующие реальному режиму:

6 Запретить маскируемые и немаскируемые прерывания;

7 Сбросить бит PE регистра CR0 (бит защиты);

8 Выполнить команду дальнего перехода для очистки очереди команд;

9 Настроить систему прерываний;

10 Разрешить прерывания;

11 Загрузить сегментные регистры необходимыми программе значениями.

Мультизадачный режим (подрежим защищенного режима).

В целом организация мультизадачного режима соответствует указанному для i286, изменен формат сегмента состояния задачи TSS (смещение - назначение):

Битовая карта ввода/вывода служит для отметки портов (помечаются 1), при обращении к которым должно проверяться соотношение значений CPL <= IOPL.
Каждый бит таблицы соответствует одному байту в пространстве портов ввода/вывода. Полная таблица занимает 8К памяти.

Процессор может работать с сегментом состояния задачи, подготовленным для i286 (если будет вызван TSS с соответствующим байтом доступа).
Одновременно могут выполняться 16-ти и 32-х разрядные задачи. Проблемы могут возникнуть при обращении разноразрядных задач друг к другу, но и их можно решить.

Режим виртуального процессора i8086 (подрежим защищенного режима).

Режим V86 используется для эмуляции процессора i86 в рамках защищенного режима. Переключение осуществляется установкой бита VM в регистре EFLAGS (его номер 17). В этом режиме с точко зрения программимста адрес формируется как <сегмент:смещение>, однако реально используется трансляция страниц, что позволяет выполнять программы в мультизадачном режиме.

В этом режиме формируется так называемая "виртуальная машина"; каждой задаче выделяется пространство в 1М, с размером сегмента 64К. При выполнении операций ввода/вывода может быть предоставлен доступ непосредственно к устройству, или выполнена его эмуляция.
Возможно использование новых команд и 32-х разрядной арифметики.

Структура задачи виртуального процессора 8086:
Задача виртуального процессора состоит из программы, предназначенной для выполнения и программы "родного режима" (NATIVE MODE) процессора i486, играющией роль монитора виртуальной машины. Задача должна быть представлена при помощи TSS процессора i486 (не i286).

Монитор виртуального режима должен иметь максимальный уровень привилегий и состоять из процедур обработки исключений и инициализации. Он должен позволять выполняемой программе модифицировать ОС (по крайней мере с точки зрения программы), но защищать память за границей отведенного 1М.

Разбиение на страницы для задач виртуального режима.

Разбиение не является обязательным, но желательно в следующих случаях:

  1. При создании множества задач виртуального режима (каждой нужен "нижний" мегабайт физических адресов);

  2. При эмуляции циклического возврата через один мегабайт;

  3. При создании виртуального адресного пространства, превышающего физическое;

  4. При наличии нескольких программ, использующих ОС и ПЗУ (каждая может попытаться модифицировать ОС для своих нужд);

  5. Для эмуляции ввода/вывода.

ПРИМЕЧАНИЕ: Если используется режим виртуальной памяти, то для формирования физического адреса из линейного используется только таблица страниц и регистр CR3 указывает не на каталог таблиц страниц, а непосредственно на таблицу страниц (старшие биты равны нулю в связи с особенностью формирования линейного адреса).

Защита внутри виртуальной задачи.

В основном требуется обеспечить защиту наиболее чувствительных областей монитора виртуального режима, расположенных в первом мегабайте и запретить выход из этого пространства для эмуляции зацикливания. Межсегментная защита в выполняемой программе должна быть снята, но может возникнуть проблема с зацикливанием внутри сегмента.

Переключение режимов.

Вход и выход микропроцессора в режим V86 осуществляется при загрузке в регистр EFLAGS значения с установленным или сброшенным битом VM. Это происходит при переключении задач, когда изменяется старшая часть регистра флагов. Не следует забывать, что только TSS процессора i486 хранит 32-х разрядное значение EFLAGS; если текущий TSS подготовлен для i286, то старшая часть регистра считается нулевой.
При проектировании монитора виртуального режима необходимо максимально полно учитывать различия мехду процессорами 8086 и 80486.


Stay-at-home