Обработка прерываний в персональной ЭВМ
Микропроцессоры типа х86 имеют два входа запросов внешних аппаратных прерываний:
- NMI - немаскируемое прерывание, используется обычно для запросов прерываний по нарушению питания;
- INT - маскируемое прерывание, запрос от которого можно программным образом замаскировать путем сброса флага IF в регистре флагов.
Рис. 4. Структура контроллера приоритетных прерываний
Единственный вход запроса маскируемых прерываний микропроцессора не позволяет подключить к нему напрямую сигналы запросов от большого числа различных внешних устройств, которые входят в состав современного компьютера: таймера, клавиатуры, "мыши", принтера, сетевой карты и т.д. Для их подключения к одному входу INT микропроцессора используется контроллер приоритетных прерываний (рис. 4). Его функции:
- восприятие и фиксация запросов прерываний от внешних устройств;
- определение незамаскированных запросов среди поступивших запросов;
- проведение арбитража: выделение наиболее приоритетного запроса из незамаскированных запросов в соответствии с установленным механизмом назначения приоритетов;
- сравнение приоритета выделенного запроса с приоритетом запроса, который в данный момент может обрабатываться в микропроцессоре, формирование сигнала запроса на вход INT микропроцессора в случае, если приоритет нового запроса выше;
- передача в микропроцессор по шине данных типа прерывания, выбранного в процессе арбитража, для запуска соответствующей программы - обработчика прерывания; это действие выполняется по сигналу разрешения прерывания INTA от микропроцессора, который выдается в случае, если прерывания в регистре флагов микропроцессора не замаскированы (IF=1).
Переход к соответствующему обработчику прерывания осуществляется (в реальном режиме работы микропроцессора) посредством таблицы векторов прерываний. Эта таблица (рис. 5) располагается в самых младших адресах оперативной памяти, имеет объем 1 Кбайт и содержит значения сегментного регистра команд (CS) и указателя команд (IP) для 256 обработчиков прерываний.
Рис. 5. Структура таблицы векторов прерываний
Обращение к элементам таблицы осуществляется по 8-разрядному коду - типу
прерывания (таблица 1)
Таблица 14.1. | |
Тип прерывания | Источник прерывания |
Деление на 0 | |
Пошаговый режим выполнения программы | |
Запрос по входу NMI | |
· · · | |
Запрос по входу IRQ0 (системный таймер) | |
Запрос по входу IRQ1 (контроллер клавиатуры) | |
· · · | |
Отсутствие сегмента в оперативной памяти | |
· · · | |
Пользовательское прерывание |
Различные источники задают тип прерывания по-разному:
- программные прерывания вводят его изнутри процессора или содержат его в номере команды INT n;
- аппаратные маскируемые прерывания вводят его от контроллера приоритетных прерываний по шине данных;
немаскируемому аппаратному прерыванию назначен тип 2.