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

Контроллер прерываний Intel 8259A

8259A — это программируемый контроллер прерываний (Programmable Interrupt Controller, PIC), разработанный компанией Intel в конце 1970-х годов. Предназначен для управления запросами на прерывание от периферийных устройств в системах на базе микропроцессоров Intel x86. 8259A обрабатывает до восьми линий запросов прерываний (IRQ), может каскадироваться для увеличения количества обрабатываемых линий (до 64 при использовании девяти микросхем) и предоставляет гибкие возможности по приоритезации и маскированию прерываний. Микросхема стала стандартом де-факто для IBM PC и совместимых компьютеров, вплоть до замены на более современные контроллеры (APIC) в многопроцессорных системах.

История

Разработка 8259A велась в конце 1970-х годов как часть семейства микросхем поддержки для микропроцессора Intel 8086. Первые версии контроллера (8259) были выпущены в 1978 году. Усовершенствованная версия 8259A появилась в 1981 году и использовалась в IBM PC/XT. В IBM PC/AT (1984) для поддержки 16 линий прерываний два контроллера 8259A были соединены каскадно (master и slave). Эта конфигурация стала стандартной для всех последующих IBM-совместимых компьютеров.

До появления 8259A управление прерываниями в микропроцессорных системах часто реализовывалось дискретной логикой или более простыми контроллерами, что ограничивало гибкость и производительность. 8259A предложил программируемую архитектуру, позволяющую настраивать приоритеты, маскировать отдельные прерывания и управлять режимами обработки. Микросхема выпускалась в 28-выводном корпусе DIP (Dual In-line Package) и изготавливалась по n-МОП технологии.

С появлением многопроцессорных систем и шины PCI в 1990-х годах возможностей 8259A стало недостаточно. В частности, он не поддерживал распределение прерываний между несколькими процессорами (SMP) и имел ограниченное количество линий. На смену пришёл Advanced Programmable Interrupt Controller (APIC), который стал частью чипсетов и процессоров. Тем не менее, в режиме совместимости (legacy mode) эмуляция 8259A сохранялась вплоть до появления UEFI и современных операционных систем, таких как Windows 10 и Linux.

Архитектура и принцип работы

Основные компоненты

8259A состоит из нескольких функциональных блоков, работающих совместно:

  • Каскадный буфер/компаратор (Cascade Buffer/Comparator) — управляет каскадированием нескольких контроллеров.
  • Регистр запросов прерываний (Interrupt Request Register, IRR) — хранит состояние активных запросов на прерывание (IRQ0–IRQ7). При поступлении сигнала на соответствующую линию устанавливается бит в IRR.
  • Регистр обслуживаемых прерываний (In-Service Register, ISR) — хранит информацию о прерываниях, которые в данный момент обслуживаются процессором. Бит устанавливается после подтверждения прерывания (INTA) и сбрасывается по команде EOI (End of Interrupt).
  • Регистр маски прерываний (Interrupt Mask Register, IMR) — позволяет программно отключать (маскировать) отдельные линии прерываний. Установленный бит в IMR блокирует соответствующий запрос в IRR.
  • Блок управления приоритетами (Priority Resolver) — определяет, какой из активных запросов имеет наивысший приоритет и должен быть передан процессору. Приоритеты могут быть фиксированными (IRQ0 — наивысший, IRQ7 — низший) или циклическими (round-robin).
  • Блок управления (Control Logic) — координирует работу всех блоков, формирует сигналы запроса прерывания (INT) и подтверждения (INTA), а также управляет чтением/записью регистров через системную шину.
  • Буфер данных (Data Bus Buffer) — обеспечивает обмен данными между 8259A и процессором.
  • Регистры управления чтением/записью (Read/Write Logic) — декодирует адреса портов ввода-вывода и управляет передачей данных.

Процесс обработки прерывания

  1. Запрос: Периферийное устройство выставляет сигнал на одной из линий IRQ. Если соответствующий бит в IMR не установлен, запрос фиксируется в IRR.
  2. Приоритезация: Блок управления приоритетами выбирает запрос с наивысшим приоритетом среди активных.
  3. Запрос к процессору: Контроллер выставляет сигнал INT (Interrupt Request) на соответствующую ножку процессора.
  4. Подтверждение: Процессор, если прерывания разрешены (флаг IF в EFLAGS), завершает текущую инструкцию и выставляет сигнал INTA (Interrupt Acknowledge) на шину. 8259A получает два импульса INTA.
  5. Выдача вектора: При первом импульсе INTA контроллер фиксирует выбранный запрос в ISR и сбрасывает соответствующий бит в IRR. При втором импульсе INTA контроллер выдает на шину данных 8-битный вектор прерывания (номер), который процессор использует для поиска адреса обработчика в таблице векторов прерываний (Interrupt Vector Table, IVT).
  6. Обработка: Процессор переходит к выполнению обработчика прерывания.
  7. Завершение: В конце обработчика выполняется команда End of Interrupt (EOI), которая сбрасывает бит в ISR, позволяя обрабатывать следующие прерывания. EOI может быть специфическим (для конкретного IRQ) или неспецифическим (для текущего).

Режимы работы

8259A поддерживает несколько режимов, программируемых через управляющие слова:

  • Режим фиксированного приоритета (Fixed Priority): IRQ0 — наивысший приоритет, IRQ7 — низший. После обслуживания прерывания приоритеты не меняются.
  • Циклический приоритет (Rotating Priority): После обслуживания прерывания его приоритет становится низшим, а остальные сдвигаются. Это предотвращает «голодание» низкоприоритетных устройств.
  • Режим специального маскирования (Special Mask Mode): Разрешает прерывания от устройств с более низким приоритетом, пока обслуживается текущее (полезно для вложенных прерываний).
  • Режим буферизации (Buffered Mode): Используется в системах с шинными формирователями (буферами) данных. Контроллер управляет сигналом SP/EN (Slave Program/Enable Buffer).
  • Автоматический EOI (Automatic EOI): Контроллер автоматически сбрасывает бит в ISR после второго импульса INTA, без необходимости программной команды EOI.
  • Режим чтения (Read Mode): Позволяет считывать содержимое IRR, ISR и IMR через порты ввода-вывода.

Программирование 8259A

Порты ввода-вывода

В IBM PC/AT два контроллера 8259A занимают следующие порты:

  • Master (ведущий): порт 0x20 (команды/данные) и 0x21 (маска/данные).
  • Slave (ведомый): порт 0xA0 (команды/данные) и 0xA1 (маска/данные).

Управляющие слова

Программирование осуществляется через два типа управляющих слов:

  • ICW (Initialization Command Words): Набор из 1–4 слов, задающих базовую конфигурацию (вектор, режим работы, каскадирование). ICW1 и ICW2 обязательны, ICW3 и ICW4 — опциональны.
  • OCW (Operation Command Words): Набор из 3 слов, управляющих текущей работой (маскирование, EOI, чтение состояния). OCW1 задаёт маску, OCW2 — команды EOI и циклический приоритет, OCW3 — команды чтения IRR/ISR и установку специального маскирования.

Пример инициализации (для IBM PC/AT)

```c // Инициализация master (порт 0x20) outb(0x20, 0x11); // ICW1: каскадный режим, требуются ICW4 outb(0x21, 0x08); // ICW2: базовый вектор 0x08 (IRQ0 -> int 0x08) outb(0x21, 0x04); // ICW3: slave подключён к IRQ2 outb(0x21, 0x01); // ICW4: режим 8086, нормальный EOI

// Инициализация slave (порт 0xA0) outb(0xA0, 0x11); // ICW1 outb(0xA1, 0x70); // ICW2: базовый вектор 0x70 (IRQ8 -> int 0x70) outb(0xA1, 0x02); // ICW3: идентификатор slave = 2 outb(0xA1, 0x01); // ICW4 ```

Каскадирование

Для увеличения количества линий прерываний несколько контроллеров 8259A могут соединяться каскадно. Один контроллер выступает в роли ведущего (master), остальные — ведомые (slave). Выход INT ведомого подключается к одному из входов IRQ ведущего. При возникновении прерывания на ведомом, ведущий получает запрос и передаёт его процессору, а затем выясняет, какой именно ведомый выдал прерывание, через трёхбитный идентификатор (C0–C2). В IBM PC/AT используется два контроллера: master (IRQ0–IRQ7) и slave (IRQ8–IRQ15), подключённый к IRQ2 master.

Применение

8259A использовался во всех IBM PC и совместимых компьютерах до середины 1990-х годов. Он обеспечивал обработку прерываний от:

  • Системного таймера (IRQ0)
  • Клавиатуры (IRQ1)
  • Контроллера прямого доступа к памяти (IRQ2, каскад)
  • Последовательных портов (COM1/COM3 — IRQ4, COM2/COM4 — IRQ3)
  • Параллельного порта (LPT1 — IRQ7)
  • Контроллера гибких дисков (IRQ6)
  • Жёсткого диска (IRQ14/IRQ15) и других устройств ISA/PCI.

Недостатки и ограничения

  • Ограниченное количество линий: 8 на один контроллер, 16 в стандартной конфигурации IBM PC/AT.
  • Отсутствие поддержки SMP: Не может распределять прерывания между несколькими процессорами.
  • Фиксированный приоритет: В стандартном режиме IRQ0 всегда имеет наивысший приоритет, что может быть неэффективно.
  • Программная сложность: Требует сложной инициализации и управления через порты ввода-вывода.
  • Не поддерживает сообщения прерываний (MSI): Современные шины (PCI Express) используют MSI, что невозможно с 8259A.

Наследие

Несмотря на устаревание, 8259A остаётся важной частью истории вычислительной техники. Его архитектура заложила основы для управления прерываниями в x86-системах. В современных компьютерах функции 8259A эмулируются в чипсетах (например, Intel PIIX) или программно в режиме совместимости. Операционные системы, такие как Linux, поддерживают работу с 8259A через драйвер i8259 в legacy-режиме.

Источники

  • Intel Corporation. 8259A Programmable Interrupt Controller Datasheet. 1988.
  • Intel Corporation. Intel 82C59A CMOS Programmable Interrupt Controller Datasheet. 1992.
  • IBM Corporation. IBM PC/AT Technical Reference. 1984.
  • Shanley, Tom. ISA System Architecture. Addison-Wesley, 1995.
  • Tanenbaum, Andrew S. Structured Computer Organization. 6th ed., Pearson, 2012.

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

На главную BFOmetr →