外部中断
本章节可能会涉及数电相关知识~
Last updated
本章节可能会涉及数电相关知识~
Last updated
内核的一个主要功能是处理硬件外设的 I/O,CPU 速度一般比硬件外设快很多。多任务系统中,CPU 可以在外设进行准备时处理其他任务,在外设完成准备时处理 I/O;I/O 处理方式包括:轮询、中断、DMA 等。基于中断机制可以解决轮询处理硬件外设 I/O 时效率低下的问题。
下面举一个例子,如果有1-10号共10个打印机正在打印,其中6号已经打印完成,等待CPU交给它新的打印任务。如果采用轮询方法,就要从1号打印机开始询问它有没有打印完,然后询问2号打印机有没有打印完......直到询问到6号打印机,这时把新的打印任务交给它。而如果采用中断机制的话,CPU不必费力去挨个询问各个打印机,CPU只需要干好自己的活,等打印完成的打印机叫它(产生IRQ)即可。
用生活中的事情类比就是:班级进行一次小测,一共50个人,先答完先交卷。如果轮询的话,老师就要到每个同学的座位前问有没有答完,再收卷,效率很差;如果老师坐在自己的座位上批改试卷,而答完的同学主动把试卷交到老师手上(向老师发送IRQ请求),老师的批改效率会提高很多。
这里又涉及到了硬件软件的交互!还记得吗,在《磁盘读写》章节,我们也提到了磁盘和CPU交互的内容!下面我们看看外部中断控制器是如何跟CPU交互的。
中断的来源除了来自于硬件自身的 NMI 中断(即前面提到的异常,包括软件故障等,如果屏蔽的话系统会崩溃)和来自于软件的INT n指令造成的软件中断之外,还有来自于外部硬件设备的中断(外部中断),这些中断是可屏蔽的。这些中断也都通过PIC(Programmable Interrupt Controller,可编程中断控制器)进行控制,并传递给CPU。在IBM PC极其兼容机上所使用的PIC是Intel 8259A芯片。8259A芯片的功能非常强大,但在实验中,我们只用到比较简单的功能。
一个8259A芯片的可以接最多8个中断源,但由于可以将2个或多个8259A芯片级连(cascade),并且最多可以级连到9个,所以最多可以接64个中断源。早期,IBM PC/XT只有1个8259A,但设计师们马上意识到这是不够的,于是到了IBM PC/AT,8259A被增加到2个以适应更多外部设备的需要,其中一个被称作Master,另外一个被称作Slave,Slave以级连的方式连接在Master上。如今绝大多数的PC都拥有两个8259A,这样最多可以接收15个中断源。
如果你对8259A的具体结构和设置感兴趣,请自行搜索相关资料。在本次实验,我们已经帮你设置好了。但你还是要看看8259A的结构:
NMI(non-maskable interrupt),就是不可屏蔽的中断,它与标志寄存器的 IF 没有关系,NMI 的中断向量号为 2(可以在后面的手册的中断向量表里看见)。仅有几个特定的事件才能引起非屏蔽中断,例如硬件故障以及或是掉电。
而可屏蔽中断与 CPU 的关系是通过可编程中断控制器 8259A 建立起来的。那如何让这些设备发出的中断请求和中断向量对于起来呢?
在 BIOS 初始化 8259A 的时候,IRQ0-IRQ7被设置为对应的向量号0x08
-0x0F
,但是我们发现在保护模式下, 这些向量号已经被占用了,因此我们不得不重新设置主从8259A(两片级联的8259A)。
设置的细节你不需要详细了解, 你只需要知道我们将外部中断重新设置到了0x20
-0x2F
号中断上(共15个中断)。