中断

计算机组成原理 http://media4.open.com.cn/L603/fushi/0903/jisuanjzcyl/web/lesson/char5/j5.htm

 

第五节 程序中断方式

一、中断的概念

  计算机在执行程序的过程中,当出现异常情况或特殊请求时,计算机停止现行程序的运行,转向对这些异常情况或特殊请求的处理,处理结束后再返回到现行程序的间断处,这就是“中断”。中断是现代计算机能有效合理地发挥效能和提高效率的一个十分重要的功能。通常又把实现这种功能所需的软硬件技术,统称为中断技术。

二、I/O中断的产生

  在I/O与主机交换信息时,由于设备本身机电特性的影响,其工作速度较低,与CPU无法匹配,因此,CPU启动设备后,往往需要等待一段时间才能实现主机与设备交换信息。如果在设备准备的同时,CPU不作无谓的等待,而继续执行现行程序,只有当I/O准备就绪向CPU提出请求后,再暂时中断CPU现行程序转入I/O服务程序,这便产生了I/O中断。
  下图示意了由打印机引起的I/O中断时,CPU与打印机的并行工作时间示意。

  其实, 计算机系统引入中断技术的原因不仅仅是为了适应I/O设备工作速度低的问题。例如,当计算机正在运行中,若出现突然掉电这种异常情况, 会导致CPU中的全部信息丢失。倘若能在突然掉电的瞬间,立即启动另一个备份电源,并迅速处理一些必要的事情,如将有用信息送至不受电源影响的存储系统内,待电源恢复后接着使用,这种处理技术也要用中断技术来实现。又如在实时控制领域中,要求CPU能即时响应外来信号的请求, 并能完成各种相应的操作,也都要求采用中断技术。总之,为了提高计算机的整机效率,为了应付突发事件,为了实时控制的需要,在计算机技术中发展产生了“中断”技术。为了实现“中断”,计算机系统中必须配有相应的中断系统或中断机构。本节着重介绍I/O中断处理的相关内容, 有关中断的其他内容将在第八章中讲述。

三、程序中断方式的接口电路

  为处理I/O中断,在I/O接口电路中必须配置相关的硬件线路。

  1.中断请求触发器和中断屏蔽触发器
  每台外部设备都必须配置一个中断请求触发器INTR,当其为“1”时,表示该设备向CPU提出中断请求。但是设备欲提出中断请求时,其设备本身必须准备就绪,也即接口内的完成触发器D必为 “1”状态。
  由于计算机应用的范围越来越广泛,向CPU提出中断请求的原因也越来越多,除了各种I/O设备外,还有其他许多突发性事件都是引起中断的因素,为此,把凡能向CPU提出中断请求的各种因素统称为中断源。当多个中断源向CPU提出中断请求时,CPU必须坚持一个原则,即在任何瞬间只能接受一个中断源的请求。所以,当多个中断源同时提出请求时,CPU必须对各中断源的请求进行排队,且只能接受级别最高的中断源的请求,不允许级别低的中断源中断正在运行的中断服务程序。这样,在I/O接口中需设置一个屏蔽触发器MASK,当其为1时,表示被屏蔽,即封锁其中断源的请求。可见中断请求触发器和中断屏蔽触发器在I/O接口中是成对出现的。
  此外,CPU总是在统一的时间,即执行每条指令的最后时刻,查询所有的设备是否有中断请求。
  综合上述各因素,可得出接口电路中的完成触发器D、中断请求触发器INTR、中断屏蔽触发器MASK和中断查询信号的关系如下图所示。

  2.排队器
  如上所述,当多个中断源同时向CPU提出请求时,CPU只能按中断源的不同性质对其排队,给于不同等级的优先权,并按优先等级的高低予以响应。就I/O中断而言,速度越高的I/O设备其优先级越高,因为若CPU不及时响应高速I/O的请求,其信息可能立即会丢失。
  设备优先权的处理可以采用硬件办法,也可采用软件办法。硬件排队器的实现方法很多,即可在CPU内部设置一个统一的排队器, 对所有中断源进行排队,也可在接口电路内分别设置各个设备的排队器,下图是设在各个接口电路中的排队器电路,又叫链式排队电路。

  图中下面的一排门电路是链式排队器的核心。每个接口中有一个非门和一个与非门,它们之间犹如链条一样串接在一起,故有链式排队器之称。该电路中级别最高的中断源是1号,其次是2号,3号,4号。不论是哪个中断源(一个或多个)提出中断请求,排队器输出端INTPi,只有一个高电平。
  当各中断源均无中断请求时,各个为高电平,其……均为高电平。一旦某个中断源提出中断请求时,就迫使比其优先级低的中断源 变低电平,封锁其发中断请求。如当2号和3号中断源同时有请求时,经分析可知均为高电平,及往后各级的 均为低电平。各个再经图中上面一排两个输入头的与非门,便可保证排队器只有INTP2为高,表示2号中断源排上队。

  3.中断向量地址形成部件(设备编码器)
  CPU一旦响应了I/O中断,就要暂停现行程序,转去执行该设备的中断服务程序。不同的设备有不同的中断服务程序,每个服务程序都有一个入口地址,CPU必须找到这个入口地址。
  入口地址的寻找也可用硬件或软件的方法来完成,这里只介绍硬件向量法。所谓硬件向量法就是通过向量地址来寻找设备的中断服务程序入口地址,而且向量地址是由硬件电路产生的,如下图所示。

  中断向量地址形成部件的输入是来自排队器的输出INTP1……INTPn,输出是用二进制表示的中断向量,其位数与计算机可以处理中断源的个数有关,即一个中断源对应一个向量地址。可见,该部件实质是一个编码器,在I/O接口中的编码器又叫设备编码器。
  这里必须分清向量地址和中断服务程序的入口地址是两个不同的概念,下图是通过向量地址寻找入口地址的一种方案。

  图中12H、13H、14H是向量地址,200、300分别是打印机服务程序和显示器服务程序的入口地址。

  4.程序中断方式接口电路的基本组成
  程序中断方式接口电路的基本组成如下图所示。

四、I/O中断处理过程

  1.CPU响应中断的条件和时间
  CPU响应I/O提出中断请求的条件是必须满足CPU中的允许中断触发器EINT为“1”。该触发器可用开中断指令置位(称作开中断);也可用关中断指令或硬件自动使其复位(称作关中断)。
  由前述分析可知,I/O设备准备就绪的时间(即D=1)是随机的,而CPU是在统一的时刻(每条指令执行阶段结束前)向接口发中断查询信号,以获取I/O的中断请求。因此,CPU响应中断的时间一定是在每条指令执行阶段的结束时刻。

  2.I/O中断处理过程
  下面以输入设备为例,结合程序中断方式接口电路的基本组成,说明I/O中断处理的全过程。当通过I/O指令的地址码选中某设备后,则
  ①由CPU发启动外设命令,将接口中B置“1”,D置“0”;
  ②接口启动输入设备开始工作;
  ③输入设备将数据送入DBR;
  ④输入设备向接口发“设备工作结束”信号,使D置“1”,B置“0”,标志设备准备就绪;
  ⑤当设备准备就绪(D=1),且本设备未被屏蔽(MASK=0)时,在指令执行阶段的结束时刻,由CPU发中断查询信号;
  ⑥设备中断请求触发器INTR被置“1”,标志设备向CPU提出中断谓求。与此同时,INTR送至排队器,进行中断判优;
  ⑦若CPU允许中断(ENIT=1),设备又被排队选中,即进入中断响应阶段,由中断响应信号INTA将排队器输出送至编码器形成向量地址;
  ⑧向量地址送至PC,作为下—条指令的地址;
  ⑨由于向量地址中存放的是一条无条件转移指令(见图5.40),故这条指令执行结束后,即无条件转至该设备的服务程序入口地址,开始执行中断服务程序,进入中断服务阶段;
  ⑩中断服务程序的最后一条指令执行结束,即中断返回至原程序的断点处。至此,一个完整的程序中断处理过程即告结束。
  综上所述,可将一次中断处理过程简单地归纳为中断请求、中断判优、中断响应、中断服务和中断返回五个阶段。

五、中断服务程序的流程

  不同设备的服务程序是不相同的,可它们的程序流程又是类似的,一般中断服务程序的流程分四大部分:保护现场、中断服务、恢复现场和中断返回。

  1.保护现场
  保护现场有两个含意,其一是保存程序的断点;其二是保存通用寄存器和状态寄存器的内容。前者由中断隐指令完成,后者由中断服务程序完成。具体而言,可在中断服务程序的起始部分安排若干条存数指令,将寄存器的内容存至存储器中保存,或用进栈指令(PUSH)将各寄存器的内容推入堆栈保存,即将程序中断时的“现场”保存起来。

  2.中断服务(设备服务)
  这是中断服务程序的主体部分,不同的中断请求源其中断服务操作内容是不同的, 如打印机要求CPU将需打印的一行字符代码,通过接口送入打印机的缓冲存储器中,以供打印机打印;又如显示设备要求CPU将需显示的一屏字符代码, 通过接口送入显示器的显示存储器中。

  3.恢复现场
  这是中断服务程序的结尾部分,要求在退出服务程序前,将源程序中断时的“现场”恢复到原来的寄存器中。通常可用取数指令或出栈指令(POP), 将保存在存储器(或堆栈)中的信息送回到原来的寄存器中。

  4.中断返回
  中断服务程序的最后一条指令通常是一条中断返回指令,使其返回到原程序的断点处,以便继续执行原程序。计算机在处理中断的过程中,有可能出现新的中断请求, 此时如果CPU暂停现行的中断服务程序,转去处理新的中断请求,这种现象叫做中断嵌套,或叫做多重中断。 倘若CPU在执行中断服务程序时,对新的中断请求不予理睬,这种中断叫做单重中断。这两种处理方式的中断服务程序略有区别。下图(a)和(b)分别为单重中断和多重中断服务程序流程。比较(a)和(b)发现其区别在于“开中断”的设置时间不同。

  由于CPU一旦响应了某中断源的中断请求后,便由硬件线路自动关中断,即中断允许触发器ENIT被置“0”,以确保该中断服务程序的顺利执行。因此如果不用“开中断”指令将ENIT置“1”,则意味着CPU不能再响应其他任何一个中断源的中断请求。对于单重中断,开中断指令设置在最后“中断返回”之前,意味着在整个中断服务处理过程中,不能再响应其他中断源的请求。对于多重中断,开中断指令提前至“保护现场”之后,意味着在保护现场后,若有级别更高的中断源提出请求(这是实现多重中断的必要条件),CPU也可以响应,即再次中断现行的服务程序,转至新的中断服务程序,这是单重中断与多重中断的主要区别。
  从宏观上分析,程序中断方式克服了程序查询方式中的CPU“踏步”现象,实现了CPU与I/O的并行工作,提高了CPU的资源利用率。但从微观操作分析,发现CPU在处理中断服务程序时,仍需暂停源程序的正常运行。尤其是当高速I/O设备或辅助存储器需要频繁地、成批地与主存交换信息时,不断地打断CPU执行主程序而执行中断服务程序。下图是主程序和服务程序抢占CPU的示意图。为此,人们探索出使CPU效率更高的DMA控制方式。

 

posted @ 2017-09-15 17:00  papering  阅读(512)  评论(0编辑  收藏  举报