中断屏蔽技术

来源:互联网 发布:面试美工需要注意什么 编辑:程序博客网 时间:2024/05/18 08:15

1、中断屏蔽技术:主要用于多重中断

多重中断:(中断嵌套)当CPU正在执行某个中断服务程序时,另一个中断源又提出了新的中断请求,而CPU又响应了这个新的请求,暂时停止正在运行的服务程序,转去执行新的中断服务程序,这称为多重中断,又称中断嵌套。

如果CPU对新的请求不予响应,待执行完当前的服务程序后再响应,即为单重中断

中断系统若要具有处理多重中断的功能,必须具备各项条件。

--1提前设置“开中断指令:一般情况下,CPU进入中断周期后,由中断隐指令自动将EINT“0”,即关中断.

这就意味着CPU在执行中断服务程序中禁止响应新的中断请求CPU若想再次响应中断请求,必须开中断,

这一任务通常由中断服务程序中的开中断指令实现。多重中断示意图如下:

           

--2优先级别高的中断源有权中断优先级别低的中断源。

在满足1)的前提下,只有优先级别更高的中断源请求才可以中断比其级别低的中断服务程序,反之则不然。

为了保证级别低的中断源不干扰比其级别高的中断源的中断处理过程,可采用屏蔽技术。

例如,有A、B、C、D 4个中断源,其优先级按A->B->C->D由高向低次序排列。在CPU执行主程序期间,同时出现了B和C

的中断请求,由于B级别高于C,故首先执行B的服务程序。当B的服务程序执行完返回主程序后,由于C请求未撤销,故CPU

又再去执行C的中断服务程序。若此时又出现了D的请求,因为D级别低于C,故CPU不响应。当C的服务程序执行完返回主

程序后再去执行D的服务程序。若此时又出现了A请求,因A级别高于D,故CPU暂停对D级中断服务程序的执行,转去执行

A级中断服务程序,等A级服务程序执行完后,再去执行D级中断服务程序。上述中断处理示意图如下:

     

2、屏蔽技术

1)屏蔽触发器和屏蔽字:程序中断接口电路中,完成触发器D,中断请求触发器INTR和屏蔽触发器MASK

当中断源被屏蔽时(MASK=1),此时即使D=1,中断查询信号到来时刻只能将INTR“0”CPU接收不到该中断源的中断请求,即它被屏蔽。

若该中断源未被屏蔽(MASK=0),当设备工作已完成时(D=1),中断查询信号则将INTR“1”,表示该中断源向CPU发出中断请求,

该信号送至排队器进行优先级判断。显然,对于每个中断请求触发器就有一个屏蔽触发器,将所有屏蔽触发器组合在一起,便构成了一个

屏蔽寄存器。屏蔽寄存器的内容称为屏蔽字。屏蔽字与中断源的优先级是一一对应的。

2)屏蔽技术可改变优先等级:严格地说,优先级包含响应优先级处理优先级。响应优先级是指CPU响应各中断源请求的优先次序,这种次序

往往是硬件线路已设置好的,不便于改动。处理优先级是指CPU实际对各中断源请求的处理优先次序。如果不采用屏蔽技术,响应的优先次序就

是处理的优先次序。采用了屏蔽技术后,可以改变CPU处理各中断源的优先等级,从而改变CPU执行程序的轨迹。

例如,A、B、C、D 这4个中断源的优先级别按A->B->C->D降序排列,根据这一次序,CPU执行程序的轨迹如下图所示。当4个中断源同时提出

请求时,处理次序与响应次序一致。

      

-- 在不改变CPU响应中断的次序下,通过改变屏蔽字可以改变CPU处理中断的次序。例如,更改上述4个中断源的屏蔽字将其处理次序更改为:

A->D->C->B。如下表,表中原屏蔽字对应A->B->C->D的响应顺序,新屏蔽字对应A->D->C->B的处理顺序。

 

在同样中断请求的情况下,CPU执行程序的轨迹发生了变化,如下图:

 

-- CPU在运行程序的过程中,若A、B、C、D 4个中断源同时提出请求,按照中断级别的高低,CPU首先响应并处理A中断源的请求,由于A的

屏蔽字是1111,屏蔽了所有的中断源,故A程序可以全部执行完,然后回到主程序。由于B、C、D的中断请求还未响应,而B的响应优先级高于

其他,所以CPU响应B的请求,进入B的中断服务程序。在B的服务程序中,由于设置了新的屏蔽字0100,即A、C、D可打断B,而A程序已执行

完,C的响应优先级高于D,于是CPU响应C,进入C的服务程序。在C的服务程序中,由于设置了的屏蔽字0110,即A、D可打断C,A已执行

于是CPU响应D,执行D的中断服务程序。D一直做完后回到C程序,C程序执行完后,回到B程序。B程序做完后,回到主程序。

3)屏蔽技术的其他作用

屏蔽技术还能给程序控制带来更大的灵活性。例如,在浮点运算中,当程序员估计到执行某段程序时可能出现“阶上溢”,但又不希望因“阶上溢”而

使机器停机,为此可设一屏蔽字,使对应“阶上溢”的屏蔽位为“1”,这样,即使出现“阶上溢”,机器也不停机。

0 0