Запрос прерывания

Запрос прерывания (англ. interrupt request, IRQ) — это аппаратный сигнал, посланный процессору, чтобы он приостановил работу и позволил выполнить специальную программу, обработчик прерывания. Аппаратные прерывания используются для обработки событий, таких как получение данных от модема или сетевой платы, нажатия клавиши или движения мыши.

Линии прерываний часто обозначаются индексом в формате IRQ с последующим номером. Например, в семействе программируемых контроллеров прерывани (англ. Programmable Interrupt Controller, PIC) Intel 8259 имеется восемь входов прерываний, обычно называемых IRQ0 - IRQ7. В компьютерных системах на базе x86, использующих два таких PIC, объединённый набор линий обозначается как IRQ0 - IRQ15. Технически эти линии называются IR0 - IR7, а линии на шине ISA, к которым они исторически подключались, называются IRQ0 - IRQ15 (хотя исторически, по мере увеличения числа аппаратных устройств, общее возможное количество прерываний увеличивалось за счёт каскадирования запросов, когда один из номеров IRQ каскадировался на другой набор или наборы пронумерованных IRQ, обрабатываемых одним или несколькими последующими контроллерами).

В современных системах x86 используется усовершенствованный программируемый контроллер прерываний (англ. Advanced Programmable Interrupt Controller, APIC) , соответствующий архитектуре Intel. Каждый локальный APIC обычно поддерживает до 255 запросов прерываний (IRQ), а каждый I/O APIC — до 24 линий 24 IRQ[1].

На заре персональных компьютеров управление IRQ часто вызывало затруднения у пользователей. С появлением устройств plug and play эта проблема была решена благодаря автоматической настройке[2].

Обзор

При работе с аппаратным обеспечением персонального компьютера, при установке и извлечении устройств, система использует запросы прерывания. Существуют стандартные настройки, которые конфигурируются в системном BIOS и распознаются операционной системой. Эти стандартные настройки могут быть изменены опытными пользователями[3]. Современная технология plug and play не только снизила необходимость беспокоиться об этих настройках, но и практически исключила ручную конфигурацию.

x86 IRQ

В ранних персональных компьютерах с процессорами Intel 8086/8088 использовался один контроллер прерываний (PIC), а потому было ограничение в восемь прерываний. С появлением ПК на базе процессоров серии 286 количество контроллеров увеличилось до двух.

Обычно в системах с контроллерами Intel 8259 PIC используется 16 линий запросов прерываний (IRQ). IRQ с номерами от 0 до 7 управляются одним контроллером Intel 8259 PIC, а линии с номерами от 8 до 15 — вторым. Первый PIC (ведущий) напрямую передаёт сигналы центральному процессору. Второй PIC (ведомый) передаёт сигналы ведущему по своей линии IRQ 2, а ведущий уже перенаправляет их процессору. Таким образом, для аппаратного обеспечения доступно всего 15 линий запросов прерываний.

В APIC с системой IOAPIC[a] обычно доступно 24 прерывания IRQ. Дополнительные 8 IRQ используются для маршрутизации прерываний PCI, что позволяет избежать конфликтов между динамически настраиваемыми прерываниями PCI и статически настроенными прерываниями ISA. В ранних системах APIC с 16 IRQ или лишь с контроллерами прерываний Intel 8259 линии прерываний PCI направлялись на эти 16 IRQ с помощью таблицы маршрутизации прерываний PIR (PCI interrupt routing), встроенной в BIOS[4]. Операционные системы, такие как Windows 95 OSR2, могли использовать таблицу PIR для обработки прерываний PCI IRQ[5][6]. Позднее таблица PIR была заменена протоколом ACPI _PRT (PCI routing table). В APIC с системой MSI обычно доступно 224 аппаратных прерываний[7].

Самый простой способ просмотра этой информации в Windows — использовать диспетчер устройств или утилиту «сведения о системе» (msinfo32.exe). В Linux сопоставления IRQ можно просмотреть, выполнив команду cat /proc/interrupts или с помощью утилиты procinfo[3].

Ведущий PIC

  • IRQ 0 – системный таймер (не может быть изменён)
  • IRQ 1 – клавиатура на порту PS/2 (не может быть изменён)
  • IRQ 2 – контроллер прерываний 8259; каскадные сигналы от IRQ 8–15
  • IRQ 3 – контроллер последовательного порта для COM 2 (совместно используется с последовательным портом 4, если он присутствует)
  • IRQ 4 – контроллер последовательного порта для COM 1 (совместно используется с последовательным портом 3, если он присутствует)
  • IRQ 5 – параллельный порт 3 или ISA звуковая карта
  • IRQ 6 – контроллер гибких дисков
  • IRQ 7 – параллельный порт 1 (совместно используется с параллельным портом 2 если он присутствует). Он может быть совместно использован со второй ISA звуковой картой при аккуратном управлении портом[3].

Ведомый PIC

  • IRQ 8 – часы реального времени (англ. real-time clock, RTC)
  • IRQ 9 – прерывание системного управления ACPI на микросхемах Intel[8]. Может использоваться периферийными устройствами (использование зависит от ОС)
  • IRQ 10 – Прерывание оставлено для использования периферийными устройствами (например, SCSI или NIC)
  • IRQ 11 – Прерывание оставлено для использования периферийными устройствами (например, SCSI или NIC)
  • IRQ 12 – мышь на порту PS/2
  • IRQ 13 – сопроцессор или встроенный математический сопроцессор или межпроцессорное прерывание (использование зависит от ОС)
  • IRQ 14 – основной канал ATA (интерфейс ATA обычно обслуживает жёсткие диски и CD приводы)
  • IRQ 15 – второй ATA канал[3][9]

Конфликты

В ранних совместимых с IBM персональных компьютерах конфликт IRQ был распространённой аппаратной ошибкой, возникавшей, когда два устройства пытались использовать один и тот же запрос на прерывание (IRQ) для сигнализации о прерывании программируемому контроллеру прерываний (PIC). PIC ожидает запросы на прерывание только от одного устройства на линию, поэтому одновременная отправка сигналов IRQ несколькими устройствами по одной и той же линии обычно приводила к конфликту IRQ, который мог привести к зависанию компьютера[3][9].

Например, если карта расширения модема добавлена в систему и ей назначено прерывание IRQ4, которое традиционно назначено COM 1, то, скорее всего, вызовет конфликт IRQ. Изначально IRQ 7 часто использовался для звуковой карты, но позднее использовался IRQ 5, когда выяснилось, что IRQ 7 мешает работе порта принтера (LPT1). Последовательные порты часто отключались, чтобы освободить IRQ для других устройств. IRQ 2/9 является традиционной линией прерывания для MIDI-порта MPU-401, но она конфликтует с системой ACPI (SCI аппаратно подключено к IRQ9 на микросхеме Intel)[8]. Это означает, что карты ISA MPU-401 с аппаратно заданным IRQ 2/9 и драйверы устройств MPU-401 с жёстко заданным IRQ 2/9 не могут использоваться в режиме прерываний в системе с включённым ACPI.

В некоторых случаях два устройства ISA могли использовать один и тот же IRQ, если они не использовались одновременно. Для решения этой проблемы более поздняя шина PCI допускала совместное использование IRQ. PCI Express не имеет физических линий прерываний, а использует прерывания, инициируемые сообщениями, если они доступны.

См. также

Примечания

  1. Первой микросхемой APIC был 82489DX, это был отдельный чип, соединяющий в себе LAPIC и I/O APIC. Для создания системы из 2 процессоров нужно было 3 таких микросхемы. 2 функционировали бы как LAPIC и одна как I/O APIC. Позднее функциональность LAPIC была напрямую включена в процессоры, а функциональность I/O APIC была оформлена в чип 82093AA[4]
  1. IOAPIC - OSDev Wiki. wiki.osdev.org. Дата обращения: 7 ноября 2024.
  2. IRQ. Дата обращения: 13 сентября 2019.
  3. 1 2 3 4 5 КОНФЛИКТЫ IRQ (14 января 2026). Дата обращения: 14 января 2026.
  4. 1 2 Kostr. Прерывания от внешних устройств в системе x86. Часть 1. Эволюция контроллеров прерываний (20 ноября 2018). Дата обращения: 14 января 2026.
  5. Thompson, Thompson, 2003.
  6. Plug-and-Play-HOWTO: PCI Interrupts.
  7. Coleman, 2009, с. 19.
  8. 1 2 Jake Oshins. RE: ACPI Machines and IRQ 9 [was: Communicating with the NT developers] (30 декабря 2001). Дата обращения: 17 апреля 2014.
  9. 1 2 Как избежать зависаний компьютера или О прерываниях. Маленький ликбез (25 января 2002). Дата обращения: 14 января 2026.

Литература

  • Robert Thompson, Barbara Fritchman Thompson. 1.3.1.2. PCI Bus IRQ Steering // PC Hardware in a Nutshell. — 3rd Edition. — O’REILLY, 2003. — (In a Nutshell). — ISBN 978-0596005139.
  • James Coleman. Results, Workstation Class Platform // Reducing Interrupt Latency Through the Use of Message Signalled Interrupts. — Intel Corporation, 2009.

Дополнительная литература

  • Gilluwe, Frank van. The Undocumented PC, Second Edition, Addison-Wesley Developers Press, 1997. ISBN 0-201-47950-8
  • Tom Shanley, автор=Don Anderson. ISA System Architecture / (ed) John Swindle. — 3. — Mindshare, Inc. / Addison-Wesley Publishing Company, 1995. — ISBN 978-0-201-40996-3. [1]
  • Edward Solari. PCI & PCI-X Hardware and Software Architecture & Design. — Sixth Edition. — Research Tech Inc., 2004. — ISBN 0-9760865-0-6.

Ссылки