Скачиваний:
23
Добавлен:
11.05.2015
Размер:
998.91 Кб
Скачать

5.9. Прерывания

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

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

В процессорах с 80286 появилось понятие исключения (особые случаи, exceptions). Они делятся на:

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

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

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

Каждое прерывание имеет собственный номер. В ОЗУ существует таблица векторов прерываний, каждый вектор которой указывает на процедуру-обработчик соответствующего прерывания. После выполнения вызванной процедуры, управление возвращается в исходную точку (в зависимости от вида прерывания), и продолжается выполнение первоначальной программы. В защищенном режиме таблица векторов прерываний расширяется до таблицы дескрипторов прерываний, причем ее размер может задаваться программно в диапазоне от 32 до 256 дескрипторов. Адрес таблицы в реальном режиме, как правило, 0h, в защищенном — задается программно.

Внутреннее прерывание у процессоров 8086 и 8088 выполняется в следующих случаях:

  • некорректная команда (деление на ноль, неверный код операции, трассировочное прерывание, и т.д.);

  • команда программного прерывания (int, into).

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

Внешние прерывания ранних IBM-PC инициировались в следующих случаях:

  • на линию INTR процессора поступает запрос на обработку прерывания от внешнего устройства (маскируемые внешние прерывания);

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

В более поздних ЭВМ, помимо этих двух линий, существует встроенный контроллер прерываний (APIC).

При работе с внешними устройствами возможны два подхода:

  • постоянный опрос устройства на предмет его готовности к обмену данными;

  • выполнение какой либо посторонней задачи с разрешенным механизмом прерываний. Как только устройство готово к обмену, оно передает сигнал запроса прерывания (IRQ — Interrupt ReQuest) и процессор начинает выполнять программу-обработчик прерывания, которая и выполняет обмен информацией с устройством.

Второй путь, использующий прерывания, имеет следующие особенности.

  • Можно избежать циклов опроса устройства, которые требуют значительного процессорного времени.

  • Отладка и, порой, разработка обработчика прерываний сложнее обычной программы с циклическим опросом устройства.

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

Для управления внешними прерываниями используется внешний контроллер прерываний, выполняющий функции арбитра, сигнализирует процессору о внешнем прерывании по линии INTR и передает его номер. Контроллер, использовавшийся в ранних IBM-PC, допускал обслуживание до 8 внешних устройств. В более поздних машинах стали использовать каскадное соединение двух контроллеров, что позволило увеличить число устройств до 15. В современных машинах в чипсет входит схема, эмулирующая каскадное соединение двух контроллеров. Ее возможности порой превосходят «классический» каскад, однако детали работы зависят от конкретного чипсета.

Часть номеров прерываний в машине зарезервирована для стандартных устройств на материнской плате, а часть может использоваться внешними устройствами.

В приведенной ниже таблице указаны стандартные прерывания:

Номер

Применение

Комментарий

0

Timer

Системный таймер, 18.2 раза в секунду

1

Keyboard

При нажатии и отпускании клавиш

2

Cascade

Второй контроллер

3

COM2, COM4

4

COM1, COM3

5

LPT2

6

Diskette

7

LPT1

8

RTC

CMOS Real Time Clock

9

Свободно

10

Video

Обратный ход луча. Редко используется

11

Мышь PC/2

12

Свободно

13

Math

Прерывание сопроцессора

14

IDE1

15

IDE2

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

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

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

Соседние файлы в папке Введение в вычислительную технику.