ショーンの答えは理解しやすいです。ただし、ここではもっと完全なものにしようと思います。
CPUのIRQピンは、ほとんどの場合、周辺機器に直接接続されていませんが、プログラム可能な割り込みコントローラー(PIC、Intel 8259Aなど)を介して接続されています。これは、大規模なデバイスのファンアウトや異種の割り込みフォーマット(PCIeのようにピンベースとメッセージベース)の処理に役立ちます。
lspciの最新バージョンを実行すると、次のような情報が出力されます。
Interrupt: pin A routed to IRQ 26
ここでpin A
は、OPの11として、物理ピンです。これは、PCIデバイスによって保存され、割り込みコントローラー間で交換するためにハードウェアによって使用されるものです。LDPから:
PCIセットアップコードは、割り込みコントローラーのピン番号を各デバイスのPCI構成ヘッダーに書き込みます。PCI割り込みルーティングトポロジの知識とデバイスのPCIスロット番号、および使用しているPCI割り込みピンを使用して、割り込みピン(またはIRQ)番号を決定します。デバイスが使用する割り込みピンは固定されており、このデバイスのPCI構成ヘッダーのフィールドに保持されます。この情報は、この目的のために予約されている割り込みラインフィールドに書き込まれます。デバイスドライバーが実行されると、この情報を読み取り、それを使用してLinuxカーネルからの割り込みの制御を要求します。
IRQ 26
OPの19は、カーネルコードとCPUが処理するものです。Linux Documentation / IRQ.txtによると:
IRQ番号は、ハードウェア割り込みソースについて話すために使用されるカーネル識別子です。通常、これはグローバルirq_desc配列へのインデックスですが、linux / Interrupt.hが実装するものを除いて、詳細はアーキテクチャ固有です。
したがって、PCIは最初にデバイスから割り込みを受信し、割り込みソースをIRQ番号に変換して、CPUに通知します。CPUはIRQ番号を使用して、割り込み記述子テーブル(IDT)を調べ、正しいソフトウェアハンドラーを見つけます。
参照:
http://www.tldp.org/LDP/tlk/dd/interrupts.html
http://www.brokenthorn.com/Resources/OSDevPic.html