Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
еп / 2 вопрос.doc
Скачиваний:
4
Добавлен:
24.02.2016
Размер:
142.85 Кб
Скачать

Введение

1. Приоритезация

2. Типы прерывания

1) Аппаратные

2) Программные

3. Рестарт команды

4. Обработка прерываний в персональной ЭВМ

5. Механизмы передачи управления обработчикам

прерываний.

6. Защита в процедурах прерываний.

Альтернатива опросу, применяемая практически во всех современных процессорах, называется прерываниями (interrupt), и состоит в значительном усложнении логики обработки команд процессором.

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

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

Как правило, адреса программ, соответствующих различным прерываниям собраны в таблицу, называемую таблицей векторов прерываний, размещаемую в определенном месте адресного пространства. У микроконтроллеров каждому возможному сигналу прерывания обычно соответствует свой вектор. Процессоры общего назначения часто используют более сложную схему, в которой устройство, запрашивающее прерывание, передает процессору номер прерывания или сразу адрес обработчика.

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

Механизм прерывания обеспечивается соответствующими аппаратно-программными средствами компьютера.

Любая особая ситуация, вызывающая прерывание, сопровождается сигналом, называемым запросом прерывания (ЗП). Запросы прерываний от внешних устройств поступают в процессор по специальным линиям, а запросы, возникающие в процессе выполнения программы, поступают непосредственно изнутри микропроцессора. Механизмы обработки прерываний обоих типов схожи. Рассмотрим функционирование компьютера при появлении сигнала запроса прерывания, опираясь в основном на обработку аппаратных прерываний (рис. 1.1).

Рис. 1.1.  Выполнение прерывания в компьютере: tр - время реакции процессора на запрос прерывания; tс - время сохранения состояния прерываемой программы и вызова обработчика прерывания; tв - время восстановления прерванной программы

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

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

Время реакции зависит от момента, когда процессор определяет факт наличия запроса прерывания. Опрос запросов прерываний может проводиться либо по окончании выполнения очередного этапа команды (например, считывание команды, считывание первого операнда и т.д.), либо после завершения каждой команды программы.

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

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

Время реакции определяется для запроса с наивысшим приоритетом.

Глубина прерывания - максимальное число программ, которые могут прерывать друг друга. Глубина прерывания обычно совпадает с числом уровней приоритетов, распознаваемых системой прерываний. Работа системы прерываний при различной глубине прерываний (n) представлена на рис. 1.2. Здесь предполагается, что с увеличением номера запроса прерывания увеличивается его приоритет.

Рис. 1.2.  Работа системы прерываний при различной глубине прерываний

Без учета времени реакции, а также времени запоминания и времени восстановления:

t11+t12=t1,

t21+t22=t2.

Приоритезация

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

Перехват прерывания — изменение обработчика прерывания на свой собственный.

Прерывания делятся на аппаратные и программные.

Аппаратные прерывания - прерывания, вызванные процессами в аппаратуре вычислительной системы. Источником такого прерывания может быть сам микропроцессор (не программа, а само оборудование микропроцессора). Используются для организации взаимодействия с внешними устройствами. Запросы аппаратных прерываний поступают на специальные входы микропроцессора. Они бывают:

  1. маскируемые;

  2. немаскируемые;.

Маскируемые - прерывания, которые можно запрещать установкой соответствующих битов в соответствующем регистре маски прерываний; могут быть замаскированы программными средствами компьютера;

Маскируемые прерывания вызываются переходом в высокий уровень сиг­нала на входе INTR (Interrupt Request) при установленном флаге разрешения (IF=1). В этом случае процессор сохраняет в стеке регистр флагов, сбрасы­вает флаг IF и вырабатывает два следующих друг за другом (back to back) цикла подтверждения прерывания, в которых генерируются управляющие сиг­налы INTA# (Interrupt Acknowledge). Высокий уровень сигнала INTR должен сохраняться по крайней мере до подтверждения прерывания. Первый цикл подтверждения холостой, по второму импульсу внешний контроллер прерыва­ний передает по шине номер вектора, обслуживающего данный тип аппарат­ного прерывания. Прерывание с полученным номером вектора выполняется процессором так же, как и программное. Обработка текущего прерывания может быть в свою очередь прервана немаскируемым прерыванием, а если обработчик установит флаг IF, то и другим маскируемым аппаратным прерыванием.

Немаскируемые обрабатываются всегда, независимо от значения флага IF (в процессорах Intel), так как предназначены для реакции на сверхважные для вычислительной системы события.

Немаскируемые прерывания выполняются независимо от состояния флага IF по сигналу NMI (Non Mascable Interrupt). Высокий уровень на этом входе вы­зовет прерывание с типом (вектором) 2, которое выполняется так же, как и маскируемое. Его обработка не может прерываться под действием сигнала на входе NMI до выполнения команды IRET.

Программные прерывания вызываются следующими ситуациями:

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

  2. наличие в программе специальной команды прерывания INT n, используемой обычно программистом при обращениях к специальным функциям операционной системы для ввода-вывода информации.

Каждому запросу прерывания в компьютере присваивается свой номер (тип прерывания), используемый для определения адреса обработчика прерывания.

При поступлении запроса прерывания компьютер выполняет следующую последовательность действий:

  1. определение наиболее приоритетного незамаскированного запроса на прерывание (если одновременно поступило несколько запросов);

  2. определение типа выбранного запроса;

  3. сохранение текущего состояния счетчика команд и регистра флагов;

  4. определение адреса обработчика прерывания по типу прерывания и передача управления первой команде этого обработчика;

  5. выполнение программы - обработчика прерывания;

  6. восстановление сохраненных значений счетчика команд и регистра флагов прерванной программы;

  7. продолжение выполнения прерванной программы.

Этапы 1-4 выполняются аппаратными средствами ЭВМ автоматически при появлении запроса прерывания. Этап 6 также выполняется аппаратно по команде возврата из обработчика прерывания.

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

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

Некоторыми типами прерываний управляют флажки IF и TF из регистра флагов процессора, которые для восприятия условия прерывания процессором должны быть установлены. Если условие для прерывания удовлетворяется и необходимые флажки установлены, процессор по завершении текущей ис­полняемой команды реализует последовательность прерывания:

1) текущее значение регистров FL (флаги), CS и IP включается в стек;

2) в регистры IP и CS помещается новое содержимое (ад­рес процедуры прерывания), которое определяется типом пре­рывания и извлекается из предопределенных ячеек памяти, оп­ределяемых типом прерывания;

3) флаги IF и TF сбрасываются, тем самым запрещается многократное выполнение последовательности прерывания по одному и тому же условию. Четыре байта (двойное слово), в которых находится новое содержимое IP и CS, называются вектором прерывания. Процессором поддерживаются 256 типов прерываний, каждому из которых выделяется соответствую­щий вектор. Первые 5 векторов резервируются для специаль­ных целей. Например, прерывание типа 0 связано с ошибками деления и при возникновении переполнения при выполнении команд DIV или IDIV текущее содержимое IP, CS и FL вклю­чается в стек, а в IP и CS заносится адрес процедуры преры­вания из ячеек памяти OOOOOh и 00002Н.

Для запрещения выполнения последовательности прерыва­ния используется флажок IF, который управляется командами STI и CLI. Нулевое состояние флага запрещает (маскирует) прерывания. Действие флага IF распространяется на все типы прерываний, кроме немаскируемого прерывания (тип 2), кото­рое инициируется сигналом, подаваемым на вход процессора NMI.

Выполнение последовательности прерывания процессором может быть вызвано двумя причинами: выполнением команды программного прерывания INT или подачей сигнала прерыва­ния на вход процессора INTR с последующим выполнением процессором специального цикла шины для чтения типа пре­рывания, передаваемого устройством, установившим сигнал INTR по линиям DO-D7. К командам программного прерыва­ния относятся следующие команды: INT3, INTO и INT п, где n — тип прерывания. Форматы перечисленных команд приведе­ны в приложении. Каждая процедура прерывания должна за­канчиваться командой возврата из прерывания IRET, которая восстанавливает содержимое регистров IP, CS и FL из стека.

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

Отказ (fault) — это исключение, которое обнаруживается и обслуживается до выполнения инструкции, вызывающей ошибку. После обслуживания этого исключения управление возвращается снова на ту же инструкцию (включая все префиксы), которая вызвала отказ. Отказы, использующиеся в системе вирту­альной памяти, позволяют, например, подкачать с диска в оперативную память, затребованную страницу или сегмент.

Ловушка (trap) — это исключение, которое обнаруживается и обслуживает­ся после выполнения инструкции, его вызывающей. После обслуживания этого исключения управление возвращается на инструкцию, следующую за вызвав­шей ловушку. К классу ловушек относятся и программные прерывания.

Аварийное завершение (abort) - это исключение, которое не позволяет точно установить инструкцию, его вызвавшую. Оно используется для сообще­ния о серьезной ошибке, такой как аппаратная ошибка или повреждение сис­темных таблиц.

Обработка прерываний и исключений в защищенном режиме базируется на таблице дескрипторов прерываний (шлюзов прерываний) IDT – адрес начала и размер которой хранятся в регистре IDTR. Его формат аналогичен формату регистра GDTR (рис. 4.1).

Рис. 4.1 Формат регистра IDTR

Таблица прерываний может содержать до 256 дескрипторов. При попытке обслуживания прерывания с номером, выходящим за размер таблицы, генери­руется исключение #DF. Под исключения отданы первые 32 номера (0 ¸31).

Не все из этих векторов используются процессором в настоящее время; не назначенные векторы из этого диапазона резервируются для возможного использования в будущем. Использовать не назначенные векторы не следует.

Векторы маскируемых прерываний определяются аппаратно. Контроллеры внешних прерываний (например, Intel 8259, программируемый контроллер прерываний) передают вектор на шину процессора во время цикла квитирования прерывания. Использоваться могут любые векторы в диапазоне значений от 32 до 255. В реальном режиме диапазон номеров для обработки аппаратных прерываний находился: IRQ0¸IRQ7 номера прерываний 08h¸0Fh и IRQ8¸IRQ15 – 70h¸77h. В связи с тем, что, как отмечалось выше, первые 32 номера заняты под исключения, возникает необходимость перепрограммировать контроллер прерываний на другие номера. Изначальным программирование контроллера для реального режима занимается BIOS. Итого в защищенном режиме остается 208 номеров под программные прерывания.

Соседние файлы в папке еп