Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура_и_команды_ЦП.doc
Скачиваний:
2
Добавлен:
07.11.2018
Размер:
340.99 Кб
Скачать

Лекция 12 Прерывания

Иногда необходимо выполнить одну из набора специальных процедур, если в системе или в программе возникают определенные условия, например, нажата клавиша на клавиатуре. Действие, сти­мулирующее выполнение одной из таких процедур, называется пре­рыванием, поскольку основной процесс при этом приостанавливает­ся на время выполнения этой процедуры. Существует два общих класса прерываний: внутренние и внешние. Первые инициируются­состоянием ЦП или командой, а вторые - сигналом, подаваемым от других компонентов системы. Типичные внутренние прирывания: де­ление на нуль, переполнение и т.п., а типичные внешние - это запрос на обслуживание со стороны какого-либо устройства ввода/ вывода.

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

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

- текущее значение регистра Flags включается в стек (экви­валентно команде pushf);

- текущее значение кодового сегмента CS включается в стек (эквивалентно команде push CS);

- текущее значение указателя инструкции IP включается в стек (эквивалентно команде push IP);

- сбрасываются флажки IF и TF.

Новое содержимое IP и CS определяет начальный адрес выпол­няемой процедуры прерывания (обслуживание прерывания). Возврат в прерванную программу осуществляется командой, которая извле­кает из стека содержимое для:

- IP (эквивалентно pop IP);

- CS (эквивалентно pop CS);

- Flags (эквивалентно popf).

Двойное слово, в котором находится новое содержимое IP и CS, называется указателем прерывания, или вектором. Каждому ти­пу прерывания назначено число из диапазона 0...255, и адрес указателя прерывания находится путем умножения номера типа на четыре.

Контроллер прерываний и микропроцессоры 80х86.

Сигналы внешних аппаратных прерываний поступают в микропроцессор не непосредственно, а через контроллер прерываний. В качестве него используется микросхема Intel8259a, которая имеет 8 входных линий, называемых линиями запроса прерывания (Interrupt Request, IRQ). Обычно в системе бывает 2 таких микросхемы, одна из которых (ведущая) подключается непосредственно к микропроцессору, а вторая (ведомая) – к входу IRQ2 ведущей микросхемы. Таким образом, всего рассматривается 15 входных линий запросов прерываний от внешних устройств. Иногда этого не хватает, и на одной линии запроса «висят» несколько устройств, вследствие чего операционной системе приходится прилагать дополнительные усилия, чтобы разобраться, откуда пришёл сигнал.

Выходами микросхемы контроллера являются сигнал INT, идущий на вход микропроцессора (CPU), и номер вектора прерывания. Обратная связь микропроцессора с контроллером осуществляется с помощью сигнала INTA. Схема сопряжения контроллера (CIED, Controller Interrupts of External Units, назовём его так) и CPU (Central Processing Unit, центрального процессора) приводится на следующей схеме функционирования (рис.1)

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

Во-первых, в схеме контроллера присутствует регистр маски, биты которого могут быть установлены программно через порт 21h (A1h для ведомого контроллера). Наличие 1 в соответствующем бите этого 8-битного регистра запрещает прохождение сигнала от соответствующего устройства, 0 – разрешает.

Во-вторых, поступивший в контроллер запрос на обработку прерывания блокирует в нём прохождение сигналов от устройств текущего и более низкого приоритета до тех пор, пока микропроцессор не разблокирует их сигналом INTA, возникающим при подаче команды EOI (END OF INTERRUPT). Эта команда реализуется засылкой специального кода (20h) в порты 20h ведущего и A0h ведомого контроллера. Сигналы, поступившие на неразблокированные линии контроллера некоторое время могут ожидать обслуживания на входе, но до процессора не дойдут.

Приоритеты устройств стандартно расположены в порядке «сверху вниз» на рис1. (IRQ0 имеет наивысший приоритет, IRQ7 – наинизший, приоритеты IRQ8 – IRQ15 расположены между приоритетами IRQ1 и IRQ3. Однако контроллер прерываний ­– программируемое устройство, и все его регистры (маски, приоритеты, номера векторов прерываний от внешних устройств) могут быть изменены при загрузке операционной системы, и даже во время работы.

В третьих, сигнал прерывания на выходе из контроллера возбуждает линию INT, и одновременно формирует на другой линии номер вектора прерывания. Этот номер формируется из номера IRQ и так называемого «базового вектора», который равен 8 для ведущей и 70h для ведомой микросхемы (в реальном режиме; в защищённом режиме WINDOWS перепрограммирует эти номера.) По номеру прерывания CPU определяет вектор прерывания из таблицы векторов прерываний (ТВП, или IDT – Interrupt Data Table), расположенной в первом килобайте основной памяти (реальный режим). Структура ТВП следующая:

Табл. 1

IP255

CS255

. . .

IP1

CS1

IP0

CS0

Каждая строка таблицы содержит два слова (4 байта) – новое содержимое регистров IP и CS при входе в программу – обработчик, то есть её косвенный адрес. Эти значения автоматически загружаются в названные регистры при поступлении запроса на обработку прерывания. Старое содержимое регистров FLAGS, CS и IP сохраняется в стеке. В новом регистре FLAGS аппаратно обнуляется бит IF, что вызывает запрет на поступление прерываний от любых внешних устройств. Программа-обработчик прерывания (ПОП), допускающая обработку вложенных прерываний (т.е. если её можно прервать для выполнения обработки более приоритетного события) должна сама установить флаг IF в 1 в той точке своего исполнения, начиная с которой её можно прерывать.

В конце своего исполнения обработчик события должен разблокировать контроллер для данного и более низких приоритетов, послав в него сигнал EOI, и вернуть управление в прерванную программу командой IRET, восстанавливающей из стека регистры FLAGS, CS и IP.

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

  1. ТВП может быть расположена в любом месте ОП. Указателем на неё является регистр IDTR;

  2. Строками ТВП являются 8-байтные записи, содержащие более подробную информацию (вместо нового IP там задается EIP, а также ряд индикаторов);

  3. Сами события делятся на сбои (ошибки), ловушки и аварии;

  4. В некоторых случаях в вершине стека сохраняется код ошибки.

  5. При входе в обработчик учитываются так называемые «уровни привилегий» прерванной задачи и обработчика события.

Детально работу в расширенном режиме мы не рассматриваем.

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