APIC (APIC)

Перейти к навигации Перейти к поиску

APIC (англ. Advanced Programmable Interrupt Controller) — улучшенный программируемый контроллер прерываний. Он был добавлен в процессоре Pentium.

Усовершенствованный программируемый контроллер прерываний (APIC) был разработан Intel ® для обеспечения возможности обработки большого количества прерываний, чтобы каждое из них можно было программно направить на определенный набор доступных ЦП (и чтобы это можно было соответствующим образом изменить), для поддержки связи между процессорами и устранения необходимости в большом количестве устройств, использующих одну линию прерывания[1].

APIC использовался в многоядерных/многопроцессорных системах, начиная с Intel Pentium (ядро P54). Начиная с этого процессора каждый следующий снабжался интегрированным Local APIC'ом.

Преимущества расширенного контроллера прерываний:

  • возможность реализации межпроцессорных прерываний — сигналов от одного процессора другому
  • поддержка до 256 входов IRQ, в отличие от 8-16 на классической IBM PC
  • крайне быстрый доступ к регистрам текущего приоритета прерывания и подтверждения прерывания. Контроллер прерываний, совместимый с IBM PC, исполнялся как устройство шины ISA с очень медленным доступом к его регистрам (порт 0x20).

APIC поддерживался в ОС Windows начиная с Windows NT 4.0.

В настоящий момент наблюдается тенденция к отказу от IO APIC, как и проводников IRQ, и переходу на Message Signaled Interrupts.

APIC состоит из двух модулей: англ. local APIC и англ. IO APIC:

  • LOCAL APIC — располагается в ядре процессора, если система многоядерная — в каждом ядре.
  • I/O APIC — контроллер, расположенный на системной плате, обычно как часть микросхем обрамления процессора (например, микросхема Intel 82489DX).

Проводники IRQ от устройств подсоединены к IO APIC. Для общения local APIС и IO APIC, а также local APIC различных ядер друг с другом, используется FSB-шина многопроцессорной системы, также используемая для соединения процессоров и контроллера памяти. Варианты использования передней шины для общения APIC между собой — отдельные проводники, или же специальные типы транзакций — менялись от поколения к поколению процессоров Pentium и Core.

Необходимость в новом контроллере, способном заменить программируемый контроллер прерываний (PIC), возникла с появлением следующих проблем:

  • Появление многоядерных систем, требующих распределения прерываний по ядрам.
  • Резкий рост числа подключенных устройств, превышающее количество свободных IRQ процессора.
  • Скорость передачи данных устройств, превышающая скорость работы PIC.

Современные IOAPIC поддерживают 24 аппаратных прерывания, хотя количество линий может достигать до 256 линий IRQ.

Расширенный контроллер прерываний впервые начал применяться на двухпроцессорных системных платах из-за более сложной обработки прерываний от различных устройств (не совсем очевидно, какой из процессоров должен реагировать на прерывание). Затем расширенный контроллер прерываний начал использоваться и на однопроцессорных системах — устройствам становится доступно большее число прерываний (24 вместо 16), плюс, несколько плат расширения могут разделять между собой общее прерывание.

Возможны сложные стратегии управления прерываниями на основе APIC, когда системные APIC соединены иерархически и доставляют прерывания на ЦП с балансировкой нагрузки, а не нацелены на конкретный ЦП или набор ЦП[1].

Литература

[править | править код]

Примечания

[править | править код]
  1. 1 2 3.5. Advanced Programmable Interrupt Controller Red Hat Enterprise Linux for Real Time 7 (англ.). Red Hat Customer Portal. Дата обращения: 6 сентября 2022. Архивировано 30 июля 2021 года.