Введение
Аппаратный сигнал, отправляемый процессору для прерывания выполняющейся программы и обработки ввода.
В компьютере запрос на прерывание (или IRQ) – это аппаратный сигнал, отправляемый процессору, который временно останавливает выполняемую программу и позволяет специальной программе, обработчику прерываний, запуститься вместо неё. Аппаратные прерывания используются для обработки событий, таких как получение данных от модема или сетевой карты, нажатия клавиш или движения мыши. Линии прерывания часто идентифицируются индексом в формате IRQ, за которым следует число. Например, в семействе программируемых контроллеров прерываний (PIC) Intel 8259 имеется восемь входов прерывания, обычно называемых IRQ0 – IRQ7. В компьютерных системах на основе x86, использующих два таких PIC, объединенный набор линий называется IRQ0 – IRQ15. Технически эти линии называются IR0 – IR7, а линии на шине ISA, к которым они исторически подключались, называются IRQ0 – IRQ15 (хотя исторически, с увеличением количества аппаратных устройств, общее возможное количество прерываний увеличивалось за счет каскадных запросов, когда один из номеров IRQ перенаправлялся на другой набор или наборы пронумерованных IRQ, обрабатываемых одним или несколькими последующими контроллерами). Более новые x86-системы интегрируют расширенный программируемый контроллер прерываний (APIC), соответствующий архитектуре Intel APIC. Эти APIC поддерживают программный интерфейс для до 255 физических аппаратных линий IRQ на APIC, при этом типичная система поддерживает только около 24 общих аппаратных линий. В первые годы развития персональных компьютеров управление IRQ часто было задачей пользователя. С появлением устройств Plug and Play это было упрощено благодаря автоматической настройке.
Обзор
При работе с аппаратным обеспечением персонального компьютера, при установке и удалении устройств, система использует запросы на прерывание. В системе BIOS существуют настройки по умолчанию, которые распознаются операционной системой. Эти настройки по умолчанию могут быть изменены опытными пользователями. Современная технология Plug and Play не только снизила необходимость заботиться об этих настройках, но и практически устранила ручную настройку.
x86 IRQ
Ранние ПК, использующие процессоры Intel 8086/8088, имели только один PIC и, следовательно, были ограничены восемью прерываниями. Это было расширено до двух PIC с появлением ПК на базе 286. Как правило, в системах, использующих Intel 8259 PIC, используется 16 IRQ. IRQ от 0 до 7 обслуживаются одним Intel 8259 PIC, а IRQ от 8 до 15 – вторым Intel 8259 PIC. Первый PIC, главный, является единственным, который напрямую сигнализирует процессору. Второй PIC, ведомый, вместо этого передает сигнал главному по своей линии IRQ 2, а главный передает сигнал процессору. Таким образом, для аппаратного обеспечения доступно только 15 линий запроса прерываний. В системах APIC с IOAPIC обычно доступно 24 IRQ, а дополнительные 8 IRQ используются для маршрутизации PCI-прерываний, чтобы избежать конфликтов между динамически настроенными PCI-прерываниями и статически настроенными ISA-прерываниями. В ранних системах APIC с 16 IRQ или только с контроллерами прерываний Intel 8259, линии прерываний PCI маршрутизировались к 16 IRQ с использованием таблицы PIR (PCI interrupt routing), интегрированной в BIOS. Операционные системы, такие как Windows 95 OSR2, могли использовать таблицу PIR для обработки маршрутизации PCI IRQ; позже таблица PIR была вытеснена ACPI. В системах APIC с MSI обычно доступно 224 прерывания. Самый простой способ просмотреть эту информацию в Windows – использовать Диспетчер устройств или Системную информацию (msinfo32.exe). В Linux отобразить соответствие IRQ можно, выполнив команду cat /proc/interrupts или используя утилиту procinfo.
Конфликты
В первых IBM-совместимых персональных компьютерах конфликт IRQ – это часто встречавшаяся аппаратная ошибка, возникающая, когда два устройства пытаются использовать один и тот же запрос прерывания (или IRQ) для передачи сигнала прерывания программируемому контроллеру прерываний (PIC). PIC ожидает запросы прерывания только от одного устройства на линию, поэтому одновременная отправка сигналов IRQ от нескольких устройств по одной линии обычно вызывает конфликт IRQ, который может привести к зависанию компьютера. Например, если в систему добавляется модемная карта расширения и ей назначается IRQ4, который традиционно зарезервирован для последовательного порта 1, это, скорее всего, вызовет конфликт IRQ. Изначально IRQ 7 часто использовался для звуковой карты, но позже стали использовать IRQ 5, поскольку было обнаружено, что IRQ 7 создает помехи для порта принтера (LPT1). Последовательные порты часто отключают, чтобы освободить линию IRQ для другого устройства. IRQ 2/9 – традиционная линия прерывания для порта MPU 401 MIDI, однако это конфликтует с системным прерыванием управления ACPI (SCI жестко привязано к IRQ9 на чипсетах Intel); это означает, что ISA-карты MPU 401 с жестко заданным IRQ 2/9 и драйверы устройств MPU 401 с жестко заданным IRQ 2/9 не могут использоваться в режиме прерываний на системе с включенной ACPI. В некоторых случаях два устройства ISA могли совместно использовать один и тот же IRQ, если они не использовались одновременно. Для решения этой проблемы более поздняя шина PCI обеспечивает возможность совместного использования IRQ. PCI Express не имеет физических линий прерываний и использует прерывания с сигналом сообщения (Message Signaled Interrupts, MSI) для операционных систем, если они поддерживаются.