cat /proc/interrupts
显示了一堆 IRQ,例如NMI
和LOC
。输出中的每行注释给出了清晰的解释,但如果它们没有数字 IRQ 编号,那么 x86 CPU 如何根据中断描述符表中的条目响应它们?
答案1
非数字条目/proc/interrupts
对应于特定于架构的、与设备无关的中断。
在 x86 上,IDT 布局描述于arch/x86/include/asm/irq_vectors.h
:
- 矢量 0 ... 31:系统陷阱和异常 - 硬编码事件
- 矢量 32 ... 127:设备中断
- Vector 128:遗留 int80 系统调用接口
- 矢量 129 ... LOCAL_TIMER_VECTOR-1
- 矢量 LOCAL_TIMER_VECTOR ... 255 :特殊中断
特定于架构的中断由 0 到 31 和 129 到 255 的 IDT 条目处理,本地定时器中断是后一个范围中的第一个中断。所以当你在 中看到 0 时/proc/interrupts
,它是 IDT 条目 32;当你看到 NMI 时,它是条目 2;等等。IDT本身设置在arch/x86/kernel/idt.c
。