3.1.2        外设可屏蔽中断

    Intel x86通过两片中断控制器8259A来响应15个外中断源,每个8259A可管理8个中断源。第一级(称主片)的第二个中断请求输入端,与第二级8259A(称从片)的中断输出端INT相连,如图3.1所示。我们把与中断控制器相连的每条线叫做中断线,要使用中断线,就要进行中断线的申请,也就是IRQ(Interrupt ReQuirement ),因此我们也常把申请一条中断线称为申请一个IRQ或者是申请一个中断号。IRQ线是从0开始顺序编号的;因此,第一条IRQ线通常表示成IRQ0IRQn的缺省向量是n+32;如前所述,IRQ和向量之间的映射可以通过中断控制器端口来修改。


3.1 级连的 8259A的中断机构

并不是每个设备都可以向中断线上发中断信号的,只有对某一条确定的中断线拥有了控制权,才可以向这条中断线上发送信号。由于计算机的外部设备越来越多,所以15条中断线已经不够用了,中断线是非常宝贵的资源,所以只有当设备需要中断的时候才申请占用一个IRQ,或者是在申请IRQ时采用共享中断的方式,这样可以让更多的设备使用中断。                                        

中断控制器8259A执行如下操作:

    1.监视中断线,检查产生的中断请求(IRQ)信号。

    2.如果在中断线上产生了一个中断请求信号:

        a.把接受到的IRQ信号转换成一个对应的向量。

b.把这个向量存放在中断控制器的一个I/O端口,从而允许CPU通过数据总线读此向量。

        c.把产生的信号发送到CPUINTR引脚——即发出一个中断。

d.等待,直到CPU确认这个中断信号,然后把它写进可编程中断控制器的一个I/O端口;此时,清INTR线。

    3.返回到第一步。

  

对于外部I/O请求的屏蔽可分为两种情况,一种是从CPU的角度,也就是清除eflag的中断标志位(IF),当IF=0时,禁止任何外部IO的中断请求,即关中断;一种是从中断控制器的角度,因为中断控制器中有一个8位的中断屏蔽寄存器(IMR),每位对应8259A中的一条中断线,如果要禁用某条中断线,则把IRM相应的位置1,要启用,则置0