x86计算机的 CPU 为中断只提供了两条外接引脚:NMI 和 INTR。
1. 可编程中断控制器8259A
8259A 只适合单 CPU 的情况。
每个CPU都有一个本地APIC,所有本地APIC连接到IO APIC。主要是收集来自 I/O 装置的 Interrupt 信号且在当那些装置需要中断时发送信号到本地 APIC,系统中最多可拥有 8 个 I/O APIC。
一个本地定时设备以及为本地中断保留的两条额外的 IRQ 线 LINT0 和 LINT1。所有本地 APIC 都连接到 I/O APIC,形成一个多级 APIC 系统,如图 2 所示。
使用方式:
1) 作为一种标准的 8259A 工作方式。本地 APIC 被禁止,外部 I/O APIC 连接到 CPU,两条 LINT0 和 LINT1 分别连接到 INTR 和 NMI 引脚。
2) 作为一种标准外部 I/O APIC。本地 APIC 被激活,且所有的外部中断都通过 I/O APIC 接收。
辨别一个系统是否正在使用 I/O APIC,可以在命令行输入如下命令:
# cat /proc/interrupts CPU0 0: 90504 IO-APIC-edge timer 1: 131 IO-APIC-edge i8042 8: 4 IO-APIC-edge rtc 9: 0 IO-APIC-level acpi 12: 111 IO-APIC-edge i8042 14: 1862 IO-APIC-edge ide0 15: 28 IO-APIC-edge ide1 177: 9 IO-APIC-level eth0 185: 0 IO-APIC-level via82cxxx ...如果输出结果中列出了 IO-APIC,说明您的系统正在使用 APIC。如果看到 XT-PIC,意味着您的系统正在使用 8259A 芯片。