
コンピュータにおいて、割り込み要求(IRQ)はプロセッサに送信されるハードウェア信号であり、実行中のプログラムを一時的に停止し、代わりに特別なプログラム(割り込みハンドラ)を実行できるようにします。ハードウェア割り込みは、モデムやネットワークカードからのデータ受信、キーの押下、マウスの動き などのイベントを処理するために使用されます。
割り込みラインは、多くの場合、 IRQの後に番号が続く形式のインデックスで識別されます。たとえば、Intel 8259ファミリのプログラマブル割り込みコントローラ(PIC) には、一般にIRQ0からIRQ7と呼ばれる 8 つの割り込み入力があります。これらのPIC を2 つ使用するx86ベースのコンピュータシステムでは、結合されたラインのセットはIRQ0からIRQ15と呼ばれます。技術的には、これらのラインはIR0からIR7と命名され、歴史的にこれらのラインが接続されていたISAバス上のラインはIRQ0からIRQ15と命名されています(ただし歴史的には、ハードウェアデバイスの数が増加するにつれて、IRQ 番号の 1 つを 1 つ以上の後続のコントローラによって処理される別の IRQ セットにカスケードすることによって、割り込みの合計可能数が増加しました)。
新しいx86システムには、 Intel APICアーキテクチャに準拠したAdvanced Programmable Interrupt Controller(APIC)が統合されています。各Local APICは通常最大255本のIRQラインをサポートし、各I/O APICは通常最大24本のIRQラインをサポートします。[1]
パーソナルコンピューティングの黎明期には、IRQ管理はユーザーの懸念事項でした。プラグアンドプレイデバイスの導入により、自動設定によってこの問題は軽減されました。[2]
パーソナルコンピュータのハードウェアを操作する際、デバイスの取り付けや取り外しを行う際、システムは割り込み要求に依存します。システムBIOSにはデフォルト設定があり、オペレーティングシステムによって認識されます。これらのデフォルト設定は、上級ユーザーであれば変更できます。最新のプラグアンドプレイ技術は、これらの設定を気にする必要がなくなっただけでなく、手動による設定も事実上不要になりました。
Intel 8086/8088プロセッサを搭載した初期のPCにはPICが1つしか搭載されておらず、割り込みは8つに制限されていました。286ベースのPCの登場により、PICは2つに拡張されました。
通常、 Intel 8259 PICを使用するシステムでは、16個のIRQが使用されます。IRQ 0~7は1個のIntel 8259 PICによって管理され、IRQ 8~15は2個目のIntel 8259 PICによって管理されます。1個目のPIC(マスター)はCPUに直接信号を送る唯一のPICです。2個目のPIC(スレーブ)はIRQ 2ラインを介してマスターに信号を送り、マスターはその信号をCPUに渡します。したがって、ハードウェアで使用できる割り込み要求ラインは15本のみです。
IOAPIC搭載のAPICシステムでは、通常24個のIRQが利用可能で、残りの8個のIRQはPCI割り込みのルーティングに使用され、動的に設定されたPCI割り込みと静的に設定されたISA割り込みの競合を回避します。初期のAPICシステムでは、16個のIRQしかなかったり、Intel 8259割り込みコントローラしか搭載されていなかったため、PCI割り込みラインはBIOSに統合されたPIR(PCI割り込みルーティング)テーブルを使用して16個のIRQにルーティングされていました。Windows 95 OSR2などのオペレーティングシステムでは、 PCI IRQステアリングの処理にPIRテーブルが使用される場合があります。[3] [4]その後、PIRテーブルはACPI _PRT(PCIルーティングテーブル)プロトコルに置き換えられました。MSI搭載のAPICシステムでは、通常224個の割り込みが利用可能です。[5]
Windowsでこの情報を確認する最も簡単な方法は、デバイスマネージャーまたはシステム情報(msinfo32.exe)を使用することです。Linuxではcat /proc/interrupts、ユーティリティを実行するか使用することでIRQマッピングを確認できますprocinfo。
初期のIBM互換パーソナルコンピュータでは、IRQ競合はかつてよく見られたハードウェアエラーでした。これは、2つのデバイスが同じ割り込み要求(IRQ)を使用してプログラマブル割り込みコントローラ(PIC)に割り込み信号を送信しようとしたときに発生するものでした。PICは1つのラインにつき1つのデバイスからの割り込み要求のみを想定しているため、複数のデバイスが同じラインでIRQ信号を送信すると、通常、IRQ競合が発生し、コンピュータがフリーズする可能性があります。
例えば、モデム 拡張カードがシステムに追加され、伝統的にシリアルポート1 に割り当てられている IRQ4 に割り当てられた場合、IRQ の競合が発生する可能性があります。 当初、サウンドカード の使用には IRQ 7 が一般的な選択肢でしたが、後に IRQ 7 がプリンターポート( LPT1 ) に干渉することが判明したため、IRQ 5 が使用されるようになりました。シリアルポートは、 IRQ ラインを他のデバイスに解放するために頻繁に無効にされます。 IRQ 2/9 は MPU-401 MIDI ポートの伝統的な割り込みラインですが、これはACPIシステム制御割り込みと競合します (Intel チップセットでは SCI は IRQ9 にハードワイヤードされています)。[6]つまり、IRQ 2/9 がハードワイヤードされた ISA MPU-401カード、および IRQ 2/9 がハードコードされた MPU-401 デバイスドライバーは、ACPI が有効なシステムでは割り込み駆動モードで使用できません。
状況によっては、2つのISAデバイスが同時に使用されない限り、同じIRQを共有できる場合があります。この問題を解決するために、PCIバスではIRQの共有が可能になりました。PCI Expressには物理的な割り込みラインがなく、利用可能な場合はメッセージシグナル割り込み(MSI)をオペレーティングシステムに提供します。