肖恩的回答很容易理解。不过在这里我会尽量让它更完整。
CPU 的 IRQ 引脚几乎总是不直接连接到外围设备,而是通过可编程中断控制器(PIC,例如 Intel 8259A)。这有助于处理大型设备扇出和异构中断格式(基于引脚与基于消息的 PCIe)。
如果您运行最新版本的 lspci,它将打印如下信息
Interrupt: pin A routed to IRQ 26
这里,pin A
作为 OP 中的 11,是物理引脚。这是由 PCI 设备保存并由硬件用于在中断控制器之间进行交换的东西。自民党:
PCI 设置代码将中断控制器的引脚号写入每个设备的 PCI 配置头中。它使用其对 PCI 中断路由拓扑的了解以及设备 PCI 插槽号和它正在使用的 PCI 中断引脚来确定中断引脚(或 IRQ)编号。设备使用的中断引脚是固定的,并保存在该设备的 PCI 配置头中的一个字段中。它将此信息写入为此目的而保留的中断线字段。当设备驱动程序运行时,它会读取此信息并使用它向 Linux 内核请求对中断的控制。
IRQ 26
因为 OP 中的 19 是内核代码和 CPU 处理的东西。根据 Linux 文档/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