5.5 程序中断方式

一、中断的概念

学过,不再累述。

二、I/O中断的产生

不再累述。

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

1.配置中断请求触发器和中断屏蔽触发器

图5.1 配置中断请求和中断屏蔽触发器

    要进行数据传输的时候,设备准备好了,也就是D=1的时候,并且MASK=0,也就是Q’=1的时候,INTR=1,在来自CPU的中断查询信号的作用下,INTR会向CPU发出中断请求。若MASK=1,那么这个请求就会被屏蔽。

2.排队器

若有多个中断同时向CPU请求,那么需要排队器对其按照优先级的大小进行排队。排队的方式有两种,一种是硬件,即在CPU内或在接口电路中(链式排队器);一种是软件方式,采用查询的方法。

如图5.2,每个接口的排队线路包含两个门:一个非,一个与非。这些电路相互连接,构成链式排队器。在这个图里面,设备1/2/3/4优先级按降序排列。如果所有中断源都没有中断请求,INTR=1.如果有一个设备有请求,例如INTR1=1,那么INTR1’=0,那么经过一个与门之后输出1,经过后面非门后INTR2’=0,也就是说如果某一个优先级提出请求,它后面的都是0,后面的都是1。

如果1没有中断请求,2有中断请求,那么INTP2=1,INTR2’=0,那么与非门是高电平,INTR3’=0,同样后面也是0。这里面可以看出,所有为1的最后一个1是优先级最高的。

硬件排队器对排队中,只有一个值为1,这个表示了有中断请求的信号中优先级最高的,如图5.3所示。

图5.2 链式排队器

图5.3 排队器2

3.中断向量地址形成部件

图5.4 中断向量地址形成部件

如何找到中断服务的入口地址呢?有两种方法,首先是软件查表方式,还有一种是硬件向量法,即由硬件产生向量地址,再由向量地址找到入口地址

要区分以下几个概念:

(1)中断号:假设支持256个中断,这256个中断被编号为0到255,这就是中断号。

(2)中断向量:可以理解成中断服务程序的入口地址。比如说X86可以理解为中断服务程序的段地址和偏移量组成的向量,有时候也指程序状态字。比如说CPU中断,非体系寄存器或表示程序状态的寄存器指令无法读取,在计算机内部把它集成为一个字,称为程序状态字,这个时候中断向量就是和中断服务程序入口地址相关的段地址和偏移量,也包括执行中断服务程序的时候需要的一些状态信息。

(3)中断服务程序的入口地址:由中断向量地址来生成。向量地址指的是中断向量保存的内存单元的地址。

如图5.4左所示。中断向量地址形成部件的输入是来自排队器的的输出INTP1/INTP2/…/INTPn,它的输出是中断向量(二进制表示),其位数与计算机可以处理中断源的个数有关,即一个中断源对应一个向量地址。本质上是一个设备编码器

这里必须分清向量地址和纵横端服务程序的入口地址是两个不同的概念。图5.4右是通过向量地址寻找入口地址的一种方案,其中12H、13H、14H是向量地址,200、300分别是打印机服务程序和显示器服务程序的入口地址。

向量地址是通过CPU中的系统总线的数据线送入CPU中的。

4.程序中断方式接口电路的基本组成

图5.5 程序中断方式接口电路的基本组成

    这是整个程序中断方式接口电路的基本组成。首先是地址线提供设备选择信号给设备选择电路,然后收到启动命令之后开始启动,对两个状态标记进行复位或置位,此时标记D为0表示尚未准备好,标记B置为1表示忙,开始启动设备。接收到B=1和启动命令后,向CPU发送中断请求,若此时D=1的时候,并且MASK=0,也就是Q’=1的时候,INTR=1,在来自CPU的中断查询信号的作用下,INTR会向CPU发出中断请求。若MASK=1,那么这个请求就会被屏蔽。若已经排队完成,则会通过设备编码器寻找到向量地址,根据向量地址跳转到中断程序的入口地址。整个过程结束。

四、I/O中断处理过程

1.CPU响应中断的条件和时间

(1)条件

①允许中断触发器EINT=1

②用开中断指令将EINT置“1

③用关中断指令将EINT置“0”或硬件自动复位

(2)时间

当D=1(随机)且MASK=0时。并且在每条指令执行阶段的结束前CPU终端查询信号(将INTR置“1”)。

2.I/O中断处理过程——以输入为例

如图5.5所示,下面以输入设备为例,说明I/O中断处理的全过程。当CPU通过I/O指令的地址码选中某设备后,则

①由CPU发启动I/O设备命令,将接口中的B置“1”,D置“0”。

②接口启动输入设备开始工作。

③输入设备将数据送入数据缓冲寄存器。

④输入设备向接口发出“设备工作结束”信号,将D置“1”,B置“0”,标志设备准备就绪。

⑤当设备准备就绪(D=1),且本设备未被屏蔽(MASK=0)时,在指令执行阶段的结束时刻,由CPU发出中断查询信号。

⑥设备中断请求触发器INTR置“1”,标志设备向CPU请求中断,与此同时INTR送至排队器,进行中断判优。

⑦若CPU允许中断(EINT=1),设备又被排队选中,即进入中断响应阶段,由中断响应信号INTA将排队器输出送至编码器形成向量地址。

⑧向量地址送至PC,作为下一条指令的地址。

⑨由于向量地址中存放的是一条无条件转移指令,故这条指令结束后,无条件转至该设备的服务程序入口地址,开始执行中断服务程序,进入中断服务阶段,通过输入指令将数据缓冲寄存器的输入数据送至CPU的通用寄存器,再存入主存相关单元。

⑩中断服务程序的最后一条指令是中断返回指令,当其执行结束时,中断返回至原程序的断点处。整个过程结束。

五、中断服务程序流程

1.中断服务程序的流程

1)保护现场

第一是保护程序的断点,断点包括中断返回后执行哪一条指令,即保存该指令的地址,还包括程序执行状态,由硬件完成,称为中断隐指令;第二是通用寄存器内容的保护,在中断服务程序中完成,利用进栈指令保存。

2)中断服务:这是主体部分。对不同的I/O设备具有不同内容的设备服务。

3)恢复现场:要求在推出服务程序前,将原程序中断时的“现场”恢复到原来寄存器中。通常可用取数指令(保存在存储器中)或出栈指令(保存在堆栈中)。

4)中断返回:中断返回指令。

2.单重中断和多重中断

计算机在处理中断的过程中,有可能出现新的更高级别的中断请求,此时如果CPU暂停现行的中断服务程序去处理新的中断请求,这种现象称为中断嵌套,也称为多重中断

如果CPU在执行中断服务程序时,对新的中断请求不予理睬,这种中断请求称为单重中断

单重中断不允许中断现行的中断服务程序;

多重中断允许级别更高的中断源中断现行的中断服务程序。

3.单重中断和多重中断的服务程序流程

图5.6 单重中断(左)和多重中断(右)的服务程序流程

    比较图5.6的左和右,可以发现其区别在于“开中断”设置的时间不同。CPU一旦响应了某中断源的中断请求后,便由迎检线路自动关中断,即中断允许触发器EINT=0,以确保该中断服务程序的顺序执行。因此如果不用“开中断”指令将EINT=0,1,则意味着CPU不能再响应其它任何一个中断源的中断请求。对于单重中断,开中断指令设置在最后“中断返回”之前,意味着在整个中断服务处理过程中,不能再响应其它中断源的请求。对于多重中断,开中断指令提前至“保护现场”之后,意味着在保护现场后,如有级别更高的中断源提出请求(这是实现多重中断的必要条件),CPU也可以响应,即在此中断现行服务程序,转至新的中断服务程序。

4.主程序和服务程序抢占CPU示意图

图5.7 示意图

宏观上,CPU和I/O并行工作;微观上,CPU中断现行程序为I/O服务。