『阿男的Linux内核世界』*17 什么是硬件中断*
这次我们讲讲硬件中断,硬件中断是CPU接受到的硬件发来的信号,比如我们使用键盘敲入一个字符,这个信号就是要发给CPU来处理。那么为了接受到这种信号,肯定是要在键盘和CPU之间有某种连接才可以。
现在的键盘一般是通过USB接口连接的,USB接口连着USB控制器,USB控制器连接着CPU吗?其实在CPU的组成里,有一个专门接受这些硬件发来的信号,也就是"硬件中断",的芯片,叫做APIC
,全称Advanced Programmable Interrupt Controller
^1,就是用来接受各种硬件发来的信号用的。然后这个芯片直接连接CPU,这样硬件发来的信号就可以发给CPU了。
这个芯片有Intel自己生产的,也有别的厂家生产的,目前Intel架构下在用的型号叫做8259,长这个样子:
这个芯片很多厂家都在做,不只是Intel自己。
通过这个芯片,CPU就可以接收各种硬件发过来的信号,这个信号里面肯定得包含足够CPU处理的信息。比如键盘的输入信号,肯定要告诉CPU,用户按下的是哪个键,有了这个信息CPU才能处理细节。
操作系统会有各种硬件的驱动程序,负责处理CPU接收到的硬件中断。首先CPU知道发过来信号的硬件具体是哪一个,比如,是键盘还是鼠标,这样才可以让操作系统相关的驱动程序来处理。其次,CPU要给驱动程序提供硬件中断里面包含的具体信息,比如键盘按下了哪一个键,这样键盘的驱动程序就可以收到这个信息并作处理。
我们之前学习了IDT
,知道了操作系统有一个中断处理程序的入口列表,还知道IDTR
是Intel架构的CPU提供给我们的指向IDT
的搞权限寄存器,因此明白CPU是怎样根据硬件中断的编号,来执行具体的中断处理程序。而硬件中断的处理程序则是一般由各个硬件的驱动程序提供。
关于硬件中断处理在Kernel里面的具体设计,我们后续再讲。这篇就先讲这么多。