Аппаратные прерывания. Контроллер прерываний
Аппаратное прерывание – прерывание, выполняемое в результате запроса, поступающего от периферийного оборудования.
Контроллер прерываний – устройство, которое обрабатывает сигналы аппаратных прерываний.
В отличие от программных прерываний аппаратные всегда возникают асинхронно от выполняющейся программы. Запросы на прерывания передаются по специальным сигнальным линиям, которые называются IRQ-линиями (Interrupt Request – запрос на прерывание).
Программируемый контроллер прерываний 8259, используемый в машинах IBM AT, предназначен для обработки до 8 приоритетных уровней прерываний. Возможно каскадирование микросхем, при этом общее число уровней прерывания будет достигать 64.
В машинах IBM AT имеется 15 линий сигналов прерывания, для обслуживания которых используются ведущая и одна ведомая микросхемы. Для каскадирования используется линия IRQ2 ведущей микросхемы. Ведомой микросхеме программным методом присваивается код, равный номеру входа IRQ ведущей микросхемы, с которым соединен выход запроса прерывания INT ведомой микросхемы. Внутри микросхемы приоритет зависит от номера IRQ и задается программно.
Для идентификации прерываний различных устройств им присваивают номера от 0 до 15. По этим номерам процессор узнает, какое устройство выдает запрос на прерывание. Естественно, что при этом все будет функционировать безупречно, если с каждым конкретным устройством будет связано определенное прерывание. Действует стандартное правило: каждому компоненту ПК-системы должно быть назначено свое собственное прерывание.
Исключением являются системы, которые могут работать по методу разделения прерываний. К ним относятся шина EISA, a также системы, соответствующие спецификации Plug and Play фирмы Intel. Разумеется, трудно найти программное обеспечение, которое могло бы управлять разделением прерываний, поэтому стандартное правило «каждому устройству – свое собственное прерывание» должно выполняться (рис. 13).
Рис. 13. Распределение линий сигналов прерывания в машинах IBM AT
Приоритеты прерываний распределены в следующем порядке (по убыванию приоритета):
IRQ0 - прерывание таймера;
IRQ1 - прерывание от клавиатуры;
IRQ8 - прерывание от часов реального времени;
IRQ9 - прерывание от контроллера графической платы;
IRQ10 - зарезервированная линия;
IRQ11 - зарезервированная линия;
IRQ12 - зарезервированная линия;
IRQ13 - прерывание от математического сопроцессора;
IRQ14 - прерывание от контроллера жестких дисков;
IRQ15 - прерывание от IDE-контроллера (CD-ROM);
IRQ3 - прерывание от последовательного порта COM2;
IRQ4 - прерывание от последовательного порта COM1;
IRQ5 - зарезервированная линия;
IRQ6 - прерывание от контроллера гибких дисков;
IRQ7 - прерывание от параллельного порта (от принтера).
Часть линий прерываний жестко закреплена за устройствами определенных типов, а другая часть находится в полном распоряжении пользователя.
Даже стандартная ПК-система с самым распространенным набором компонентов предоставляет весьма ограниченный выбор свободных прерываний. С учетом звуковой, сетевой плат и дополнительного хост-адаптера SCSI список свободных прерываний исчерпывается.
Возможность свободного использования зарезервированных линий создает определенные проблемы, называемые конфликтами прерываний. Такой конфликт может возникнуть в результате ошибки пользователя в процессе установки контроллера какого-либо нового устройства: может возникнуть ситуация, когда два контроллера посылают запросы прерываний на одну и ту же линию, и процессор не знает, какое из устройств послало сигнал. Для предотвращения конфликта перед установкой нового устройства необходимо использовать специальную программу, которая определяет, какие из линий прерываний в системе свободны, а затем настроить новый контроллер на одну из свободных линий путем соответствующей установки переключателей на контроллере.