在Linux 系统中,每个能发送中断信号的硬件设备控制器都有一根输出线,与中断控制器 8259A 的输入引脚相连,如下图 设备1 和 设备 3 所示。图中有两个 8259A 芯片共同组成中断控制器,每个芯片有 8 个输入端,一共可以扩展到 15 个中断源,多数情况下,15 个也是不够用的,因此系统会让多个设备共有一条中断线或动态分配中断线。
为什么各有 8 个输入端,最后只能扩展到 15 个中断源呢?
为了保证两个芯片连起来成为一个中断控制器,其中一个芯片的一个输入端要接另一个芯片。
上图描述了中断控制器如何在设备和 CPU 之间传递中断请求。通过输入端接收中断信号,随后通过 INT 引脚向 CPU 发送中断信号请求,同时,输入端产生的 IRQ 号,经内部处理后IRQ 号转换成中断向量号,放入某端口,等待 CPU 响应时来取。
知道了中断信号的传输情况,再看看中断发生之前需要做些什么。