
Подпрограмма
обслуживания
Основная
программа
работы МП
Возврат управления
Прерывание от УВВ
Основная
программа
работы МП
Передача управления
Прерывания
Рис. 17. Обслуживание прерывания в МП-системе
Для повышения производительности системы необходимо освободить процессор от опроса готовности ВУ к обмену. Эту функцию берет на себя контроллер прерываний ВУ. Получив команду ввода-вывода, контроллер передает ее ВУ и следит за временем ее выполнения. По окончании действий в ВУ (печати, перфорации и т. п.) контроллер посылает в процессор сигнал требования прерывания, получает очередную команду ввода-вывода, и действия повторяются. Процессор в этом случае, передав в контроллер очередную команду ввода-вывода, может выполнять другие операции основной программы до получения сигнала требования прерывания. Получив его, он обслуживает это прерывание, то есть формирует и выдает в контроллер очередную команду ввода-вывода, а затем возвращается к выполнению прерванной основной программы.
Ввод-вывод по прерываниям, однако, требует усложнения аппаратных средств – создания системы прерываний.
Структура таблицы векторов прерываний для ип от Intel имеет вид
Обращение к элементам таблицы осуществляется по 8-разрядному коду - типу прерывания
. |
|
Тип прерывания |
Источник прерывания |
0 |
Деление на 0 |
1 |
Пошаговый режим выполнения программы |
2 |
Запрос по входу NMI |
· · · |
|
8 |
Запрос по входу IRQ0 (системный таймер) |
9 |
Запрос по входу IRQ1 (контроллер клавиатуры) |
· · · |
|
11 |
Отсутствие сегмента в оперативной памяти |
· · · |
|
255 |
Пользовательское прерывание |
На уровне электроники внешние прерывания организованы следующим образом. Имеется контроллер прерываний (микросхема i8259А), выполняющий несколько важных функций: получение сигналов на прерывания от внешних устройств, маскировка (т. е. запрещение обработки) некоторых прерываний, арбитраж приоритетов прерываний и формирование очереди запросов на прерывание. Контроллер имеет три 8-разрядных регистра и 8 входов от внешних устройств, называемых IRQ0, IRQ1, ...IRQ7 (Interrupt ReQuest), выход INT на процессор (соединяемый со входом процессора INTR) и вход обратной связи от процессора INTA, по которому процессор подтверждает начало обработки прерывания.
Запрос на прерывание, поступающий на некоторый вход IRQ, устанавливает в 1 соответствующий бит 8-разрядного регистра фиксации запросов прерываний (IRR). Если соответствующее прерывание не замаскировано 8-разрядным регистром маски (IMR может программироваться) и если процессор не занят обработкой прерывания высшего или равного приоритета (что определяется 8-разрядным регистром ISR), запрос на прерывание поступает с выхода INT на вход прерываний процессора INTR, и процессор подтверждает по линии INTA.
Один контроллер прерываний имеет 8 входов (IRQ), чего явно недостаточно для обслуживания внешних устройств современного компьютера (таймер, часы реального времени, клавиатура, гибкий и жесткий диски, мышь, последовательные и параллельные порты и проч.).
Однако несколько контроллеров прерываний могут быть включены последовательно. На современных компьютерах (начиная с 286) один (ведущий) контроллер прерываний подключен непосредственно к процессору, а второй (ведомый) своим выходом INT подключен ко входу IRQ2 ведущего контроллера. Итого получается 15 входов прерываний от IRQ0 до IRQ 15 (IRQ2 не может быть использован).
При подаче сигнала на прерывание от контроллера к процессору по линии INTR-INT, одновременно по линиям данных из контроллера прерываний в процессор поступает номер вектора прерывания, который образуется путем сложения IRQ с некоторым базовым номером, который присваивается ВIOSом контроллеру в процессе загрузки (значения по умолчанию 08h для ведущего контроллера и 70h для ведомого). Таким образом, например, номер вектора прерывания для клавиатуры будет 08+1=9h, для жесткого диска 70h+6=76h.
Контроллер прерываний допускает перепрограммирование для установки различных режимов формирования очереди запросов, изменения приоритетов прерываний, изменения базовых номеров контроллеров. Такое перепрограммирование осуществляется через два байтовых порта 20h и 21h. По умолчанию IRQ отдельного контроллера имеют приоритеты в соответствии с их номерами (IRQ0 – наивысший, IRQ7 – наинизший).
Структура контроллера приоритетных прерываний имеет вид
Пример каскадного включения двух контроллеров прямого доступа к памяти