中断是现代计算机有效合理地发挥效能和提高效率的一个十分重要的功能。CPU中通常设有处理中断的机构——中断系统,以解决各种中断的共性问题。
1、中断的提出
程序查询方式虽然简单,但却存在着下列明显的缺点:
⑴ 在查询过程中,CPU长期处于踏步等待状态,使系统效率大大降低;
⑵ CPU在一段时间内只能和一台外设交换信息,其他设备不能同时工作;
⑶ 不能发现和处理预先无法估计的错误和异常情况。
2、程序中断
当CPU正常运行程序时,由于内部事件或外设请求(随机的),引起CPU暂时中止正在运行的程序,转去执行发出请求的外设(或内部事件)的服务子程序,待该服务程序执行完毕,再返回被中止的程序,这一过程称为中断。其示意图如下:
![](http://p.ananas.chaoxing.com/star3/origin/30b65eedf6967fbb19c076f4b6a01678.png)
图:程序中断方式示意图
程序中断方式的思想是:CPU在程序中安排好在某一时刻启动某一台外设,然后CPU继续执行原来程序,不需要象查询方式那样一直等待外设的准备就绪状态。一旦外设完成数据传送的准备工作时,便主动向CPU发出一个中断请求,请求CPU为自己服务。在可以响应中断的条件下,CPU暂时中止正在执行的程序,转去执行中断服务程序为中断请求者服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU仍返回原来的程序,从断点处继续执行。
3、中断与调用子程序的区别
从表面上看起来,计算机的中断处理过程有点类似于调用子程序的过程,这里现行程序相当于主程序,中断服务程序相当于子程序。
但有本质上的区别:
⑴子程序的执行是由程序员事先安排好的,而中断服务程序的执行则是由随机的中断事件引起的。
⑵子程序的执行受到主程序或上层子程序的控制,而中断服务程序一般与被中断的现行程序毫无关系。
⑶不存在同时调用多个子程序的情况,而可能发生多个外设同时请求CPU为自己服务的情况。
4、中断的基本类型
(1)自愿中断和强迫中断
自愿中断又称程序自中断,它不是随机产生的中断,而是在程序中安排的有关指令,这些指令可以使机器进入中断处理的过程,如:80x86指令系统中的软中断指令INT n。
强迫中断是随机产生的中断,不是程序中事先安排好的。当这种中断产生后,由中断系统强迫计算机中止现行程序并转入中断服务程序。
(2)内中断和外中断
内中断是指由于CPU内部硬件或软件原因引起的中断,如单步中断、溢出中断等。
外中断是指CPU以外的部件引起的中断。通常,外中断又可以分为不可屏蔽中断和可屏蔽中断两种。不可屏蔽中断优先级别较高,常用于应急处理,如掉电、主存读写校验错等;而可屏蔽中断级别较低,常用于一般I/O设备的数据传送。
3)向量中断和非向量中断
向量中断是指那些中断服务程序的入口地址是由中断事件自己提供的中断。中断事件在提出中断请求的同时,通过硬件向主机提供中断服务程序入口地址,即向量地址。
非向量中断的中断事件不能直接提供中断服务程序的入口地址。
(4)单重中断和多重中断
单重中断在CPU执行中断服务程序的过程中不能被再打断。
多重中断在执行某个中断服务程序的过程中,CPU可去响应级别更高的中断请求,又称为中断嵌套。多重中断表征计算机中断功能的强弱,有的计算机能实现8级以上的多重中断。
如下图所示为程序中断方式的流程(以CPU要从I/O读一个数据到内存中为例):
![](http://p.ananas.chaoxing.com/star3/origin/2aef9561d5dad37fce36a7ba04db3be4.png)
在流程图中,在I/O设备准备的过程中,实际上是I/O设备和CPU二者在并行工作,在数据的传送过程中,实际CPU已经不能够执行自己原本的程序了,而必须专门腾出手来去做数据的传输工作,所以中断这种工作方式在一定程度上解放了CPU ,但是并不能完全把CPU解放出来 。
中断程序消除了CPU原地踏步的情况,但是CPU在响应中断请求之后必须暂停现程序,转而去执行中断服务子程序 ,这是消耗了CPU资源的,并且中断处理过程是有开销的 CPU在进入到中断服务程序之后首先要保护现场,从中断服务程序回到主程序之前,它要恢复现场,这个过程是很占用CPU时间的,也会影响到工作效率。
1、中断请求触发器和中断屏蔽触发器
两个触发器实际上是两个标记,INTR是中断请求触发器,如果INTR输出端=1就表示有中断请求,通过中断请求线就可以把中断请求送给CPU,如果INTR=0表示没有请求。MASK是中断屏蔽触发器,它的输出端如果是1就表示这个中断会被屏蔽,如果是0表示不会被屏蔽。
![](http://p.ananas.chaoxing.com/star3/origin/a997f60edd22936fca82273e2527e35d.png)
2、排队器
如果在同一时刻,有多个中断源同时向CPU发出中断请求,这些中断源的优先级是不一样的,这个时候就要有一个排队器来对这些中断源进行排队,找出优先级最高的那个中断源。排对有两种方式,一种是硬件电路来进行排队,一种是软件方式进行排对。
(1)硬件排队电路
![](http://p.ananas.haust.edu.cn/star3/origin/33dcabd10b71fae37061ff7fbdd3ae13.png)
(2)软件排队
![](http://p.ananas.haust.edu.cn/star3/origin/b15b1fb2593ba019fde5d59587056006.png)
3、中断向量地址形成部件
如果要响应中断,去执行中断服务程序的话,那CPU需要知道中断服务程序的入口地址,也就是中断服务程序在内在当中的起始地址,这时候就需要中断向量地址形成部件来形成这个入口地址。
中断向量地址形成部件实际上这是一个设备编码器,它的输入就是刚才讲的排对器输出的结果,在这个结果当中,只有一位是高电平的,它的输出对应的是中断向量地址,也就是中断服务程序的入口地址所保存的那个内存单元的地址。
![](http://p.ananas.haust.edu.cn/star3/origin/dae88f2443d1de0d40c6dc6f7421cef3.png)
4、程序中断方式的接口电路
在接口的基本电路的基础上,加上刚才讲的中断请求触发器,中断屏蔽触发器,排队器和设备编码器,再加上相应的控制逻辑就构成了程序中断方式接口电路的基本组成,得到了电路如下:
![](http://p.ananas.chaoxing.com/star3/origin/9e4b8aff55147bf0a6b85f442be6d16c.png)
中断全过程指从中断源发出中断请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断服务程序执行完毕,CPU返回原来程序继续执行的整个过程。
分为5个阶段:分别是中断请求、中断判优、中断响应、中断处理、中断返回。
1、中断请求
中断是由中断源引起的,中断源是指中断请求的来源,即引起计算机中断的事件。通常,一台计算机允许有多个中断源。由于每个中断源向CPU发出中断请求的时间是随机的,为了记录中断事件并区分不同的中断源,可采用具有存储功能的触发器来记录中断源,这个触发器称为中断请求触发器(INTR)。当某一个中断源有中断请求时,其相应的中断请求触发器置成“1”状态,表示该中断源向CPU提出中断请求。
2、中断判优
判优的一般原则是:
故障引起的中断优于I/O操作
非屏蔽中断优于可屏蔽中断
高速I/O的中断优于低速I/O
输入设备的中断优于输出设备的中断
(1)软件判优法
所谓软件判优法,就是用程序来判别优先级。当CPU接到中断请求信号后,就执行查询程序,逐个检测中断请求寄存器的各位状态。检测顺序是按优先级的大小排列的,最先检测的中断源具有最高的优先级,其次检测的中断源具有次高优先级,如此下去,最后检测的中断源具有最低的优先级。
软件判优方法简单,可以灵活地修改中断源的优先级别;但查询、判优完全是靠程序实现的,不但占用CPU时间,而且判优速度慢。
(2)硬件判优法
硬件判优法是指采用硬件判优电路实现中断优先级的判定,根据中断请求信号的传送方式不同,有不同的优先排队电路,常见的方案有:独立请求线的优先排队电路、公共请求线的优先排队电路等。这些排队电路的共同特点是:优先级别高的中断请求将自动封锁优先级别低的中断请求的处理。硬件排队电路一旦设计连接好之后,将无法改变其优先级别。但是这种方法可节省CPU时间,而且速度快,但是成本较高。
3、中断响应
(1)CPU响应中断的条件
1)CPU接收到中断请求信号
首先中断源要发出中断请求,同时CPU还要接收到这个中断请求信号。
2)CPU允许中断
CPU允许中断,即开中断。CPU内部有一个中断允许触发器(EINT),只有当EINT=1时,CPU才可以响应中断源的中断请求;如EINT=0,CPU处于不允许中断状态,即使中断源有中断请求,CPU也不响应。