中断的基本概念
程序中断是在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又返回到现行程序的断点处,继续执行原程序。
中断的作用:
①实现CPU与IO设备的并行工作
②处理硬件故障和软件错误
③实现人机交互,用户干预机器需要用到中断系统
④实现多道程序、分时操作,多道程序的切换需要借助于中断系统
⑤实时处理需要借助中断系统来实现快速响应
⑥实时应用程序和OS(管态)的切换,称为软中断
⑦多处理器系统中各处理器之间的信息交流和任务切换
工作流程:
1、中断请求:中断源向CPU发送中断请求信号。
2、中断响应:判断是否符合响应中断的条件,即是否可以响应中断请求。
3、中断判优:多个中断源同时提出请求时,通过中断判优判断逻辑响应一个中断源。
4、中断处理:通过中断隐指令将CPU的指令执行流转移到对应中断服务程序(本质上就是修改PC的值)。然后再执行中断服务程序。
一、中断请求
外中断和内中断
中断源是请求CPU中断的设备或事件,一台计算机允许有多个中断源。
每个中断源向CPU发出中断请求的时间是随机的。为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。
根据中断源的类别可把中断源分为内中断和外中断两种。
内中断
主要是指在处理器和内存内部产生的中断。包括程序运算引起的各种错误,如地址非法、校验错、缺页、存取访问控制错、算术操作溢出、数据格式非法、除数为零、非法使用特权指令、时间片到、系统调用等。
外中断
是指来自处理器和内存以外的部件引起的中断。包括IO设备发出的IO中断、外部信号中断、以及各种定时器引起的时钟中断等。
注意:浮点数的上溢和下溢不同,当浮点数的阶码大于最大阶码时称为上溢,此时机器停止运算,进行溢出中断处理(外中断)。如果阶码小于最小阶码时,称为下溢,此时溢出数值很小,直接强制将浮点数的尾数置为0,可继续运算。(内中断)
二、中断响应
通过PSW中的IF位判断此时是处于关中断还是开中断状态。
非屏蔽中断:关中断时也会被响应(如:掉电)。通过不可屏蔽中断请求NMI控制,不受中断标志位IF的影响。
可屏蔽中断:关中断时不会被响应(大部分设备产生的外中断)
CPU响应中断必须满足以下3个条件:
①中断源有中断请求。
②CPU允许中断即开中断。
③一条指令执行完毕,且没有更紧迫的任务。
注:IO设备的就绪时间是随机的,而CPU在统一时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取IO的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。这里的中断指的是外中断,内中断不属于此类情况。
三、中断判优
当多个中断源同时提出中断请求时,需要通过中断判优逻辑确定响应哪个。中断判优既可以用硬件实现,也可用软件实现:
硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中;软件实现是通过查询程序实现的。
硬件判优——通过硬件排队器实现
软件判优——查询程序
速度较慢,一般都用硬件实现中断判优。
中断判优优先级设置
硬件故障中断(如:掉电)属于最高级,其次是软件中断(如:系统调用)
注:硬件中断指通过外部的硬件设备产生的中断,属于外中断。软件中断指通过某条指令产生的中断,这种中断可以通过编程实现,属于内中断。
非屏蔽中断优于可屏蔽中断
DMA请求优于IO设备传送的中断请求
高速设备优于低速设备
输入设备优于输出设备
实时设备优于普通设备
四、中断处理
(1)中断隐指令
CPU响应中断后,经过某些操作,转去执行中断服务程序。这些操作是由硬件直接实现的,称为中断隐指令。
中断隐指令并不是指令系统中的一条真正的指令,它没有操作码,所以中断隐指令是一种不允许也不可能为用户使用的特殊指令。它所完成的操作如下:
①关中断。在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完后能接着正确执行。
②保存断点。为保证在中断服务程序执行完后能正确地返回到原来的程序,必须将原来的程序断点【即PC中的内容】保存起来。断点可以压入堆栈,也可以存入主存的特定单元中。
③引出中断服务程序。引出中断服务程序的实质是,取出中断服务程序的入口地址并传送给PC。
通常有两种方法寻址中断服务程序的入口地址:硬件向量法和软件查询法。
硬件向量法通过硬件产生中断向量地址,再由中断向量地址找到中断服务程序的入口地址。
软件查询法用软件编程的方法寻找入口地址。
注:硬件产生的实际上是中断类型号,而中断类型号指出了中断向量存放的地址,因此能产生中断向量地址。
(2)中断向量
不同设备有不同的中断服务程序,每个中断服务程序都有一个入口地址,CPU必须找到这个入口地址,即中断向量。把系统中的全部中断向量集中存放在存储器的某个区域,称为中断向量表,即中断服务程序入口地址表。
注:中断向量是中断服务程序的入口地址,中断向量地址(也叫中断类型号)是指中断向量的地址。(相当于函数的指针和指针的指针)
为什么采用这种两级指针方式来确定中断服务程序的地址?
因为如果使用一级指针,让中断类型号直接指向中断服务程序的入口地址。当中断服务程序有所修改时,就必须修改整个电路,这是不可能的,而使用二级指针,就允许中断服务程序的变化。
(3)中断服务程序
中断服务程序的主要任务:
①保护现场
保存中断屏蔽字、通用寄存器和状态寄存器的内容(eg:保存ACC寄存器的值),以便返回原程序后可以恢复CPU环境。可使用堆栈,也可以使用特定存储单元。
②执行中断服务(设备服务)
主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中(eg:中断服务的过程中有可能修改ACC寄存器的值)
③恢复现场
通过出栈指令或取数指令把之前保存的信息送回寄存器中(eg:把原程序算到一般的ACC值恢复原样)
④中断返回
通过中断返回指令回到原程序断点处。
中断返回指令在中断恢复后,即CPU中的所有寄存器都已经恢复到了中断前的状态,因此该指令不需要进行无条件转移!
注意保存现场和保存断点的区别:保存现场是保存中断屏蔽字、通用寄存器和状态寄存器由中断处理程序(软件)实现;保存断点是保存PC由中断隐指令(硬件)实现。
多重中断技术(考点)
根据开中断和关中断的执行数量和位置,有单重中断和多重中断(可嵌套中断)两种。单重中断:执行中断服务程序时不响应新的中断请求。
注:在多重中断系统中,中断处理期间CPU并不是一直处于关中断状态!!!
中断屏蔽技术(考点)
中断屏蔽技术主要用于多重中断,CPU要具备多重中断的功能,必须满足下列条件。
①在中断服务程序中提前设置开中断指令。
②优先级高的中断源有权中断优先级低的中断源。
每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请,所有屏蔽触发器组合在一起,便构成一个屏蔽字寄存器,屏蔽字寄存器的内容称为屏蔽字。
中断屏蔽技术本质上也是解决中断请求优先级的问题。和中断判优类似,但又有区别。
硬件排队器通过简单的改造就可以得到具备中断屏蔽功能的电路。
硬件排队器:收到多个中断请求时,只响应其中一个。是固定优先级。
增加屏蔽功能的排队器:更灵活动态地调节各个中断请求的优先级。
注意:硬件排队器中断判优是解决中断响应顺序的问题,屏蔽技术是解决中断处理顺序的问题,两个还是有区别的!!
中断响应优先级是由硬件排队线路或中断查询程序的查询顺序决定的,不可动态改变;而中断处理优先级可以由中断屏蔽字来改变,反映的是正在处理的中断是否比新发生的中断的处理优先级低,若是,则中止正在处理的中断,转到新中断去处理,处理完后再回到刚才被中止的中断继续处理。
屏蔽字设置的规律:
1、一般用“1”表示屏蔽,“0”表示正常申请。
2、每个中断源对应一个屏蔽字(在处理该中断源的中断服务程序时,屏蔽寄存器的内容为该中断源对应的屏蔽字)
3、屏蔽字中“1”越多,优先级越高。每个屏蔽字中至少有一个“1”(至少要能屏蔽自身的中断,自己的中断不能被自己的中断中断)
比自己优先级高的不能屏蔽置0,比自己优先级低的要屏蔽置1。