Открыть сервис

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

Программируемый контроллер прерываний (ПКП, англ. Programmable Interrupt Controller, PIC) — это микросхема или функциональный блок, предназначенный для управления запросами на прерывание от периферийных устройств к центральному процессору (ЦП) в компьютерных системах. ПКП принимает сигналы от нескольких источников, определяет их приоритет, маскирует (блокирует) нежелательные прерывания и передаёт процессору вектор прерывания — номер, указывающий на обработчик данного события. Основная функция ПКП — обеспечение эффективного и упорядоченного обслуживания аппаратных прерываний, что позволяет процессору своевременно реагировать на внешние события, не тратя ресурсы на постоянный опрос устройств (polling).

История

До появления программируемых контроллеров прерываний в ранних компьютерных системах (например, в мейнфреймах 1960-х годов) управление прерываниями часто реализовывалось на уровне логики, встроенной в процессор или в системную плату. С развитием микропроцессоров и увеличением числа периферийных устройств потребовалось стандартизированное и гибкое решение.

Первым массовым и широко известным программируемым контроллером прерываний стал Intel 8259A, выпущенный в 1976 году. Он был разработан для использования с микропроцессорами Intel 8080 и 8085, а затем стал стандартным компонентом в архитектуре IBM PC/XT (1981) и последующих совместимых компьютерах. В IBM PC/AT использовался каскад из двух микросхем 8259A, что позволяло обрабатывать до 15 уровней прерываний (одна микросхема — 8 каналов, вторая — 8, но один канал использовался для соединения).

В 1990-х — 2000-х годах, с появлением более производительных процессоров и шин (PCI, PCI Express), функции ПКП стали интегрироваться в чипсеты материнских плат (например, в южный мост). В современных системах на базе архитектуры x86-64 (в том числе в процессорах Intel Core и AMD Ryzen) аппаратное управление прерываниями осуществляется через Advanced Programmable Interrupt Controller (APIC) — более сложный и масштабируемый контроллер, встроенный в процессор и чипсет. Тем не менее, классический 8259A остаётся эмулируемым в режиме совместимости для поддержки устаревшего программного обеспечения.

Устройство и принцип работы

Основные компоненты программируемого контроллера прерываний (на примере Intel 8259A):

  • Входы запросов на прерывание (IRQ0–IRQ7) — линии, по которым периферийные устройства подают сигнал запроса.
  • Регистр запросов на прерывание (IRR) — хранит состояние всех активных запросов.
  • Регистр обслуживания прерываний (ISR) — хранит информацию о том, какое прерывание в данный момент обрабатывается.
  • Регистр маски прерываний (IMR) — позволяет программно блокировать (маскировать) отдельные линии.
  • Логика приоритетов — определяет, какой запрос будет обработан первым при одновременном поступлении нескольких.
  • Логика каскадирования — позволяет соединять несколько микросхем для увеличения числа каналов.

Последовательность обработки прерывания

  1. Периферийное устройство подаёт сигнал на одну из линий IRQ.
  2. Если прерывание не замаскировано (бит в IMR равен 0), контроллер устанавливает соответствующий бит в IRR.
  3. Логика приоритетов выбирает запрос с наивысшим приоритетом (обычно IRQ0 — самый высокий, IRQ7 — самый низкий).
  4. Контроллер посылает процессору сигнал INTR (запрос прерывания).
  5. Процессор завершает текущую команду, сохраняет контекст и отправляет сигнал INTA (подтверждение прерывания).
  6. По получении INTA контроллер выставляет на шину данных вектор прерывания — 8-битный номер, который процессор использует для поиска адреса обработчика в таблице векторов прерываний.
  7. Контроллер устанавливает бит в ISR, соответствующий обрабатываемому запросу, и сбрасывает бит в IRR.
  8. После завершения обработчика (команда IRET) процессор отправляет команду EOI (End of Interrupt), и контроллер сбрасывает бит в ISR, разрешая приём новых прерываний.

Приоритеты и маскирование

В ПКП реализована фиксированная схема приоритетов: IRQ0 — наивысший, IRQ7 — наинизший. Программист может изменить схему на циклическую (для равномерного распределения нагрузки) или полностью переопределить приоритеты через программные команды. Маскирование позволяет временно отключать обработку прерываний от конкретных устройств, что используется, например, для предотвращения повторных прерываний во время критических участков кода.

Классификация

По архитектуре

  • Классические ПКП (8259A и аналоги) — отдельные микросхемы, работающие в режиме Master/Slave. Использовались в системах на базе x86 до внедрения APIC.
  • APIC (Advanced Programmable Interrupt Controller) — интегрированный контроллер, входящий в состав современных процессоров и чипсетов. Поддерживает до 255 прерываний, распределённые приоритеты, многопроцессорность и сообщения о прерываниях по шине (MSI — Message Signaled Interrupts).
  • I/O APIC — контроллер, расположенный в чипсете, который принимает прерывания от устройств и передаёт их в локальный APIC процессора.
  • Встроенные в микроконтроллеры ПКП — упрощённые версии, часто с фиксированным числом каналов (например, в ARM Cortex-MNVIC (Nested Vectored Interrupt Controller), поддерживающий до 240 прерываний с возможностью вложенности).

По способу передачи вектора

  • Векторные — контроллер передаёт процессору номер прерывания (вектор), по которому процессор напрямую обращается к обработчику. Пример: 8259A, APIC.
  • Невекторные — контроллер только сигнализирует о прерывании, а процессор опрашивает устройства для определения источника. Используются в некоторых простых системах.

Применение

Программируемые контроллеры прерываний применяются практически во всех компьютерных и встраиваемых системах, где требуется обработка событий от периферийных устройств:

  • Персональные компьютеры — управление прерываниями от клавиатуры, мыши, жёстких дисков, сетевых карт, звуковых карт и других устройств.
  • Серверы — обработка прерываний от контроллеров дисковых массивов, сетевых интерфейсов, систем управления питанием.
  • Встраиваемые системы и микроконтроллеры — в промышленных контроллерах, бытовой технике, автомобильной электронике, медицинском оборудовании.
  • Операционные системы — драйверы устройств используют ПКП для регистрации обработчиков прерываний и управления приоритетами.

Примеры

  • Intel 8259A — классический 8-канальный ПКП. Использовался в IBM PC/XT, PC/AT и совместимых компьютерах до середины 1990-х годов. В режиме каскада (две микросхемы) обеспечивал 15 каналов.
  • Intel 8259 — предшественник 8259A, с меньшей гибкостью.
  • AMD 9519A — аналог 8259A, использовался в некоторых клонах IBM PC.
  • APIC (Intel 82093AA) — I/O APIC, входивший в состав чипсетов Intel 440BX и более поздних.
  • NVIC (ARM Cortex-M) — встроенный контроллер прерываний в микроконтроллерах ARM, поддерживающий до 240 прерываний с программируемыми приоритетами и вложенностью.

Критика и ограничения

Классические ПКП (8259A) имели ряд недостатков:

  • Фиксированное число каналов — только 8 (или 15 в каскаде), что ограничивало возможности расширения в системах с большим количеством устройств.
  • Низкая производительность — при большом количестве прерываний процессор тратил время на обработку EOI и переключение контекста.
  • Отсутствие поддержки многопроцессорности — в системах с несколькими процессорами требовалось сложное распределение прерываний.
  • Зависимость от шины — передача вектора по шине данных создавала задержки.

Современные APIC и NVIC лишены этих недостатков, однако сохраняют программную совместимость с классическим ПКП для поддержки устаревшего ПО.

Интересные факты

  • В IBM PC/AT использовалась схема каскадирования, при которой вторая микросхема 8259A подключалась к линии IRQ2 первой. Это привело к тому, что в современных системах IRQ2 часто зарезервирован и не используется.
  • В операционной системе MS-DOS обработчики прерываний (например, INT 08h — таймер) были реализованы на основе ПКП, что делало систему зависимой от аппаратного контроллера.
  • В Linux и Windows для управления прерываниями используются драйверы, которые взаимодействуют с APIC через ACPI (Advanced Configuration and Power Interface).

Источники

  • Intel 8259A Programmable Interrupt Controller Datasheet, Intel Corporation, 1988.
  • IBM PC/AT Technical Reference, IBM Corporation, 1984.
  • Advanced Programmable Interrupt Controller (APIC) Specification, Intel Corporation, 1996.
  • ARM Cortex-M3 Technical Reference Manual, ARM Limited, 2006.
  • Таненбаум Э., Остин Т. Архитектура компьютера. — 6-е изд. — СПб.: Питер, 2013.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →