регистров отладки, показанных на рис.3-11. Регистры отладки
поддерживают контрольные точки данных являются важным
нововведением, которое может сократить время отладки на многие
часы, т.К. Например, позволяет установить, когда происходит
непредусмотренная запись в структуры данных.
Регистры отладки также сокращают искажения в программах,
необходимые для записи команды точек останова в код, особенно для
программ, которые защищены от записи или разделены другими
задачами.
Отладчик 80386 реализует в виде обработчика особой ситуации с
номером 1. Процессор может непосредственно вызвать отладчик после
исполнения любой команды (путем установки флага TF - флага ловушки
пошагового исполнения), после переключения определенной задачи или
после появления условия точки останов, определенного одним из
`%#(ab`." отладки. Анализируя регистр статуса отладки, обработчик
отладочной особой ситуации может определить, какая из причин его
вызвала.
Будучи вызван при переключении задач, отладчик может
перезагрузить регистры отладки значениями, подходящими для новой
задачи.
80386 Может ожидать появления одновременно до четырех условий
контрольных точек, вызывая обработчик отладочной особой ситуации
про появлении одного из условий. Каждое условие контрольной точки
определяется содержимым регистра отладки, эти регистры могут быть
загружены и запомнены при помощи привилегированных форматов
команды MOVE. Условие контрольной точки содержит 32-битный
линейный адрес, 2-битное поле длины и поле доступа, последние два
элемента указываются в полях регистра управления отладкой DR7.
Адрес условия контрольной точкой и длина формируют адресный
диапазон, который контролируется процессором при каждой ссылке на
память. Поле доступа определяет тип доступа, для которого
процессор может вызвать особую ситуацию 1. Могут быть указаны 3
типа доступа:

1) исполнение команды по указанному адресу;
2) запись данных в диапазон адресов;
3) чтение или запись данных в диапазоне адресов.
3.7Ввод/вывод
Системы, базирующиеся на 80386, могут распределять устройства
ввода/вывода в пространство памяти процессора или в отдельное
пространство ввода/вывода. Устройствам ввода/вывода,
распределенным в пространство памяти, можно обращаться для чтения
или записи, используя такие команды обращения, как MOVE, OR или
аналогичные. Устройства, распределенные в памяти, могут быть
защищены с помощью стандартного механизма защиты сегмента и
страницы процессора 808386.
В дополнении к своему адресному пространству процессор 80386
имеет 64к-байтное адресное пространство ввода/вывода. Устройства,
распределенные в это пространство, управляются командами ввода,
вывода, ввода строки и вывода строки. Первые две команды передают
байт, слово, двойное слово в или из EAX-регистра. Последние две
команды передают строку байтов, слов или двойных слов в память или
из памяти.
Команды ввода-вывода 80386 чувствительны к уровню привилегий.
В регистре флагов имеется поле, называемое уровнем привилегий
ввода/вывода (IOPL), которое определяет минимальный уровень
привилегий , на котором работающая задача может исполнять команды
ввода/вывода (IOPL загружается из TSS, так что задачи могут иметь
различные IOPL). Например, если IOPL задачи равен 1, то задача не
может выдавать команды ввода-вывода, исключая случаи, когда она
работает на уровне привилегии 0 или 1. Механизм IOPL поддерживает
операционные системы с многоуровневой защитой, в которых,
например, критичные и стабильные процедуры ядра работают на уровне
привилегии 0, а более изменчивые процедуры ввода-вывода работают
на уровне привилегии 1, в этом случае операционная система должна
только установить IOPL равным 1, когда она создает задачу,
поскольку IOPL характерен для задачи, те задачи, которым можно
доверять, могут исполнять команды ввода-вывода на прикладном
уровне, позволяя тем самым непосредственно работать со
специальными устройствами, для которых не имеется драйвера
операционной системы.
Для того, чтобы реализовать прямой доступ к памяти (DMA) от
устройств вода/вывода, операционная система 80386 передает
d('(g%a*() адрес контроллеру DMA и должна гарантировать, что
сегменты и/или страницы, ко которым происходит обращение при DMA-
передачах , не будут перемещаться во время этой операции. Один из
способов пометить страницы "фиксированными на время ввода-вывода"
- это использование одного из трех битов пользователя в страничной
таблице.

АРХИТЕКТУРНАЯ СОВМЕСТИМОСТЬ
80386 совместим на уровне объектного кода с 80286 и с 8086.
Хотя можно просто использовать 80386 как быстрый 80286 или как
очень быстрый 8086, их совместимость обладает достаточно большой
гибкостью. Процессор 80386 может выполнять программы 80286 и 80386
параллельно, и, используя виртуальный режим 86 процессора 80386,
существующие программы 8086 могут также исполняться параллельно.
Таким образом при помощи 80386 становится возможным строить
системы, которые могут параллельно исполнять программы, написанные
для различных поколений семейства микропроцессоров.
4.1Совместимость с 80286
Архитектура 80286 является точным подмножеством архитектуры
80386. Так как процессор 80386 распознает все команды 80286,
регистры, дескрипторы и т.Д., То операционная система 80286 и
прикладные программы могут быть перенесены на аналогичное
оборудование, построенное на основе 80386 без изменения хотя бы
одного бита.
Прямой перенос, упомянутый выше, является наиболее быстрым
путем для того, чтобы запустить существующие программы, написанные
для 80286 на системе, построенной на 80386. С другой стороны
операционные системы для 80386 могут разрабатываться так, чтобы
они поддерживали существующие прикладные программы для 80286, и,
позволяя в то же время, новым прикладным программам полностью
использовать свойства архитектуры 80386 (например, 32-битные
параметры и длинные сегменты). В таких гибких разработках новые
прикладные программы вызывают операционную систему
непосредственно, передавая 32-битные параметры. Вызовы старых
прикладных программ, которые организованы в 16-битном формате
80286, перехватываются и преобразуются в 32-битный формат, а затем
передаются в операционную систему.
4.2Режимы реального и виртуального 8086
Процессор 80386 может выполнить объектные программы 80386
водном из 2 режимов: реальном режиме или виртуальном режиме 86.
80386 Входит в реальный режим при сбросе. В реальном режиме
процессор обеспечивает быстрое исполнение без защиты так, как на
8086. Многие операционные системы будут переключаться из реального
режима в режим защиты после инициализации, но также возможно
работать все время в реальном режиме 8086. Принципиальное различие
между реальным режимом 80386 и действительным режимом 8086
заключается в скорости: программы 8086, которые критичны по
скорости исполнения (например, использующие рассчитанные временные
циклы), могут потребовать небольших изменений для того, чтобы они
работали правильно в значительно более быстром реальном режиме
80386. Но основное множество программ 8086 будет работать без
каких-либо трудностей, т.к. они работают в реальном режиме 80286.
Виртуальный режим 86 устанавливает исполнительную среду 8086
внутри защищенной многозадачной среды 80386. В то время, как
реальный режим управляет всем, что делает процессор, виртуальный
режим 86 может применяться в избранных задачах 80386. Когда
процессор работает в виртуальном режиме 86, он ведет себя, как в
8086, но поле переключения к нормальной задаче, процессор
работает как 80386 (который, на самом деле, может интерпретировать
программы как для 80286, так и 80386). Таким образом виртуальный
режим 86 позволяет операционной системе поддерживать исполнение
программ 8086, 80286 и 80386 одновременно.
В разделе 3 было описано, как сегмент состояния задачи
отражает состояние своего виртуального процессора. Флаг VM86 в
регистре флагов, который загружается из TSS, определяет работающий
виртуальный процессор задачи как 8086 или 80386. Когда 80386
загружает свои регистры из TSS, у которого флаг VM86 установлен,
процессор входит в виртуальный режим 86. Когда при последующем
переключении задачи, процессор загружает значения в регистр из
TSS, у которого флаг VM86 сброшен, он выходит из виртуального
режима 86. Таким образом от задачи к задаче процессор эмулирует
80386 или 8086 согласно значению флага VM86. 80386 Также выходит
из виртуального режима 86, когда он выдает особую ситуацию или
возникает прерывание, и предоставляет полные ресурсы архитектуры
обработчику прерываний и особых ситуаций. При возврате из
обработчика, вызванного в виртуальном режиме 86,80386
автоматически возвращается в виртуальный режим 86. Так как
адресное пространство 8086 равно 1 мегабайту, логические адреса,
генерируемые задачей в виртуальном режиме 86, попадает в первый
мегабайт линейного адресного пространства 80386. Множество задач,
работающих в виртуальном режиме 86, могут пересекаться друг с
другом, поэтому они все должны разделять младший мегабайт
линейного адресного пространства. Операционная система может
использовать страничный механизм 80386 для перемещения линейных
адресных пространств задач, работающих в виртуальном режиме 86, в
различные области физического адресного пространства. Используя
страничный механизм таким способом, не только предотвращают
наложение задач, работающих в виртуальном режиме 86, но позволяют
операционной системе с виртуальной памятью обменивать страницы
задач, работающих в виртуальном режиме 86, как если бы они были
задачами 80386.
Задача, работающая в виртуальном режиме 86, может выполнять
программу, которая была написана для выполнения на однозадачном
персональном компьютере. Такая программа может содержать команды,
которые потенциально опасны, когда они выполняются в многозадачной
среде. Например позволяя задаче, работающей в виртуальном режиме
86, выполнять команду очистки флага прерываний, тем самым запрещая
прерывания, можно остановить всю систему. Для предотвращения таких
нарушений 80386 выдает особую ситуацию, когда задача, работающая в
виртуальном режиме 86, пытается исполнять команду ввода/вывода или
команду, относящуюся к прерываниям.
Запрещение исполнения таких команд защищает остальную часть
системы от задач, работающих в виртуальном режиме 86, но не
удовлетворяет потребности задач виртуального режима 86 в
исполнении команд. Решение заключается в моделировании опасных
команд в процедуре операционной системы, называемой монитором
виртуальной машины. Когда вызывается обработчик особых ситуаций,
он может проверить флаг VM86 в образе регистров флагов в стеке,
чтобы определить, является ли источник особой ситуации задачей
виртуального режима 86, в этом случае обработчик особых ситуаций
может вызвать монитор виртуальной машины, который может
промоделировать команду и вернуть управление задаче виртуального
режима 86. Следует заметить, что монитор виртуальной машины
моделирует только несколько команд 8086, и как моделируемые
команды, так и те команды, которые 80386 исполняет
непосредственно, выполняются значительно быстрее на 80386, чем на
8086.
Работая совместно, 80386 и монитор виртуальной машины
реализует полный набор команд 8086, и страничный механизм может
обеспечить каждую задачу виртуального режима 86 своим собственным
защищенным адресным пространством. Однако, большинство задач 8086
требуют дополнительных ресурсов, обеспечиваемых операционной
системой и периферийным оборудованием. В качестве примера первого
типа ресурсов можно привести файловую систему, в качестве второго
типа можно привести контроллер растрового дисплея, работающего
непосредственно под управлением прикладной программы. Эти ресурсы
могут присутствовать в системе, основанной на 80386 в форме,
отличной от топ, в которой они присутствовали ранее в системах,
для которых была создана программа 8086, чтобы упростить работу
для предоставления этих ресурсов в различных средах, 80386 может
реализовать ловушки при обращении к операционной системе и к
периферийным устройствам, которые делаются задачами виртуального
режима 86.
Например, большинство операционных систем 8086 используют
команду прерывания для реализации вызовов операционной системы.
80386 Выдает особую ситуацию, когда задача виртуального режима 86
пытается исполнить команду прерываний. Монитор виртуальной машины
может затем протранслировать вызов операционной системы в вызов
операционной системы 80386, как это показано на рис.4-1. Если IOPL
задачи виртуального режима 86 установлен равным значению, меньшему
3, то 80386 будет аналогичным образом создавать ловушки при
исполнении всех команд ввода/вывода программой 8086. Страничный
механизм 80386 может быть использован для перенаправления
обращений к устройствам ввода/вывода, распределенным в память, на
другие адреса, если это необходимо. Подобные обращения могут также
вызвать особые ситуации путем указания соответствующих страниц
памяти, как предназначенных только для чтения (чтобы быть
обнаруженным в случае записи) или как отсутствующих (для
обнаружения при
чтении или записи).

АППАРАТУРНАЯ РЕАЛИЗАЦИЯ
Архитектура процессора 80386, описанная в предыдущих разделах,
реализована более чем в 275000 транзисторах, использующих
технологический процесс CHMOS III фирмы ИНТЕЛ. В данном разделе
кратко рассматривается внутреннее устройство кристалла 80386 и
более подробно сигналы, при помощи которых 80386 взаимодействует с
другими компонентами.
5.1Внутренняя структура
На рис.5.1. приведена обобщенная функциональная структура
процессора 80386. Показанные 6 устройств организованы в
конвейерную структуру, которая позволяя им работать параллельно
над различными командами или над различными частями одной и то же
команды. Устройство управления шиной управляет передачами на шине
для других устройств. Если ни одно из других устройств не
требуется шиной, устройство предварительной выборки читает
следующее двойное слово командного потока из памяти в очередь
предварительной выборки. Таким образом, большинство чтений байтов
команды производится параллельно с исполнением других команд во
время свободных циклов шины. Устройство декодирования
расшифровывает каждый код операции, Преобразовывает его в
указатель на микрокод, которые реализует данную команду.
Исполнительное устройство выполняет микроинструкции.
Исполнительное устройство может складывать два 32-битные регистра
за 2 такта. Аппаратура умножения/деления выполняет 32-битное
c,-.&%-(% за время от 9 до 41 такта, в зависимости от количества
значащих цифр, а 32-битное деление за время от 38 до 42 тактов, в
зависимости от того, являются операнды знаковыми или беззнаковыми.
Сдвиг, циклический сдвиг и операции над полями битов выполняются
при помощи быстрого двигателя, который может сдвигать до 64 бит за
один такт. В типичной смеси команд, которая включает переходы и
вызовы, 80386 исполняет команды со средней скоростью в 4,4 такта
каждая.

ИСПОЛНИТЕЛЬНОЕ СТРАНИЧНОЕ УСТРОЙСТВО
УСТРОЙСТВО УСТРОЙСТВО СЕГМЕНТАЦИИ
+--------------------+ +------------+ +-------------------+
| | | | | ПЕРЕКОДИРОВОЧНЫЙ |
| РЕГИСТРЫ | | РЕГИСТРЫ | | БУФЕР ПРОСМОТРА |
| | | СЕГМЕНТОВ | | ИСКЛЮЧЕНИЙ |
+--------------------| | | | |
| БЫСТРЫЙ СДВИГАТЕЛЬ | | | | |
| | | | | |
+--------------------| +------------| +-------------------|
| УМНОЖЕНИЕ/ДЕЛЕНИЕ | | ТРАНСЛЯТОР | | ТРАНСЛЯТОР |
+--------------------+ | СЕГМЕНТОВ | | СТРАНИЦ |
| АРИФМЕТИЧЕСКОЕ +->| +->| |
| ЛОГИЧЕСКОЕ | L-----T------- L---------T----------
| УСТРОЙСТВО | | ---------
+--------T------------ | | УСТРОЙСТВО УПРАВЛЕНИЯ
ШИНОЙ
| | | | +-------------+
| | | | | ИНТЕРФЕЙС |
| L----------T-------------------------+ ШИНЫ +-+
| | +-------------+ |
| +---------------+ +------------------------+ |
| | ДЕШИФРАТОР |<-+ОЧЕРЕДЬ ПРЕДВАРИТЕЛЬНОЙ-|<---
| | | | ВЫБОРКИ |
| +---------------| +------------------------|
| | ОЧЕРЕДЬ | | УЗЕЛ ПРЕДВАРИТЕЛЬНОЙ |
L-------------+ КОМАНД | | ВЫБОРКИ |
+---------------+ +------------------------+

УСТРОЙСТВО ДЕКОДИРОВАНИЯ

Конвейерная организация выборки команды, ее декодирование и
исполнение на одном кристалле не является типичным для современных
микропроцессоров. С другой стороны помещение устройства управления
памятью (MMU) на кристалл, содержащий конвейерную структуру, также
является нововведением. Включение MMU в процессорный кристалл
улучшает производительность, ускоряет трансляцию адреса. За счет
уменьшения задержки распространения сигнала (большинство устройств
управления памятью, организованных в виде отдельных кристаллов,
вводят, как минимум, один такт ожидания на каждое обращение к
памяти). Еще одним средством ускорения работы процессора является
использование границ полутактов синхросигнала, которые доступны
внутри кристалла (частота синхронизации на входе 80386 вдвое выше
частоты, используемой в кристалле). Устройство управления памятью
80386 состоит из сегментного устройства и устройства управления
страницами, как показано на рис.5-1.
Устройство управления сегментами транслирует логические адреса
и проверяет каждый доступ на соответствие атрибутам защиты
сегмента. Для большинства команд устройство управления сегментами
получает данные для трансляции и защиты из регистров сегментов и
дескрипторов, находящихся на кристалле 80386. Устройство
c/` "+%-(o страницами включается или выключается программами
операционной системы. Когда устройство выключено, линейные адреса,
полученные устройством управления, проходят
через устройство управления страницами без изменения. Когда
страничный механизм включен, устройство управления страницами
транслирует линейные адреса в физические адреса и проверяет, что
доступ соответствует атрибутам страницы. Устройство управления
страницами включает 32-элементный перекодировочный буфер просмотра
исключений (TLB), который запоминает необходимую для трансляции
информацию для некоторого числа страниц, к которым происходили
последние обращения. Используя TLB, устройство управления
страницами может транслировать большинство обращений к страницам
(обычно 98-99%) без обращения к страничным таблицам, находящимся в
памяти. При необходимости устройство управления страницами
генерирует циклы шины, необходимые для возврата старых элементов
TLB в их страничные таблицы и для загрузки свободных мест в TLB
элементами страничных таблиц, обращение к которым имеет место в
текущей команде.
5.2Внешний интерфейс
На рис.5-2. показана блок-схема типичной системы, использующей
процессор 80386. Это, фактически рабочее место инженера-
проектировщика.
На рис.5-3 показан внешний интерфейс 80386 более подробно,
выводы процессора сгруппированы по функциональному назначению.
Ниже описаны сигналы, связанные с этими выводами.
5.2.1 Синхросигнал
Первые версии 80386 работают при частоте 12,5 или 16 МГц.
Сигнал синхронизации (CLK2) имеет частоту вдвое большую, чем
частота кристалла. Генератор синхросигнала 82384 генерирует сигнал
CLK2, который делится процессором 80386 на два, чтобы получить
свою внутреннюю синхрочастоту.
5.2.2 Шины данных и адреса
Процессор 80386 имеет отдельные 32-битные шины адреса и
данных. Для совместимости с существующим оборудованием и
драйверами устройств эффективная разрядность шины может
динамически переключаться между 16 и 32 битами. Ниже этот вопрос
обсуждается более подробно.
Система команд 80386 поддерживает 8-, 16- и 32-битные
передачи. Адресная шина организована так, чтобы непосредственно
указывать байты данных, которые являются активными в данном цикле
шины. Старшие 30 бит каждого адреса поступают на выводы A2-A31.
Выводы BE0-BE3 (разрешение байта) указывают, какие байты шины
данных относятся к текущей передаче. BE0 Соответствует разрядам D0-
D7, BE1 соответствует D8-D15 и т.Д. Эти управляющие байты
непосредственно соответствуют способу, которым большинство 32-
битных подсистем памяти организованы, и устраняют необходимость в
аппаратуре декодирования байтов (см.Рис.5-4). Если, например,
необходимо присоединиться к системной шине, которая требует
наличия младших битов адреса, A0 и A1 могут быть сгенерированы из
BE0-BE3 при помощи 4 клапанов.
Операнды в памяти 80386 не должны быть расположены на каких-
нибудь границах, однако производительность повышается, когда они
попадают на границы адресов, которые кратны их размеру в байтах.
Это значит, что слова наилучшим образом располагаются на адресах,
делящихся на два, а двойное слово - на адресах, делящихся на 4.
(Элементы длиннее 32 бит, такие как числа с плавающей запятой с
двойной точностью, должны также располагаться на 4-байтных
#` -(f e для наилучшего быстродействия). 80386 Автоматически
генерирует необходимое количество циклов шины для передачи
операндов, не располагающихся на оптимальных границах, например,
целое, расположенное в двойном слове, запомненное в четном адресе,
не делящимся на 4, передается за два 16-битных цикла шины.
5.2.3 Определение циклов шины
80386 информирует внешнее оборудование о том, что на шине
начинается нормальный цикл шины путем установки сигнала ADS
(статус адреса). В тот же самый момент процессор определяет тип
цикла шины с помощью сигналов W/R, D/C и M/IO. Эти сигналы
отличают чтение от записи, данные от кодов команд и обращение к
вводу/выводу от обращения к памяти, соответственно.
80386 Вырабатывает сигнал LOCK (захват шины) для
мультипроцессорных применений и применений с несколькими ведущими
устройствами. Сигнал говорит другим ведущим устройствам шины, что
процессор выполняет операцию с несколькими циклами шины, которая
не должна прерываться. 80386 автоматически выдает LOCK, когда он
изменяет дескриптор сегмента и страничные таблицы, во время циклов
шины, связанных с процедурой подтверждения, и когда он выполняет
команду EXCHANGE. Команда EXCHANGE обеспечивает неделимую
операцию "проверка и установка", которая является основным
строительным элементом при реализации семафоров в разделяемой
памяти. Программисты, работающие на языке ассемблера, могут
захватить шину во время исполнения некоторых других команд, если
этим командам предшествует префикс LOCK.
5.2.4 Управление циклом шины
По указанию внешнего оборудования 80386 может реализовать два
типа циклов шины: не конвейерный и конвейерный. Первый тип цикла
обеспечивает 2-тактный доступ к высокоскоростным кэш-памятям и
локальным памятям любого объема (эффективность обращений к Kэш-
памятям зависит от их размера по отношению к элементам информации,
с которыми обращаются к ним прикладные программы). Второй тип
цикла шины позволяет низкоскоростным памятям иметь больше времени
для ответа на цикл шин, позволяя процессору 80386 в то же время
работать с максимальной скоростью. Внешнее оборудование может
динамически разрешать и запрещать конвейеризацию шины путем
установки сигнала NA (следующий адрес), как описано ниже.
Предоставляя возможность динамического управления циклом шины,
процессор 80386 позволяет инженеру-разработчику использовать
комбинации из различных компонентов (элементов) памяти, которые
удовлетворяют критериям стоимости, необходимого объема и требуемой
производительности, а также приспосабливать проект для
использования перспективных технологий при создании микросхем
памяти.
Процессор 80386 выводит тип цикла шины, как описаны выше, а
внешнее оборудование сигнализирует, что оно ответило на цикл шины
путем установки сигнала READY. Если, как это часто бывает, другой
запрос шины ожидает внутри процессора 80386, когда сигнал READY
уже установлен, процессор выводит следующий тип цикла шин. Если
конвейеризация отключена, минимальное время между адресами и
данными составляет два такта. Внешнее оборудование, которое не
может ответить за два такта, может удлинить цикл шины путем
удержания сигнала READY в неактивном состоянии, т.е. путем
вставления тактов ожидания в цикл. Если 32-битные циклы шины
исполняются друг за другом, то максимальная пропускная способность
шины 80386 составит 32 мегабайта в секунду при частоте
синхросигнала 16 МГц или 25 мегабайт в секунду при частоте 12,5
МГц.
Благодаря внутренней конвейеризации процессор 80386 очень
часто знает адрес и тип следующего цикла шины, прежде чем внешнее
оборудование ответит на текущий цикл. Внешнее оборудование может
использовать свойство внутренней конвейеризации адреса 80386 для
получения более раннего доступа к следующему типу цикла шины.
Конвейеризация адреса может дать внешнему оборудованию время,
равное трем тактам между адресом и данными, в то время как для
процессора пропускная способность шины останется равной двум
тактам.
Конвейеризация адреса наилучшим образом используется в
системах с перемежающейся адресацией, которая может отвечать на
доступ в различных блоках памяти параллельно. Устанавливая сигнал
NA, внешнее оборудование может запрашивать 80386 выдать тип
следующего цикла шины, как только он станет известен внутри
процессора, а не ожидать сигнала READY (см.Рис.5-6).
5.2.5 Динамическое управление разрядность шины
В дополнение к управлению типами циклов шины подсистема памяти