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