Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Организация вычислительных систем на базе микропроцессоров с архитектурой x86. Учебное пособие
.pdf
41
Дескриптор шлюза
вызова (LDT)
- 0 -
Доступ
Счетчик
Селектор
Смещение
CALL Progr_A
Регистр CS
Дескриптор сегмента
кода (LDT)
ОП
Конец сегмента
…
Начальный адрес
Progr_A
Регистр IP
- 0 -
Доступ
Базовый
адрес сегмента
Размер
…
Начало сегмента
Рис. 3.15
5. Ограничение набора команд. Определенные команды могут влиять
на механизм защиты и вмешиваться в обычный порядок работы системы.
Поэтому такие команды могут исполняться только процедурами с достаточно высоким уровнем привилегий. МП с архитектурой х86 имеют два
класса команд ограниченного применения: привилегированные команды и
чувствительные команды. Первые могут выполняться, только когда уровень CPL=0, иначе возникает прерывание. Такими командами являются загрузка регистров дескрипторных таблиц LDTR, GDTR, IDTR, загрузка регистра задач TR, слова состояния машины MSW и другие.
Ко второму классу относятся команды ввода/вывода IN, OUT, INS,
OUTS. Они работают с периферийными устройствами, которые должны
координироваться ОС. Сюда же относятся команды разрешения/запрещения прерывания, определяющие восприятие микропроцессором маскируемых аппаратных запросов на обслуживание. Уровень, на котором программы могут выполнять чувствительные команды, задается полем IOPL регистра флагов. Изменение значения поля IOPL возможно только на уровне CPL=0 привилегированной командой.
3.5. Мультизадачность и переключение задач
Процесс выполнения нескольких задач называется мультизадачностью. МП с архитектурой х86 в любой момент времени выполняет только
одну задачу, которая является активной, остальные пассивные.

42
Переход от одной задачи к другой называется переключением задач.
Он включает в себя смену контекста или состояния задачи, куда относятся
все элементы, которые изменяются при переходе к другой задаче (в основном - содержимое регистров). При переключении задач всегда сохраняется
состояние уходящей задачи, затем загружается состояние приходящей задачи и начинается ее выполнение.
Имеются аппаратные и программные причины переключения задач.
Задача, которая начинает выполняться в результате прерывания, называется планируемой аппаратно. Задача, которая начинает выполняться по требованию ОС, - планируемой программно. Пользовательские задачи планируются программно, обслуживание периферийных устройств в реальном
времени – аппаратно.
Известно, что в МП каждая задача имеет сегменты кода и данных,
расположение которых в памяти определяется LDT. Кроме того, каждая
задача имеет свой специальный сегмент состояния задачи TSS, который
хранит состояние регистров, когда задача пассивна.
Микропроцессор распознает TSS как особый системный сегмент. Он
имеет в GDT специальный дескриптор. Формат его похож на дескриптор
сегментов кода и данных (рис. 3.8), но бит S=0, а поле ТИП содержит код
00B1, где B - бит занятости. Он устанавливается в 1 при переключении на
заданную задачу и используется для обнаружения попытки переключения
на задачу, выполнение которой прервано. Переключение задач производится только при В=0.
Обращение к TSS производится с помощью 16-битных селекторов.
Селектор TSS текущей задачи хранится в регистре задачи TR. Он состоит
из двух частей: «видимой», которая доступна программно, и «невидимой»,
т.е. программно недоступной. Задача может обращаться к «видимой» части, т.е. к селектору дескриптора для последнего TSS. Невидимая часть содержит дескрипторный кэш, к которому задача не имеет доступа.
При переключении задач изменяется селектор TSS. После этого МП
автоматически загружает информацию о сегменте состояния задачи из дескриптора TSS таблицы GDT в «невидимую» часть дескриптора TR. После
этого можно адресоваться к TSS новой задачи для восстановления состояния регистров. Схематично это показано на рис. 3.16. Если селектор ТSS
указывает на несистемные дескрипторы кодов или данных, то возникает
прерывание.
Рассмотрим более подробно содержимое сегмента TSS. Его наибольшая часть занята данными из регистров, описывающих состояние задачи: восемь общих регистров (AX, BX, CX, DX, SI, DI, BP, SP); указатель
команды IP; регистр флагов FLAGS; четыре сегментных регистра (DS, ES,
SS, CS); регистр задачи TR; регистр LDТR. Последние два регистра нужны
для того, чтобы знать, где сохранить состояние задачи при выходе из нее и
где располагаются сегменты данных и кодов для этой задачи. Состояние

43
Селектор
- 0 -
Доступ
адрес сегмента
Размер
Базовый
Базовый адрес сегмента
Доступ
Размер
«видимая» часть
15 0
«Невидимая» часть (дескрипторный кэш)
Конец TSS
:
:
Начало TSS
ОП
Дескриптор TSS
Сегмент TSS
других системных регистров не зависит от задачи и поэтому в TSS не
включается.
Рис. 3.16
Помимо этой информации TSS содержит поле обратной связи с предыдущей задачей (селектор TSS обратной связи). Кроме того, защита требует, чтобы каждый уровень привилегий в каждой задаче имел отдельный
стек. Поэтому в TSS имеется место для 3-х указателей SS:SP.
Обычно в ОС принято расширять понятие TSS и объявлять альтернативный сегмент данных. Он включает в себя память для TSS и дополнительную память для другой информации о задаче, где обычно сохраняется
состояние регистров математического сопроцессора.
Переключение задач производится командами JМР и CALL. При
этом должно выполняться правило привилегий, установленное для доступа
к данным, вида DPL
max (CPL, RPL). Но также имеется возможность
TSS
коду с низкой привилегией выполнить переключение задач. Это производится с помощью шлюза задачи, применение которого аналогично использованию шлюза вызова. Дескрипторы шлюза задачи помещаются в LDТ и
имеют формат, приведенный на рис. 3.17, где поле ТИП байта прав доступа содержит код 0101.
Каждое переключение задачи устанавливает бит TS в регистре
MSW, который показывает, что контекст сопроцессора может не соответствовать текущей задаче.

44
-0-
Доступ
Селектор
Смещение
15 0
Рис. 3.17
Рис. 3.18
15 0
- 0 -
Доступ
Селектор
3.6. Прерывания и исключения в микропроцессоре
Механизм прерываний в МП предусматривает обработку запросов на
обслуживание как от внешних устройств МПС (обработка прерываний),
так и от внутренних блоков МП (обработка исключений). Реакция на любой запрос, разрешенный к облуживанию, заключается в передаче управления от текущей программы к специальной процедуре.
Прерывания бывают двух видов: маскируемые и немаскируемые.
Немаскируемые поступают на вход NMI микропроцессора и обрабатываются всегда. Маскируемые подаются на вход INTR и могут разрешаться
или запрещаться битом IF регистра флагов. Прерывания обрабатываются
после завершения выполнения текущей команды. По окончании процедуры обслуживания МП продолжает выполнение программы с команды, непосредственно следующей за прерванной. Маскируемые и немаскируемые
прерывания имеют определенные коды, и им соответствуют команды МП
типа INTn, где n – номер прерывания. Используя такие команды в программе, можно реализовать программные прерывания.
Исключения делятся на отказы (нарушения), ловушки и выходы из
процесса (аварии). Исключения различаются в зависимости от способа сообщения о них и возможности перезапуска МП с вызвавшей их команды.
Отказ – это исключение, которое выявляется и обслуживается перед
выполнением команды, например неразрешенный код команды, обращение к несуществующему сегменту, ошибка деления. После обработки такого исключения выполнение программы продолжается с рестарта команды, вызвавшей нарушение.
Ловушка – это исключение, которое возникает непосредственно после выполнения команды. Например, переполнение. После обработки исключения выполнение программы продолжается со следующей команды.
Выход из процесса (авария) используется для сообщения о крупных
ошибках (неисправность блоков, двойная ошибка). Причину аварии установить нельзя, поэтому программа снимается с обработки.
Особенности системы прерываний МП с архитектурой х86 связаны с
наличием виртуальных адресов и механизма защиты задач. В целом они
сводятся к передаче управления от текущей задачи к процессу обработки

45
через специальную таблицу прерываний. Она содержит список указателей
обработчиков прерываний и исключений (процедур обслуживания).
3.6.1. Организация таблиц прерываний
В реальном режиме таблица прерываний содержит четырехбайтные
элементы (векторы). Первые 16 разрядов вектора загружаются в регистр
CS и являются базой, а другие 16 разрядов загружаются в регистр IP и
представляют собой смещение. Логический адрес CS:IP определяет начало
соответствующей процедуры обслуживания прерывания или исключения.
Векторы прерываний объединяются в таблицу, которая называется табли-
цей векторов прерываний, размещаемой в ОП по адресам 000h…3FFh.
В защищенном режиме таблица прерываний содержит в качестве
указателей восьмибайтные дескрипторы шлюзов. Она называется деск-
рипторной таблицей прерываний (IDT). Обобщенный формат дескриптора
шлюза IDT показан на рис. 3.18, где поле Селектор указывает на дескриптор исполняемого сегмента в GDT или LDT, а поле Смещение задает начало программы обработки прерывания/исключения.
Размер и размещение таблицы в ОП определяются с помощью реги-
стра IDTR. Организация таблиц прерываний показана на рис. 3.19.
Рис. 3.19
Обращение к элементам таблиц осуществляется по восьмиразрядному коду (номеру) прерывания. Различные источники прерываний / исклю-

46
чений задают его по-разному. Так, исключение вводит его изнутри. Команды вызова процедур обработки прерываний INTn, INT0, INT3 содержат
или предполагают этот номер. Аппаратное маскируемое прерывание вводит его посредством цикла магистрали «подтверждение прерывания». Немаскируемому аппаратному прерыванию NMI назначен код 2.
3.6.2. Типы шлюзов дескрипторной таблицы прерываний
В таблицу IDT можно помещать дескрипторы шлюзов трех типов:
задачи, прерывания, ловушки. Шлюз задачи используется для переключения задач, а шлюзы прерывания и ловушки - для вызова соответствующих
процедур обслуживания. В последних случаях обработка происходит в
рамках текущей задачи.
Шлюзы прерывания и ловушки похожи на вызов процедуры прерывания через шлюз вызова. При обработке прерывания через эти шлюзы в
стеке сохраняются регистр флагов FLAGS и текущее значение адреса
CS:IP. Далее в МП вводится восьмиразрядный код с номером прерывания/исключения. По нему выбирается соответствующий шлюз IDT. Дескриптор шлюза указывает на соответствующую процедуру обслуживания. В
конце этой процедуры командой выхода из прерывания IRET старое состояние процесса восстанавливается и программа начинает работу с прерванной команды.
Разница в использовании этих шлюзов лишь в том, что в шлюзе прерывания сбрасывается флаг IF, а в шлюзе ловушек нет. В последнем случае
при выполнении исключения сохраняется способность МП реагировать на
прерывание от внешних устройств.
Дескрипторы шлюзов прерывания и ловушки отличаются кодом в
поле ТИП байта прав доступа. Для прерываний код этого поля равен 1110,
для ловушек - 1111.
При использовании шлюза задачи производится полное переключение задачи при возникновении прерывания. Этот процесс включает следующие действия: 1) сохраняется состояние прерванной задачи в TSS;
2) загружается состояние новой задачи из соответствующего TSS; 3) помещается в поле обратной связи этого TSS селектор прерванной задачи;
4) выполняется первая команда программы обработчика прерывания по
адресу CS:IP из TSS новой задачи.
Очевидно, что процесс переключения задач выполняется медленнее
вызова процедуры через шлюзы прерывания или ловушки, но он обеспечивает большее изолирование прерванной программы от программы обработчика. Используется для обработки прерываний от внешних устройств.
Это связано с тем, что такие запросы предназначаются ОС и не относятся к
текущей задаче.

47
4. ОРГАНИЗАЦИЯ МПС НА ОСНОВЕ МИКРОПРОЦЕССОРОВ
С АРХИТЕКТУРОЙ х86/32
32-разрядные МП с архитектурой х86/32 являются развитием архитектуры микропроцессоров х86/16, работающих в защищенном режиме.
Они имеют все достоинства своих предшественников и полностью совместимы с программным обеспечением 16-разрядных микропроцессоров.
Микропроцессоры с архитектурой х86/32 могут работать с 8-, 16или 32-битными операндами, строками байт, слов и двойных слов, а также
битами и строками бит. За счет 32-разрядной организации шины адреса в
них возможно обращение к физическому адресному пространству до 4 ГБ,
которое у МП старших поколений увеличено до 16 ГБ.
32-разрядные микропроцессоры обеспечивают поддержку виртуальной памяти, объемом до 24 ТБ. Адресное пространство ввода-вывода составляет 64 КБ. В 32-разрядном микропроцессоре с архитектурой х86 усовершенствована защита данных путем применения помимо сегментации
страничной организации памяти. Предусмотрены новые возможности тестирования и отладки с аппаратной поддержкой.
4.1. Развитие микропроцессоров с архитектурой x86/32
Рассмотрим, как изменялась организация МП с архитектурой х86.
Структурная схема первого поколения микропроцессоров с архитектурой
x86/32 (МП I80368 фирмы Intel) подобна представленной на рис. 3.1. Отличием являются 32-разрядные шины адресов и данных.
Такой МП состоит из пяти устройств, работающих параллельно.
Шинный интерфейс обеспечивает связь микропроцессора с внешними
устройствами микропроцессорной системы. Устройство предвыборки ко-
манд осуществляет опережающий просмотр команд программы. Используется для вызова этих команд из памяти и создания 16-байтной очереди команд. Устройство дешифрации команд предназначено для дешифрации
всех полей команды и организации очереди из 3 дешифрированных команд. Операционное устройство выполняет команды из очереди команд,
взаимодействуя со всеми другими блоками МП, требуемыми для завершения выполнения команд. Устройство управления памятью (УУП) предназначено для организации и управления логическим, линейным и физическим адресными пространствами, для защиты памяти и переключения задач.
УУП содержит блок сегментации и блок страничной адресации. Первый блок преобразует логические адреса в линейные по запросам ОУ. Для
ускорения этого преобразования текущие дескрипторы сегментов помещаются во встроенную кэш-память. Линейный адрес поступает в блок
страничной адресации. Если механизм трансляции адресов включен, то
линейные адреса преобразуются в физические. Если выключен, то это оз-

48
Кэш-
память
Шинный
интер-
фейс
Устройство об-
работки данных
с плавающей
точкой
АЛУ
Устройство
дешифра-
ции команд
Блок
сегментации
Блок
страничной адресации
Буфер ассоциативной
трансляции
Устройство управления памятью
Блок управле-
ния МП
Устройство
предвыбор-
ки команд
Буфер
команд
Внутренняя шина
Системная
шина
Операционное
устройство
АЛУ
РОН
РОН
.
.
.
начает, что линейный адрес совпадает с физическим. Для ускорения трансляции адресов используется кэш-память (буфер ассоциативной трансляции), где помещается каталог недавно использованных страниц.
Базовую архитектуру х86/32 представляют МП второго поколения.
Примером такого микропроцессора является МП i486, структура которого
приведена на рис. 4.1.
По сравнению с микропроцессорами первого поколения в его архитектуру введены следующие изменения: используется внутреннее устройство для операций с плавающей точкой (ПТ); на кристалле микропроцессора размещается кэш-память команд и данных первого уровня; поддерживается внешняя кэш-память второго уровня; используются методы с
RISC организацией вычислений, при которых большинство операций выполняются за один такт; усовершенствованы система синхронизации,
структура магистрали и протоколы обмена.
МП второго поколения включает следующие устройства: устройство
обработки данных с ПТ; устройство управления памятью; устройство кэшпамяти; шинный интерфейс; операционное устройство; устройство дешифрации команд; устройство предвыборки команд.
Устройство обработки данных с ПТ по своей структуре и с точки
зрения программного обеспечения во многом соответствует математическому сопроцессору, рассмотренному в разделе 2. Устройство кэш-памяти
имеет размер 8 КБ и позволяет существенно повысить производительность
микропроцессора за счет буферизации часто используемых команд и данных, что сокращает число обращений к ОП. Заполнение строк кэш-памяти
Рис. 4.1

49
выполняется быстрыми пакетными циклами. Остальные устройства аналогичны соответствующим устройствам МП I80386.
Структурная схема 3-го поколения 32-разрядных микропроцессоров
с архитектурой x86 (Pentium) представлена на рис. 4.2.
Рис. 4.2
По сравнению с предшественниками этот микропроцессор обладает
рядом следующих технических новшеств: наличие двух вычислительных
конвейеров V и U, осуществляющих параллельную обработку команд (в
результате реализуется суперскалярный режим работы, позволяющий за
один такт выполнять до двух команд); наличие блока прогнозирования
ветвлений, позволяющего предсказать адрес перехода и заблаговременно
загрузить команды с этого адреса в дополнительный буфер (очередь команд); наличие 8-ступенчатого конвейера для выполнения операции с ПТ;
наличие двух разновидностей кэш-памяти для команд и кэш-памяти для
данных; внешняя шина данных имеет ширину 64 бита; наличие конвейеризации адресов.
МП третьего поколения содержит следующие устройства. Шинный
интерфейс и устройство управления памятью, которые во многом анало-
гичны рассмотренным ранее, только шина данных 64-разрядная. Внутрен-
няя кэш-память, которая содержит две отдельные секции по 8 КБ (кэш
команд и кэш данных). Наличие раздельных кэшей дает возможность одновременного доступа к ним. За один такт могут быть произведены два

50
обращения к данным и прочитаны 32 байта команд. Устройство предвыборки команд, состоящее из двух 32-байтовых буферов предвыборки и
блока прогнозирования ветвлений.
Эти буферы участвуют в предвыборке команд следующим образом.
В каждый момент времени предвыборка команд производится только в
один из буферов. Предвыборка производится последовательно до тех пор,
пока не будет выбрана команда перехода. За этим в ходе предвыборки следит блок прогнозирования ветвлений. Если он предсказывает, что будет
переход, то включается второй буфер и в него осуществляется предвыборка команд начиная с той, на которую должен произойти переход. Второй
буфер становится основным, и процесс продолжается аналогичным образом. Если определено, что перехода не будет, то основная последовательность упреждающей выборки не нарушается и продолжает работать первый буфер. Если переход предсказан ошибочно, то буферы предвыборки
очищаются и предвыборка начинается снова. В случае неверного предсказания перехода микропроцессор теряет от 3-х до 4-х тактов.
Устройство декодирования команд, которое служит для одновре-
менного декодирования двух команд для конвейеров V, U и запуска конвейеров для выполнения команд. Для повышения быстродействия введены
две ступени декодирования команды для каждого конвейера. На первом
этапе декодер принимает команду из устройства предвыборки и определяет, можно ли запустить две соседние команды как пару. На втором этапе
формирует управляющее слово, которое используется для координации
работы конвейера. Устройство управления, которое преобразует внутреннюю команду (микрокод) от устройства декодирования команд в набор
микрокоманд для управления всеми устройствами микропроцессора. Уст-
ройство генерации адресов служит для определения адресов операндов в
памяти для V- и U-конвейеров, что позволяет ему работать в суперскалярном режиме и выполнять за один такт более одной команды.
Рассмотрим, как выполняются стадии конвейера МП Pentium. В микропроцессоре при выполнении команд параллельно работают два пятиступенчатых конвейера U и V. Это позволяет за один такт выполнять две целочисленных команды. U-конвейер может выполнять любую команду, в
том числе и с ПТ, так как в него входит и сопроцессор, а V-конвейер может выполнять только простые команды. Порядок прохождения команд по
обоим конвейерам не отличается от порядка их следования в выполняемой
программе. При параллельном выполнении двух команд они проходят каждую ступень конвейеров V и U синхронно. Если команда одного конвейера будет на какой-то ступени обработана раньше, чем команда другого, то
первая будет ждать вторую, чтобы одновременно поступить на следующую ступень. Кроме того, если нельзя выполнить в исполняемом блоке
одновременно две команды, то работает один конвейер, а вторая команда
запускается на исполнение только после выполнения первой.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
