组成原理(十九):输入输出系统之 中断系统和程序中断方式
1、中断的基本概念
1.1、中断的提出
程序查询方式缺点:
程序查询过程中,CPU长期处于踏步等待状态,使系统效率大大降低;
CPU在一段时间内只能和一台外设交换信息,其他设备不能同时工作;
不能发现和处理预先无法估计的错误和异常情况。
程序中断的思想:CPU在程序中安排好在某一时刻启动某一台外设,然后CPU继续执行原来程序,不需要像查询方式那样一直等待外设的准备就绪状态。
一旦外设完成数据传送的准备工作,便主动向CPU发出一个中断请求,请求CPU自己为自己服务。
在响应中断的条件下,CPU暂时中止正在执行的程序,转去执行中断服务程序为中断请求者服务,在中断服务程序中完成一次主机与外设之间的数据传送,传送完成后,CPU仍返回原来的程序,从断点处继续执行。
中断程序在一定程序上实现了CPU和外设的并行工作,使CPU的效率得到充分的发挥。
1.2、程序中断与调用子程序的区别
程序终中断:计算机执行现行程序的过程中,出现某些急需处理的异常情况和特殊请求,CPU暂时中止现行程序,而转去对随机发生的更紧迫的事件进行处理,在处理完毕后,CPU将自动返回原来的程序继续执行。
子程序的执行由程序员实现安排好,而中断服务程序的执行则是由随机的中断事件引起的;
子程序的执行收到主程序或上层子程序的控制,而中断服务程序一般与被中断的现行程序毫无关系;
不存在同时调用多个子程序的情况,而有可能发生多个外设同时请求CPU为自己服务的情况。
1.3、中断的基本类型
自愿中断,又称程序自中断,不是随机产生的中断,是在程序中安排的相关指令,这些指令可以使机器进入中断处理的过程。
强迫中断,随机产生的中断,不是程序实现安排好的,由中断系统强迫计算机终止现行程序并转入中断服务程序。
程序中断,主机在响应中断请求后,通过执行一段中断服务程序来处理更紧迫的任务。
简单中断,外设与主存之间直接进行信息交换的方法,即DMA方式。这种中断不去执行中断服务程序,不会破坏现行程序的状态,主机若发现有简单中断请求时,让出一个或几个存取周期供外设与主存交换信息,然后继续执行程序。
内中断,由于CPU内部硬件或软件原因引起的中断,如单步中断、溢出中断。
外中断,指CPU以外的部件引起的中断。通常,外中断可分为不可屏蔽中断和可屏蔽中断两种。不可屏蔽中断优先级较高,常用于应急处理;而可屏蔽中断级别较低,常用于一般I/O设备的数据传送。
向量中断,指那些中断服务程序的入口地址是由中断事件自己提供的中断,中断事件在提出中断请求的同时,通过硬件向主机提供中断服务程序入口地址,即向量地址。
单重中断在CPU执行中断服务程序的过程中不能再被打断。
多重中断在执行某个中断服务程序的过程中,CPU可去响应级别更高的中断请求,又称为中断嵌套。
2、中断请求和中断优化
2.1、中断源和中断请求信号
中断源,中断请求的来源,即引起计算机中断的事件,因每个中断源向CPU发出中断请求的时间是随机的,为记录中断事件并区分不同的中断源,可采用具有存储功能的触发器来记录中断源,这个触发器称为中断请求触发器。
当一个中断源有中断请求时,相应的中断请求触发器置成"1"状态,表示该中断源向CPU剔除中断请求。
在中断接口电路中,多个中断请求触发器构成一个中断请求寄存器,中断请求寄存器的每一位对应一个中断源,其内容称为中断字或中断码。中断字为"1"的位表示对应的中断源有中断请求。
2.2、中断请求信号的传送
独立请求线,每个中断源单独设置中断请求线,将中断信号直接送往CPU。
公共请求线,多个中断源共有一根公共请求线,中断源的数目可随意扩充,CPU在接到中断请求后,必须通过软件或硬件的方式来识别中断源,然后再找出中断服务程序的入口地址。
二维结构,同一优先级别的中断源,采用一根公共的请求线,不同请求线上的中断源优先级别不同。
3、中断优先级与判优方式
3.1、中断优先级
多个中断源同时发出中断请求时,CPU在任何瞬间只能接受一个中断源的请求,把全部中断源按中断的性质和处理的轻重缓急安排优先级,并进行排队。
确定中断优先级的原则是:对那些提出中断请求后需要立刻处理,否则就会造成严重后果的中断源规定为最高的优先级;对那些可以延迟响应和处理的中断源规定为较低的优先级。
每个中断源均有一个为其服务的中断服务程序,每个中断服务程序都有与之对应的优先级别。
中断判优方式可分为 软件判优 和 硬件判优 两种。
3.2、软件判优
用程序来判别优先级,当CPU接收到中断请求信号后,执行查询程序,逐个检测中断请求寄存器的各位状态。
检测顺序按优先级大小排列,先检测优先级最高的中断,在检测优先级最低的中断。
软件判优需要靠程序实现,占用CPU的事件,判优速度慢。
3.3、硬件判优
采用硬件判优实现中断优先级的判定可节省CPU时间,判优速度快,成本较高。
4、中断响应和中断处理
4.1、响应中断的条件
CPU响应中断必须满足下列条件:
1、CPU接收到中断请求信号,中断源发出中断请求,同时CPU还要接收到这个中断请求信号。
2、CPU允许中断,开中断,CPU内部有一个中断允许触发器(EINT),只有当EINT=1时,CPU才可以响应中断源的中断请求(中断允许);如果EINT=0,CPU处于不允许中断状态,即使中断源有中断请求,CPU也不响应(中断关闭)。
3、一条指令执行完毕,CPU响应中断请求的时间限制条件,一般情况下,CPU在一条指令执行完毕且没有更紧迫的任务时才能响应中断请求。
4.2、中断隐指令
中断隐指令,CPU响应中断后,经过某些操作,转去执行中断服务程,这些操作由中断直接实现。
中断隐指令没有操作码,是一种不允许且不可能为用户使用的特殊指令。
中断异常指令主要完成以下操作:
1、保存断点,为保证在中断服务程序执行完毕能正确返回原来的程序,必须将原来程序的断点(程序计数器PC)保存起来。断点可以压栈,也可存入主存的特定单元中。
2、暂不允许中断,在中断服务程序中,为保护中断现场(即CPU主要寄存器的内容)期间不被新的中断所打断,必须要关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确的执行下去。
3、引出中断服务程序,取出中断服务程序的入口地址送程序计数器(PC)。
4.3、中断周期
中断周期用来完成隐指令任务。假设将断点存至主存的0号单元,且采用硬件向量中断服务程序的入口地址(向量地址=中断服务程序的入口地址),则在中断周期需完成如下操作:
1、将特定地址"0"送至存储器地址寄存器,记作0 → MAR;
2、将PC的内容(断点)送至MDR,记作(PC) → MDR;
3、向主存发写命令,启动存储器进行写操作,记作Write;
4、将MDR的内容通过数据总线写入MAR所指示的主存单元(0#)中,记作 MDR → M(MAR)。
5、向量地址形成部件的输出送至PC,为进入中断服务程序作准备,记作向量地址 → PC。
6、关中断,将中断允许触发器清0,记作 0 → EINT。
若断点存入堆栈,只须将上述 1 改为堆栈指针的内容送MAR,记作(SP) → MAR。当然断点进栈,同时需要修改栈指针。
4.4、进入中断服务程序
识别中断源的目的在于使CPU转入为该中断源专门设置的中断服务程序。
软件方式,由中断隐指令控制进入一个中断总服务程序,在那里判优、寻找中断源把并转入相应的中断服务程序;
向量中断法,当CPU相应某一中断请求时,硬件能自动形成并找出与该中断源对应的中断服务程序的入口地址。
向量地址有以下两种情况:
1、向量地址是中断服务程序的入口地址
CPU不需要在经过处理就可以进入相应的中断服务程序。各中断源在接口中由硬件电路形成一条含有中断服务程序入口地址的特殊指令(重新启动指令),从而转入相应的中断服务程序。
2、向量地址是中断向量表的指针
若向量地址是中断向量表的指针,则向量地址指向一个中断向量表,从中断向量表的相应单元中再取出中断服务程序的入口地址,此时中断源给出的向量地址是中断服务程序入口地址的地址。
4.5、中断现场的保护与恢复
中断现场指的是发生中断时CPU的主要状态,最重要是的断点。
需要保护和恢复现场是因为CPU要先后执行两个完全不同的程序 -> 现行程序 和 中断服务程序,必须进行两种程序运行状态的转换。
中断隐指令中,CPU硬件将自动保存断点,有的计算机还自动保存程序状态字寄存器(PSWR)的内容。用软件保存硬件未保存的寄存器内容,在中断返回之前,这些内容需要被恢复。
现场保护和恢复的方式有软件、软硬结合两种。
软件,在CPU响应中断后,用一系列传送指令把要保存的现场参数传送到主存某些单元中,当中断服务程序结束后,再采用传送指令进行相反方向的传送。
软硬结合保护现场往往是和向量中断结合一起使用,首先把断点和程序状态字自动压入堆栈,保护旧现场;根据中断源送来的向量地址自动取出中断服务程序入口地址和新的程序状态字,建立新现场。最后由指令实现对必要的通用寄存器的保护。
恢复现场是保护现场的逆处理。
4.6、多重中断与中断屏蔽
4.6.1、中断嵌套
中断嵌套层次可以有多层,越在里层的中断请求越急迫,优先级越高,优先得到CPU的服务。
多重中断,需要保护多个断点,且先发生的中断请求的断点,先保护后恢复;后发生的中断请求的断点,后保护先恢复。
CPU进入某一中断服务程序之后,系统必须开中断状态,否则中断嵌套不可能实现。
4.6.2、允许和禁止中断
允许中断还是禁止中断是用CPU中的中断允许触发器控制的,当中断允许触发器(EINT)被置"1",则允许中断;当中断允许触发器(EINT)被置"0",则禁止中断。
允许中断即开中断,下列情况需要开中断:
中断服务执行完毕,恢复中断现场后;
多种中断情况下,保护中断现场后。
禁止中断即关中断,下列情况需要关中断:
当响应某一级中断请求,不再允许被其他中断请求打断时。
在中断服务程序的保护和恢复现场之前。
4.6.3、中断屏蔽
中断源发出中断请求后,中断请求并不一定真正送入CPU,可以用程序方式有选择的封锁部分中断,中断屏蔽。
给每个中断源相应配备一个中断屏蔽触发器,每个中断请求信号再送往判优电路之前,还受到屏蔽触发器的控制。
在中断接口电路中能够,多个屏蔽触发器组成一个屏蔽寄存器,内容称为屏蔽字或屏蔽码。
4.6.4、中断升级
中断屏蔽的另一个作用是改变中断优先级,将原较低的中断源编程较高的级别,称为中断升级。
改变优先次序是指,改变中断的处理次序。
中断处理次序,可以由屏蔽码来改变,可将屏蔽码看成软排队器;
中断响应次序,由硬件排队电路决定,无法改变。
4.7、中断全过程
从中断源发出请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断服务程序执行完毕,CPU再返回原来的程序继续执行的整个过程。
可分为5个阶段:中断请求、中断判优、中断响应、中断处理和中断返回。灰框代表指令,白框代表程序。
中断处理,即执行中断服务程序,是中断系统的核心。
中断处理过程由3个部分组成,第一部分为准备部分,基本功能是保护现场;第二部分为处理部分,即真正执行具体的为某个中断源服务的中断服务程序;第三部分为结尾部分,首先要关中断,以防止在恢复现场过程中被新的中断请求打断,接着恢复现场,然后开放中断,以便返回原来的程序后可响应其他的中断请求。
中断服务程序的最后一条指令一定是中断返回指令。
4.8、程序中断接口结构
具有中断能力的外设接口是由程序查询方式接口 和 中断控制机构组成。
接口中保证中断式传送,提供程序查询式传送。AB、DB、CB分别表示地址总线、数据总线和控制总线。
中断控制机构需要包括如下部分:
中断请求电路,当中断源有请求且中断开放时,中断请求电路向CPU发中断请求信号。
中断优先级电路,中断优先级电路保证优先级别最高的中断源首先获得CPU的服务。
向量地址形成部件,向量地址形成部件用来产生向量中断时需要的向量地址,并且根据这个向量地址转向该中断源所对应的中断服务程序。