目录
一、中断的基本概念
程序中断是指在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
二、中断的分类
1.内中断(也称异常例外、陷入)
信号的来源:CPU内部
与当前执行的指令有关
(1)自愿中断(指令中断)
系统调用时使用的访管指令(又叫陷入指令、trap指令)
(2)强迫中断
①硬件故障
如:缺页
②软件中断
如:整数除0
2.外中断
(1)外设请求
如:I/0操作完成发出的中断信号
(2)人工干预
如:用户强行终止一个进程
非屏蔽中断:
关中断时也会被响应(如:掉电)
可屏蔽中断:
关中断时不会被响应
三、中断请求标记
如何判断是哪个设备发来的中断信号?
每个中断源向CPU发出中断请求的时间是随机的。为了记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。
这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。
对于外中断,CPU是在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取I/0的中断请求,也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。
CPU响应中断必须满足以下3个条件:
①中断源有中断请求。
②CPU允许中断即开中断。
③一条指令执行完毕,且没有更紧迫的任务。
四、中断判优
有多个中断信号同时到来,先处理哪个?
中断判优既可以用硬件实现(快速),也可用软件实现(慢速):
硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,也可以分散在各个中断源中
软件实现是通过查询程序实现的。
中断判优-优先级设置
1. | 硬件故障中断属于最高级,其次是软件中断: |
2. | 非屏蔽中断优于可屏蔽中断; |
3. | DMA请求优于I/0设备传送的中断请求 |
4. | 高速设备优于低速设备: |
5. | 输入设备优于输出设备; |
6. | 实时设备优于普通设备。 |
五、中断处理过程 (单中断)
1.中断隐指令
中断隐指令:保存原程序的PC值并让PC指向中断服务程序的第一条指令。
中断隐指令的主要任务:
①关中断
在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕之后能接着正确地执行下去。
IF | 表示 |
---|---|
1 | 开中断(允许中断) |
0 | 关中断(不允许中断,非屏蔽中断除外) |
②保存断点
为了保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点(即程序计数器(PC)的内容)保存起来。可以存入堆栈,也可以存入指定单元。
③引出中断服务程序
引出中断服务程序的实质就是取出中断服务程序的入口地址并传送给程序计数器(PC)
软件查询法
硬件向量法
使用指针的指针是为了方便中断程序的拓展
只要修改JMP指令就好
不用连着中断程序一块修改
2.中断服务程序
中断服务程序的主要任务:
①保护现场
保存通用寄存器和状态寄存器的内容(eg:保存ACC寄存器的值),以便返回原程序后可以恢复CPU环境。可使用堆栈,也可以使用特定存储单元。
②中断服务(设备服务)
主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中(eg:中断服务的过程中有可能修改ACC寄存器的值)
③ 恢复现场
通过出栈指令或取数指令把之前保存的信息送回寄存器中(eg:把原程序算到一般的ACC值恢复原样)
④中断返回
通过中断返回指令回到原程序断点处。