IRQ(Interrupt Request、割り込み要求)番号は、コンピューターシステムにおいて、デバイスが CPU に割り込みを要求するための識別番号です。デバイスが処理の途中で CPU を必要とする場合、IRQ を使用してその要求を送信します。これにより、CPU はデバイスからの割り込みを受信し、対応する処理を実行します。
例えば、キーボードがユーザーからの入力を受け付けると、キーボードコントローラーは CPU に割り込みを要求し、CPU はその割り込みを処理して入力を取得します。
IRQ 番号は通常、0 から 15 までの整数で表され、それぞれ異なるデバイスや機能に割り当てられます。IRQ 番号は、ハードウェアリソースを効率的に管理し、複数のデバイスが同時に CPU にアクセスすることを可能にします。
一般的な IRQ 番号の割り当ては以下の通りです。これは古典的なものであり、最新のハードウェア等では異なる可能性があります。また、BIOS の設定等でも変化する可能性があります。
IRQ 番号 | デバイス |
---|---|
0 | システムタイマー |
1 | キーボード |
2 | IRQ9 とのカスケード接続用 |
3 | シリアルポート 2 |
4 | シリアルポート 1 |
5 | パラレルポート 2 またはサウンドカード |
6 | フロッピーディスクコントローラー |
7 | パラレルポート 1 |
8 | リアルタイムクロック |
9 | IRQ2 へのリダイレクト |
10 | 空き |
11 | 空き |
12 | PS/2 マウス |
13 | 数値演算コプロセッサー |
14 | IDE ハードディスクコントローラー(プライマリ) |
15 | IDE ハードディスクコントローラー(セカンダリ) |
実際に IRQ 番号を確認してみます。以下は KVM 上の Ubuntu VM の情報となりますが、既に前述の表には含まれない番号がたくさんあります。ですが、1, 4, 8, 9, 12 の情報は一応あっているように見えますね。
myadmin@ubuntu:~$ cat /proc/interrupts
CPU0 CPU1
1: 0 9 IO-APIC 1-edge i8042
4: 0 1471 IO-APIC 4-edge ttyS0
8: 0 0 IO-APIC 8-edge rtc0
9: 0 0 IO-APIC 9-fasteoi acpi
12: 15 0 IO-APIC 12-edge i8042
16: 0 0 IO-APIC 16-fasteoi i801_smbus
21: 0 6075 IO-APIC 21-fasteoi virtio3, virtio4
22: 0 135 IO-APIC 22-fasteoi snd_hda_intel:card0
24: 0 0 PCI-MSI 16384-edge PCIe PME, aerdrv
25: 0 0 PCI-MSI 18432-edge PCIe PME, aerdrv
26: 0 0 PCI-MSI 20480-edge PCIe PME, aerdrv
27: 0 0 PCI-MSI 22528-edge PCIe PME, aerdrv
28: 0 0 PCI-MSI 24576-edge PCIe PME, aerdrv
29: 0 0 PCI-MSI 26624-edge PCIe PME, aerdrv
30: 0 0 PCI-MSI 28672-edge PCIe PME, aerdrv
31: 0 0 PCI-MSI 30720-edge PCIe PME, aerdrv
32: 0 0 PCI-MSI 32768-edge PCIe PME, aerdrv
33: 0 0 PCI-MSI 34816-edge PCIe PME, aerdrv
34: 0 0 PCI-MSI 36864-edge PCIe PME, aerdrv
35: 0 0 PCI-MSI 38912-edge PCIe PME, aerdrv
36: 0 0 PCI-MSI 40960-edge PCIe PME, aerdrv
37: 0 0 PCI-MSI 43008-edge PCIe PME, aerdrv
38: 0 0 PCI-MSI 1572864-edge virtio1-config
39: 0 13 PCI-MSI 1572865-edge virtio1-virtqueues
40: 0 0 PCI-MSI 2097152-edge virtio2-config
41: 241323 0 PCI-MSI 2097153-edge virtio2-req.0
42: 0 238487 PCI-MSI 2097154-edge virtio2-req.1
43: 0 0 PCI-MSI 524288-edge virtio0-config
44: 486516 818790 PCI-MSI 524289-edge virtio0-input.0
45: 722599 419336 PCI-MSI 524290-edge virtio0-output.0
46: 0 0 PCI-MSI 1048576-edge xhci_hcd
47: 0 0 PCI-MSI 1048577-edge xhci_hcd
48: 0 0 PCI-MSI 1048578-edge xhci_hcd
49: 0 0 PCI-MSI 512000-edge ahci[0000:00:1f.2]
50: 178173 200807 PCI-MSI 3670016-edge nvidia
NMI: 0 0 Non-maskable interrupts
LOC: 15922584 14263230 Local timer interrupts
SPU: 0 0 Spurious interrupts
PMI: 0 0 Performance monitoring interrupts
IWI: 21 14 IRQ work interrupts
RTR: 0 0 APIC ICR read retries
RES: 218664 246952 Rescheduling interrupts
CAL: 8392230 8351494 Function call interrupts
TLB: 194069 188631 TLB shootdowns
TRM: 0 0 Thermal event interrupts
THR: 0 0 Threshold APIC interrupts
DFR: 0 0 Deferred Error APIC interrupts
MCE: 0 0 Machine check exceptions
MCP: 1199 1199 Machine check polls
HYP: 1 1 Hypervisor callback interrupts
ERR: 0
MIS: 0
PIN: 0 0 Posted-interrupt notification event
NPI: 0 0 Nested posted-interrupt event
PIW: 0 0 Posted-interrupt wakeup event
以下は、PCI, PCIe デバイスについての補足説明です。
- PCI デバイスは、ほとんどの場合、IRQ を持ちますが、すべての PCI デバイスが IRQ を持つわけではありません。一部の PCI デバイスは、システム内の他のリソース(メモリリソースや I/O ポート等)に対するアクセスを通じて割り込みを発生させることがあります。
- PCI Express ( PCIe ) バスを使用するデバイスは、MSI ( Message Signaled Interrupts ) と呼ばれる割り込み方式を使用することがあります。MSI は、IRQ の代わりに PCIe デバイス自体が割り込みを生成するため、より効率的な割り込み処理を可能にします。そのため、MSI をサポートする PCIe デバイスは、従来の IRQ とは異なる割り当て方式を持つことがあります。
LPIC IRQ 番号