Диаграмма о ходе выполнения процедуры обработки прерывания

Запрос прерывания (англ. 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

править

Ведомый PIC

править

Конфликты

править

В ранних совместимых с 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.

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

править

Ссылки

править

📚 Artikel Terkait di Wikipedia

APIC

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

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

Контроллер прерываний (англ. Programmable Interrupt Controller, PIC) — микросхема или встроенный блок процессора, отвечающий за возможность последовательной

PIC (значения)

микроконтроллеры гарвардской архитектуры. PIC — сокр. от англ. programmable interrupt controller — контроллер прерываний. PIC — сокр. от англ. photonic integrated

Чипсеты Intel 800 серии

памяти англ. Graphics Memory Controller Hub — GMCH) и южного моста (концентратор контроллера ввода-вывода англ. I/O Controller Hub — ICH). Системы с интегрированной

Intel 8259

Тэхника, 1990. — С. 384. — ISBN 5-335-00168-2. Стр.81 8259A Programmable Interrupt Controller  (англ.) — Описание 8259А от Intel Gilluwe, Frank van. The

USB

устройства данных придумали метод interrupt, который позволяет опрашивать устройство с заданным периодом. Метод interrupt широко применяется для опроса клавиатур