Усовершенствованный программируемый контроллер прерываний (APIC)

Приведенное описание относится к программируемым контроллерам прерываний, сконструированным для однопроцессорных систем. Если система включает в себя единственный процессор, выходная линия главного контроллера прерываний может быть напрямую соединена с INTR-входом процессора.
Чтобы в полной степени эксплуатировать параллелизм симметричной многопроцессорной архитектуры, крайне важно иметь возможность доставлять прерывания до любого процессора в системе. Кроме того, все современные процессоры 80×86 имеют локальный контроллер APIC. Каждый локальный контроллер APIC содержит 32-разрядные регистры, внутренние часы, локальный таймер и две дополнительные IRQ-линии, LINT 0 и LINT 1, зарезервированные для прерываний локального контроллера APIC. Все локальные контроллеры APIC соединены с внешним контроллером I/O APIC, образуя многоконтроллерную APIC-систему.
APIC — шина соединяет «фронтальный» контроллер I/O APIC с локальными контроллерами APIC. Линии IRQ, идущие от устройств, соединены с контроллером I/O APIC, который, таким образом, выступает в качестве маршрутизатора по отношению к локальным контроллерам. На материнских платах Pentium III и более ранних процессоров шина APIC была последовательной трехлинейной шиной, а начиная с модели Pentium 4, шина APIC реализована на базе системной шины. Впрочем, поскольку шина APIC и ее сообщения не видны программному обеспечению, мы не будем вдаваться в дальнейшие подробности.
Контроллер I/O APIC включает в себя 24 линии IRQ, таблицу переадресации прерываний на 24 записи, программируемые регистры и блок для отправки и приема APIC-сообщений через APIC. В отличие от IRQ-выводов чипа 8259А, приоритет прерывания не связан с номером линии.
статическое распределение — сигнал IRQ доставляется локальным контроллерам APIC, указанным в соответствующей записи таблицы переадресации. Прерывание направляется одному конкретному процессору, подмножеству процессоров или всем процессорам сразу (широковещательный режим);
динамическое распределение — сигнал IRQ доставляется локальному APIC-контроллеру процессора, выполняющему процесс с наименьшим приоритетом.
У каждого локального контроллера APIC есть программируемый регистр приоритета задачи (TPR), который используется при вычислении приоритета текущего процесса.
Межпроцессорные прерывания (IPI-прерывания) являются важнейшим элементом симметричной многопроцессорной архитектуры. Они активно используются операционной системой Linux для обмена сообщениями между процессорами.
Многие современные однопроцессорные системы имеют чип I/O APIC, который может быть сконфигурирован двумя различными способами:
— как стандартный внешний программируемый контроллер прерываний 825 9А, подключенный к процессору. Локальный контроллер APIC в этом случае отключен, а локальные IRQ — линии LINT 0 и LINT 1 сконфигурированы как выводы INTR и NMI соответственно;
— как стандартный внешний контроллер I/O APIC. Локальный контроллер APIC включен, и все внешние прерывания принимаются через контроллер I/O APIC.