-
中断基本概念:程序中断指计算机执行现行程序过程中,出现某种急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序
-
中断请求的分类:
- 内中断(异常、例外、陷入)
- 自愿中断:指令中断(陷入指令、trap指令)
- 强迫中断:硬件故障(如缺页)、软件中断(如整除0)
- 外中断
- 外设请求(如I/O操作完成发出的中断信号)
- 人工干预(如用户强行终止一个进程)
- 内中断(异常、例外、陷入)
-
单重中断处理过程:正常取指令、执行指令->指令执行完毕后例行检查是否有中断->(是的话)【中断隐指令】中断响应、程序断点进栈、关中断、向量地址赋给PC->【中断服务程序】保护现场、(各种)中断服务、恢复现场、开中断、中断返回。中断隐指令+中断服务程序=中断处理过程
- 中断隐指令:是CPU在检测到中断请求时自动完成的一系列动作,即下面三个都是由硬件完成的
- 关中断:为了保护中断现场期间不被新的程序中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕后能接着正确执行
- 保存断点:将原来程序的断点(即PC内容)保存起来,可存入堆栈或指定单元
- 引出中断服务程序:实质就是取出中断服务程序的入口地址并传送给PC
- 中断服务程序:其实这个只是一个名字,它的第二步才是执行中断服务程序。可以把这类操作归为由软件完成的(即操作系统完成的)
- 保存现场:保存通用寄存器等的内容(用于程序恢复后CPU环境的恢复)
- 中断服务:主体部分,如通过程序控制需打印的字符代码送入打印机的缓冲存储器中
- 恢复现场:通过出栈指令或取数指令把之前保存的信息送回寄存器中(恢复通用寄存器等)
- 中断返回:通过中断返回指令回到原程序断点处(恢复PC和PSW)
- 中断隐指令:是CPU在检测到中断请求时自动完成的一系列动作,即下面三个都是由硬件完成的
-
多重中断:
单重中断执行中断服务程序时不响应新的中断请求;而多重中断执行中断服务程序时可响应新的中断请求,优先级别高的中断源有权中断优先级别低的中断源– 单重中断 多重中断 中断隐指令 关中断 关中断 – 保存断点(PC) 保存断点(PC) – 送中断向量 送中断向量 中断服务程序 保护现场 保护现场和屏蔽字 – – 开中断 – 执行中断服务程序 执行中断服务程序 – – 关中断 – 恢复现场 恢复现场和屏蔽字 – 开中断 开中断 – 中断返回 中断返回 - 中断屏蔽技术:用于多重中断,只有优先级别高的中断源才有权中断优先级别低的中断源。每个中断源都有一个屏蔽触发器,1表示屏蔽该中断源的请求,0表示可以正常申请中断。所有屏蔽触发器组合在一起构成一个屏蔽字寄存器。屏蔽字寄存器的内容称为屏蔽字(每个中断源都有一个自己的屏蔽字),屏蔽字中1越多,优先级越高。每个屏蔽字中至少有一个1(至少要能屏蔽自身的中断)
-
引入了中断系统后,如何控制I/O设备的数据读写工作呢(具体步骤):
CPU运行一个程序,运行过程中需要使用外部设备(如要从外部设备输入一个字符的数据):- 首先通过一些I/O指令向I/O设备发出启动输入相关的命令,然后外部设备就可以去准备CPU想要的数据了。
- 在外部设备准备数据的过程中,CPU可以继续执行之前的程序(没有引入中断系统时,程序查询是CPU启动I/O设备后,需要用轮询的方式不断检查I/O设备有没有完成输入工作;而引入中断系统后,CPU可以继续干以前的事情)
- 当I/O设备完成工作后,会给CPU发送一个中断请求信号。CPU执行完一个指令k后,在指令周期的末尾会例行检查有无中断请求信号。检测到后对该设备发送一个确认信号
- 处理中断:
- 中断隐指令(硬件自动完成):关中断、保存断点PC和PSW、引出中断服务程序(即将PC的值变成中断处理程序的首地址,然后处理器会执行下一条指令,即先取指,取中断处理程序首地址的址)
- 执行中断处理程序(操作系统完成):保护现场(由于到这里时PC和PSW已经被硬件自动存放在系统栈中了,这里的保护现场是指将处理器中的通用寄存器的值保存在栈中,这是因为中断处理程序可能会修改这些寄存器的值)、(根据不同的中断类型)提供中断服务、恢复现场(即恢复那些通用寄存器的值)、开中断、中断返回(即恢复PC和PSW的值)
- 处理完中断后,返回k+1指令,CPU继续执行原来的指令,直到外设准备好下一个数据,再次给CPU发出中断请求信号,然后再重复上述过程即可
-
一个中断的发生会使得处理器硬件和软件都执行一系列操作,具体图如下: