为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将
中断源分为若干个级别,称作中断优先级。
简介
微机系统中有多个
中断源,有可能出现两个或两个以上中断源同时发出中断请求的情况。多个中断源同时请求中断时,CPU必须先确定为哪一个中断源服务,要能辨别优先级最高的中断源并进行响应。CPU在处理中断时也要能响应更高级别的中断申请,而屏蔽掉同级或较低级的中断申请,这就是中断优先级问题。
中断系统中,
CPU一般根据各中断请求的轻重缓急分别处理,即给每个中断源确定一个中断优先级别,系统自动对它们进行排队判优,保证首先处理优先级别高的中断请求,待级别高的中断请求处理完毕后,再响应级别较低的中断请求。对多个中断源进行识别和优先级排队的目的就是要确定出最高级别的中断源,并形成该中断源的中断服务程序入口地址,以便CPU将控制转移到该
中断服务程序去。
一般指以下两层含义:
①若有2个或2个以上的中断源同时提出
中断请求,
微处理器先响应哪个中断源,后响应哪个中断源;
②若一个中断源提出中断请求,
微处理器给予响应并正在执行其中断服务程序时,又有1个中断源提出中断请求,后来的中断源能否中断前一个中断源的
中断服务程序。
分类
中断是用以提高
计算机工作效率、增强
计算机功能的一项重要技术。最初引入
硬件中断,只是出于性能上的考量。如果计算机系统没有中断,则处理器与
外部设备通信时,它必须在向该设备发出指令后进行忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。这就造成了大量
处理器周期被浪费。引入中断以后,当处理器发出设备请求后就可以立即返回以处理其他任务,而当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。这样,在设备进行处理的周期内,
处理器可以执行其他一些有意义的工作,而只付出一些很小的切换所引发的时间代价。后来被用于
CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个方面,并产生通过软件方式进入
中断处理(软中断)的概念。
中断可分为如下几种:
硬件中断
(Hardware Interrupt)
软件中断
(Software Interrupt)
软件中断是以INT n指令的形式出现在程序中的,中断
指令占用两个字节,第一个字节为指令码CDH,第二个字节为指令操作数n,即
中断类型码。当软件中断时,CPU从指令流中读取中断类型码;当可屏蔽中断时,要在发出中断响应信号ITA后,才能从数据总线上读取中断类型码。可见,软件中断与外部中断有许多不同之处,它具有自身的一些特点,表现在以下几个方面。
(1)软件中断是以一条指令INT n而进入中断
服务程序的,并且其中断类型码由指令的第二字节提供。
(2)软件中断不受中断允许标志IF的禁止,即无论正=1或0,对任何一个软件中断都不影响。其中,只有单步中断受单步标志TF的影响,即只有当TF=1时,才能执行单步中断。
(3)由于CPU从
指令流中读取软件中断的中断类型码,因此,在软件中断进入中断后,不需要执行中断响应总线周期,也不必从数据总线上读取中断类型码。
(4)软件中断除类型0(除数为0的中断)外,都没有随机性,因为软件中断是以INT n指令的形式出现在程序中的,该指令放在程序的何处何时执行都是预先定好的,这就使得软件
中断不会出现随机性。
中断源种类
(1)设备中断:如键盘、打印机等设备的数据传送请求等。
(2)指令中断:为了方便用户使用系统资源或调试软件而设置的中断指令,由程序预先安排的中断指令(INT n)引起,如BIOS及DOS系统功能调用的中断指令等。
(3)故障中断:计算机内部设有故障
自动检测装置,如电源掉电、奇偶校验错或协处理器中断请求等意外事件,都要求CPU进行相应的中断处理。
(4)
实时时钟中断:在
自动控制系统中,常遇到定时检测与时间控制,这时可采用外部时钟电路进行定时。CPU可发出命令启动时钟电路开始计时,待定时时间到,时钟电路就会向CPU发出中断申请,由CPU进行处理。
(5)CPU内部运算产生的某些错误所引起的中断:如除法出错、运算溢出、程序调试中设置断点等。
响应原则
响应流程
CPU在执行每一条指令的后期,要对所有的
中断源进行检测。
在检测到
中断请求前,
程序计数器PC中存储的是下一条
指令码的地址。如果CPU检测到某一中断请求并将响应该中断时,它要跳转到该中断服务程序处,即把PC的当前内容保存起来,再把该中断服务程序的入口地址送给PC,则其后CPU就执行该中断
服务程序了。
在退出中断服务程序前,
CPU要执行中断返回指令
RETI,该指令把进入中断服务程序前保存的PC内容再写入PC,则其后CPU就从进入中断
服务程序前的断点处向下执行指令,其流程如图1所示用C51编写中断服务函数时,并不需要在中断服务函数的最后编写
RETI指令,该指令由
编译器在编译中断服务函数时自动添加。
优先级排队
在实际系统中,常常遇到多个
中断源同时请求中断的情况,这时CPU必须确定首先为哪一个中断源服务,以及服务的次序。解决的方法是中断优先排队,即根据中断源请求的轻重缓急,排好中断处理的优先次序即优先级(Priority),又称优先权,先响应
优先级最高的中断请求。另外,当CPU正在处理某一中断时,要能响应另一个优先级更高的中断请求,而屏蔽掉同级或较低级的中断请求,形成
中断嵌套。
中断源的优先级判别一般可采用软件优先级排队和硬件优先级排队两种方法。
软件优先级排队
如图2所示,优先级由查询顺序决定,先查询的中断源具有最高的优先级。
软件优先级排队是指各个
中断源的
优先权由软件安排。若干个外设的中断请求信号相“或”后,送至CPU的中断接收引脚(如
INTR)。这样,只要任一外设有中断请求,CPU便可响应中断。在中断服务
子程序前可安排一段优先级的查询程序,即CPU读取外设
中断请求状态端口,然后根据预先确定的优先级级别逐位检测各外设的状态,若有中断请求就转到相应的Uo处理程序入口,为该外设服务。
用软件查询方法确定中断
优先级是一种最简单的解决方法,主要依靠软件方法实现,不需要专门的优先级排队电路,可以通过修改查询顺序来修改中断优先级,不必更改硬件。但是当
中断源个数较多时,由逐位检测查询到转入相应中断
服务程序所耗费的时间较长,中断响应速度慢,服务效率低。
硬件优先级排队
为提高
中断处理效率,通常采用硬件处理中断
优先权问题,即采用优先级排队电路或专用
中断控制器等硬件电路来管理中断。其中,硬件优先权排队电路形式众多,有采用编码器组成的,有采用链式电路的。
利用外设连接在排队电路的物理位置来决定其
中断优先权的,排在最前面的优先级最高,排在最后面的
优先级最低。
改变的方法
在PC环境下,要改变并发中断优先级,实现理想的
中断处理顺序,要从以下两个方面着手。
(1)使低
优先级的中断可中断高优先级的中断服务程序。
通过研究发现,8259A中的中断服务
寄存器ISR。对中断处理顺序的改变起了非常重要的作用。当中断服务寄存器的相应位置1时,8259A自动禁止同级和较低级的
中断请求。因此要改变中断的处理顺序,必须在CPU响应中断后,将8259A中的相应位清零的。这样,如果有新的
中断请求,不论它的级别高低,只要CPU处于开中断状态,芯片就会马上再向CPU发出
中断请求,即低优先级的中断就可能会中断高优先级的中断服务程序。而实现CPU响应中断后,将中断服务
寄存器8259A中的相应位清零,有3种解决的办法。
(2)在中断处理程序中设置新的中断屏蔽字。
为了能根据需要,改变实际的
中断处理次序,很多机器都设置了中断屏蔽寄存器硬件,以决定是否让某级中断请求进入中断优先权电路进行优先权比较。级别高的
中断请求优先得到响应。只要将每一类中断处理程序的各级中断屏蔽位设置成不同的状态,就可以得到所希望的
中断处理次序。
单级与多级
根据计算机系统对
中断处理策略的不同,中断系统可以分为单级
中断系统和多级
中断系统,单级中断系统是中断结构中最基本的形式。
在单级中断系统中,所有的
中断源都属于同一级,所有中断请求触发器排成一行,其优先次序是离CPU越近优先级越高。当响应某一
中断请求时,CPU执行该中断源的中断
服务程序,在此过程中,中断服务程序不允许被其他中断源所打断,即使优先级比它高的
中断源也不例外,只有当该中断服务程序执行完毕之后,才能响应其他中断。
多级中断系统是指
计算机系统中的多个中断源,根据中断事件的轻重缓急程度不同而分成若干个级别,每一个中断级分配一个优先级。一般而言,优先级高的中断级可以打断
优先级低的中断服务程序,以中断嵌套方式进行工作。
在中断优先级已定的情况下,CPU总是首先响应优先级最高的
中断请求。当CPU正在响应某一中断源的请求,即正在执行某个中断
服务程序时,若有优先级更高的
中断源申请中断,为使级别更高的中断源能及时得到服务,CPU就应暂停当前正在服务的级别较低的服务程序而转入新的中断源服务,等新的级别较高的中断服务程序执行完后,再返回到被暂停的中断
服务程序继续执行,直至处理结束返回
主程序,这种过程称为中断嵌套。CPU允许高优先级中断请求可以打断低优先级中断服务,使CPU对于急需处理的事件立即做出响应。
中断嵌套的出现,扩大了
系统中断功能,进一步加强了系统处理紧急事件的能力。中断嵌套可以商多级。具体级数(即嵌套深度)原则上不限制,只取决于
堆栈深度,实际上与要求的中断
响应速度有关。