中断是微处理器程序运行的一种方式。计算机在执行正常程序的过程中,当出现某些紧急情况、异常事件或其他请求时,处理器会暂时中断正在运行的程序,转而执行紧急情况或其他请求的操作处理。处理完成以后,CPU回到被中断程序的断点处继续执行,这个过程称为中断。
中断是计算机必须具备的、重要的功能。有了中断功能,计算机才能从单纯的计算工具变成功能强大、多任务和分时处理的信息工具。
本章主要内容
& 中断的管理
& 中断的实现
查询式传输过程的优点是硬件开销小,使用起来比较简单。但在此方式下CPU要不断地查询外设的状态,当外设未准备好时,CPU就只能循环等待,不能执行其他程序,这样就浪费了CPU的大量时间,降低了CPU的利用率。
图6-1 中断程序执行的原理 |
我们把能够向CPU发出中断请求的设备或事件称为中断源。微机系统引入中断机制后,使CPU与外设(甚至多个外设)处于并行工作状态,便于实现信息的实时处理和系统的故障处理。
中断方式实际上是外设与CPU交换数据的一种方式,然而中断并不止局限于这样的应用,中断还有许多别的功能。广义的中断是指暂停当前CPU正在执行的程序,而跳转执行相应的中断服务子程序,在中断服务子程序执行完毕后,再返回到原程序执行的这样一种工作方式。
中断有下面几个作用:
第一,实现CPU与I/O设备之间的数据传送,使CPU与外部I/O设备并行工作,使系统效率大大提高。
第二,实时处理硬件故障。当计算机高速运行时,如果此时出现计算机硬件发生故障,那么中断系统向CPU发出中断请求,在中断处理程序中,由CPU对硬件故障进行处理。
第三,通过软中断指令可以使应用程序调用操作系统的底层功能。
具备了中断功能后,计算机的整体性能可以得到很大地提高,具体表现在如下几个方面。
(1)并行处理能力。
有了中断功能,可以实现CPU和多个外设同时工作,仅仅在它们相互需要交换信息时才进行中断。这样CPU可以控制多个外设并行工作,提高了CPU的使用效率。
(2)实时处理能力。
在计算机应用于实时控制时,现场的许多事件需要CPU能迅速响应、及时处理,而提出请求的时间往往又是随机的。有了中断系统才能实现实时处理。
(3)故障处理能力。
在计算机运行过程中有时会出现一些故障,例如,电源掉电(指电源电压快速下降,可能即将停电)、存储器读/写检验错、运算出错等。可以利用中断系统通过执行故障处理程序进行处理,避免产生灾难性的结果。
(4)多道程序或多重任务的运行。
在操作系统的调度下,使CPU运行多道程序或多重任务。一个程序需要等待外设I/O的操作结果时就暂时挂起,同时启动另一道程序运行。I/O操作完成后,挂起的程序再排队等待运行。这样,多个程序交替运行。从大的时间范围来看,多道程序在同时运行。也可以为每道程序分配一个固定的时间间隔,利用时钟定时中断进行多道程序的切换。由于CPU速度快,I/O设备速度慢,各道程序感觉不到CPU在执行其他的服务,好像专为自己服务一样。
当CPU正在处理某种类型的中断时,又有级别更高的新中断源申请中断,这时CPU就会暂停当前的中断服务程序,而转去执行新的中断处理,这种中断的处理方式就叫中断嵌套。
8088对软件中断和硬件中断响应的过程是不同的,这是由于软件中断和硬件中断所产生的原因不同,下面主要讨论具有代表性的硬件中断的过程。
硬件中断指的是由NMI引脚引起的不可屏蔽中断或由INTR引脚引起的可屏蔽中断。下面以可屏蔽中断为例。
CPU在INTR引脚上接到一个中断请求信号,如果此时IF=1,并且当前的中断请求具有最高的优先级,CPU就会在当前指令执行完以后开始响应外部的中断请求。这时,CPU通过INTA引脚连续发送两个负脉冲,外设接口在接到第二个负脉冲以后,在数据线上发送中断类型码,CPU接到这个中断类型码后执行如下操作。
(1)将中断类型码放入暂存器保存。
(2)将标志寄存器内容压入堆栈,以保护中断时的状态。
(3)将IF和TF标志清零。IF清零的目的是防止在中断响应的同时又出现其他的中断请求,而将TF清零是为了防止CPU以单步方式执行中断处理子程序。这时要特别注意,因为CPU在中断响应时自动关闭了IF标志,因此用户如要进行中断嵌套,那么就必须在自己的中断处理子程序中用开中断指令重新设置IF。
(4)保护断点。断点指的是在响应中断时IP和CS所指示指令的地址,因此保护断点的动作就是将当前的IP和CS的内容入栈。保护断点是为了以后正确地返回程序。
(5)根据取到的中断类型码,在中断向量表中找出相应的中断向量,将其装入IP和CS,这样就可实现自动转向中断服务子程序的执行。
对NMI引起的中断请求,由于其类型码固定为2,因此CPU不用从外设读取类型码,只需将中断向量表中00008H~0000BH单元内容分别装入IP和CS即可。
可以看出,中断的工作过程可以概括为5个步骤:中断请求、中断判优、中断响应、中断服务和中断返回。
CPU要响应中断,必须有外部设备或应用程序向CPU发出中断请求,这种引起中断的原因或设备称为中断源。CPU的中断源有两类:一类是内部中断,由CPU内部的标志TF为1或执行一条软件中断指令等引起;另一类是外部中断,由外部请求信号引起。外部中断又分为可屏蔽中断和不可屏蔽中断(或称非屏蔽中断)。中断源的种类如图6-2所示。
在某种情况下,CPU可能不允许响应可屏蔽中断INTR,此时当中断源向CPU申请中断后,CPU就不能终止当前正在运行的程序并转到中断服务程序,这种情况称为禁止中断。一般在CPU内部有一个中断允许触发器,只有当该触发器的状态为允许状态时,CPU才能响应外部中断,否则CPU不能响应中断。中断允许触发器可以通过指令STI进行置位和指令CLI进行复位。
在另外一种情况下,比如当CPU正在进行中断处理,此时CPU可能不需要响应几种特殊类型的中断,而其余的中断则可以响应,这就叫做中断屏蔽。
图6-2 中断源的种类
中断屏蔽可以通过中断屏蔽触发器来实现。将中断源对应的中断屏蔽触发器置1,则该中断源的中断请求被屏蔽,否则该中断源的中断请求被允许。
如上所述,计算机内有多个不同的中断源。CPU收到中断请求之后,需要识别是哪一个中断源发出了中断请求信号,以便执行相应的中断服务程序。
中断源的识别有软件和硬件两种方法。
(1)软件识别方法:不论发生了哪一种中断,CPU响应中断后,进入同一个中断处理程序。在这个程序里,CPU逐个查询各中断源的状态,从而确定是哪一个设备申请了中断。
(2)硬件识别方法:CPU响应中断后,进入一个中断响应周期。在这个周期里,申请中断的设备向CPU发送它的中断类型。
对于系统中的所有中断源,必须根据中断的性质及处理的轻重缓急对中断源进行排队,并给予优先权。所谓优先权是指有多个中断源同时提出中断请求时,CPU响应中断的优先次序。
确定中断优先权有多种可选的方法。
(1)软件查询法。
采用程序查询的方法确定中断服务的顺序。CPU响应中断后,用软件查询的办法确定哪个中断源提出了中断申请。同时有多个中断申请时,首先被查询的中断先被处理,因而拥有较高的优先权。
(2)分类申请法。
CPU分设两个中断申请信号的输入引脚。
① 可屏蔽中断申请引脚(INTR):普通的中断申请信号通过这个引脚输入CPU。CPU的内部有一个中断允许寄存器(IF),它的状态可以由程序设定。IF=1时,CPU在一条指令执行完成后可以响应来自INTR的中断申请;IF=0时,CPU不响应来自INTR引脚的中断请求。
②不可屏蔽中断申请引脚(NMI):紧急的中断申请信号通过这个引脚输入CPU。除了CPU响应DMA的请求之外,在一条指令执行完成后CPU总是响应来自NMI的中断申请。
显然,连接到NMI引脚的中断请求有较高的优先级。
(3)链式优先权排队——菊花链法。
菊花链是在CPU外部管理中断优先级的一个简单硬件方法。在每个中断源的接口电路中设置一个逻辑电路,这些逻辑电路组成一个链,叫菊花链,由它来控制中断响应信号的传递通道。图6-3是一个菊花链的线路图,图6-4是链上具体的逻辑电路。由图6-3可以看出,当链上任何一个接口有中断请求时,都会产生中断请求信号送往CPU的INTR引脚。如果CPU允许中断,则发出中断响应信号,该信号在菊花链中传递。如果某接口中无中断请求信号,则
信号可以通过该接口的菊花链逻辑电路原封不动地向后传递;如果该接口中有中断请求信号,则该接口中的逻辑电路就使得
信号不再向后传递。这样,CPU发出的
信号可以从最靠近CPU的接口开始沿着菊花链逐级向后传递,直至被一个有中断请求信号的接口封锁为止。显然,在有多个中断请求同时发生时,最靠近CPU的接口最先得到中断响应,所以它的优先权最高,离CPU越远的接口,其优先权就越低。
图6-3 链式优先权排队电路——菊花链
图6-4 菊花链内部逻辑电路
当某接口有中断请求且收到了CPU的中断响应信号,该接口一方面清除它的中断请求,同时把它的中断类型号送上数据总线。CPU接收到该中断类型号就执行与它对应的中断服务程序。因优先权较低申请了中断而未接收到
的接口将保持中断请求信号。CPU处理完高一级的中断,开中断返回后,再来响应这个接口的中断请求。
(4)可编程中断控制器——向量优先权排队专用电路。
采用可编程中断控制器是当前微型计算机中解决中断优先权管理的常用办法。一个中断控制器可以接收并管理多个中断请求,各个I/O接口送来的中断请求信号都并行地送到中断控制器的输入端。可以通过程序设定中断控制器优先权的分配规则。
固定的优先级:中断优先级由引脚的编号决定,连接到高优先权引脚的中断请求有高的优先级。
循环的优先级:某个引脚的中断请求被响应后,它的优先级就变为最低。各个引脚的优先级根据中断申请被响应的状态随时改变,从大的时间范围来看,不同引脚上的优先级是相同的。
上面介绍了4种解决中断优先级的方法,其中方法(2)至方法(4)均采用了硬件来实现优先级管理,使用硬件管理可以提高中断响应的速度。早期计算机采用软件查询或菊花链来管理中断优先级,目前的计算机普遍使用分类申请并使用中断控制器来实现优先级管理。