文章目录
- 程序中断🎃
- 中断概念
- 中断功能(作用)
- 中断请求
- 中断源
- 中断分类
- 外中断
- 非屏蔽中断和可屏蔽中断
- 陷入(内中断)
- 硬件中断和软件中断
- 关系整理🎈
- 中断判优🎈中断优先级
- CPU响应中断的条件
- 外中断实现思路🎈
- 中断隐指令 及其工作
- ①关中断
- ②保存断点
- ③引出中断服务程序
- 中断向量(入口地址)
- 中断向量表(入口地址表)
- 中断处理过程
- 🎈对多中断源的处理方式
- 1)屏蔽(禁止)中断/单重中断
- 2)嵌套中断/多重中断
- 屏蔽字
- 优先级控制
- 🎈中断处理程序(操作系统部分)
- (1)测定是否有未响应的中断信号
- (2)保护被中断进程的CPU环境
- (3)转入相应的设备处理程序。
- (4)中断处理
- (5)恢复CPU的现场并退出中断
- 小结:程序中断方式的思想
- 🎈例:多重中断和中断屏蔽技术
- 例
程序中断🎃
-
程序中断方式中断是现代计算机有效合理地发挥效能和提高效率的一个十分重要的功能。
-
CPU中通常设有处理中断的机构——中断系统,以解决各种中断的共性问题。
中断概念
-
计算机执行现行程序的过程中,出现某些急需要处理的
- 异常情况
- 特殊请求
-
暂时终止现行程序,而转去对这些情况进行处理
-
处理完后在返回到现行程的断点处,继续执行原程序
中断功能(作用)
- 早期:
- 处理数据传送
- 现在
- 实现cpu与IO设备的并行工作(parallel)
- 处理硬件故障和软件错误
- 实现人机交互
- 用户干预机器需要借助于中断系统
- 实时处理需要借助中断系统来实现快速响应
- 实现应用程序和操作系统(管态程序)之间的切换
- 称为软中断
- 多处理器系统中各个处理器之间的信息交流和任务切换
中断请求
- 中断请求:是指中断源向CPU发送中断请求信号。
中断源
- 中断源:请求cpu中断的设备或者事件
- 一台计算机允许有多个中断源
- 每个中断源向cpu发送中断请求的时间是随机的
中断分类
- 根据中断源的类别,可把中断源分为内中断和外中断两种。
- 每个中断源向CPU发出中断请求的时间是随机的。
- 为记录中断事件并区分不同的中断源,中断系统需对每个中断源设置中断请求标记触发器INTR,当其状态为“1”时,表示中断源有请求。
- 这些触发器可组成中断请求标记寄存器,该寄存器可集中在CPU中,也可分散在各个中断源中。
外中断
-
中断(外中断)是指:CPU对IO设备发来的中断信号的一种响应。
-
CPU暂停正在执行的程序,保留CPU环境后,自动地转去执行该IO设备的中断处理程序。
-
执行完后,再回到断点,继续执行原来的程序。
- IO设备可以是字符设备,也可以是块设备、通信设备等。
-
由于中断是由外部设备引起的,故又称外中断。
-
外中断是指来自处理器和内存以外的部件引起的中断
- 包括I/O设备发出的I/O中断
- 外部信号中断(如用户按Esc键)
- 以及各种定时器引起的时钟中断等。
- 外中断在狭义上一般称为中断(后文若未说明,一般是指外中断)。
- 硬件中断属于外中断
非屏蔽中断和可屏蔽中断
- 非屏蔽中断:非屏蔽中断是一种硬件中断,此种中断通过不可屏蔽中断请求NMI控制,不受中断标志位IF的影响,即使在关中断(IF=0)的情况下也会被响应。
- 可屏蔽中断:可屏蔽中断也是一种硬件中断,此种中断通过中断请求标记触发器INTR控制,且受中断标志位IF的影响,在关中断情况下不接受中断请求。
- 也就是说,可屏蔽中断和非屏蔽中断均是外中断。
陷入(内中断)
-
由CPU内部事件(运算过程中)所引起的中断,称为内中断或陷入(trap)
-
与(外)中断一样,若系统发现了有陷入事件,CPU也将暂停正在执行的程序,转去执行该陷入事件的处理程序。
-
中断和陷入的主要区别是信号的来源,即是来自CPU外部,还是CPU内部。
-
内中断主要是指在处理器和内存内部产生的中断包括
- 程序运算引起的各种错误
- 如地址非法、
- 校验错、
- 页面失效、
- 存取访问控制错、
- 算术操作溢出、
- 数据格式非法、
- 除数为零、
- 非法指令、
- 用户程序执行特权指令、
- 分时系统中的时间片中断及用户态到核心态的切换
- 程序出错
- 地址越界
- 电源故障
- 等
- 程序运算引起的各种错误
硬件中断和软件中断
-
硬件中断:通过外部的硬件产生的中断。
- 属于外中断
-
软件中断:通过某条指令产生的中断,这种中断是可以编程实现的
- 而内中断是cpu运算引起错误导致
- 软件中断是内中断。
关系整理🎈
-
-
内中断
- 软件中断
-
外中断
- 硬件中断
- 非屏蔽中断
- 可屏蔽中断
- 硬件中断
中断判优🎈中断优先级
-
中断系统在任一瞬间只能响应一个中断源的请求。
-
由于许多中断源提出中断请求的时间都是随机的,因此当多个中断源同时提出请求时,需通过中断判优逻辑确定响应哪个中断源的请求,
- 例如故障中断的优先级别较高,然后是I/O中断。
- 中断判优既可以用硬件实现,又可用软件实现。
- 硬件实现是通过硬件排队器实现的,它既可以设置在CPU中,又可以分散在各个中断源中,
- 软件实现是通过查询程序实现的
-
中断响应优先级是指cpu响应中断请求的先后顺序
- 细分:
- 响应优先级
- 在硬件上是固定的,不便改动
- 处理优先级
- 可以利用中断屏蔽技术动态调整,以实现多重中断
- 响应优先级
- 细分:
-
经常会有多个中断信号源,每个中断源对服务要求的紧急程度并不相同,
- 例如,键盘终端的中断请求的紧急程度不如打印机,而打印机中断请求的紧急程度又不如磁盘等。
- 为此,系统就需要为它们分别规定不同的优先级。
-
一般来说:
不可屏蔽中断>内部异常>可屏蔽中断
- 内部异常
硬件中断>软件中断>
- 内部异常
DMA中断请求优先于IO设备传送的中断请求
- IO传送类中断
高速设备>低速设备
输入设备>输出设备
实时设备>普通设备
CPU响应中断的条件
- CPU在满足一定的条件下响应中断源发出的中断请求,并经过一些特定的操作,转去执行中断服务程序。
- CPU响应中断必须满足以下3个条件:
- ①中断源有中断请求。
- ②CPU允许中断及开中断。
- ③一条*指令执行完毕,且没有更紧迫的任务*。
外中断实现思路🎈
- 注意:I/O设备的就绪时间是随机的,而CPU在统一的时刻即每条指令执行阶段结束前向接口发出中断查询信号,以获取I/O的中断请求,
- 也就是说,CPU响应中断的时间是在每条指令执行阶段的结束时刻。
- 这里说的中断仅指外中断,内中断不属于此类情况。
中断隐指令 及其工作
- CPU响应中断后,经过某些操作,转去执行中断服务程序。
- 这些操作是由硬件直接实现的,我们将它称为中断隐指令。
- 中断隐指令并不是指令系统中的一条真正的指令,它没有操作码
- 所以中断隐指令是一种不允许也不可能为用户使用的特殊指令。它所完成的操作如下:
①关中断
- 在中断服务程序中,为了保护中断现场(即CPU主要寄存器中的内容)期间不被新的中断所打断,必须关中断,从而保证被中断的程序在中断服务程序执行完毕后能接着正确地执行。
②保存断点
- 为保证在中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来程序的断点[即程序计数器(PC)的内容]保存起来。
③引出中断服务程序
- 引出中断服务程序(中断服务程序寻址)的实质是,取出中断服务程序的入口地址并传送给程序计数器(PC)
中断向量(入口地址)
- 不同的设备有不同的中断服务程序
- 每个中断服务程序都有一个入口地址,CPU必须找到这个入口地址,即中断向量
中断向量表(入口地址表)
-
把系统中的全部中断向量集中存放到存储器的某个区域内,这个存放中断向量的存储区就称为中断向量表,即中断服务程序入口地址表。
-
CPU响应中断后,中断硬件会自动将中断向量地址传送到CPU,由CPU实现程序的切换,这种方法称为中断向量法,
-
采用中断向量法的中断称为向量中断。
-
注意:
- 中断向量是中断服务程序的入口地址,
- 中断向量地址是指中断服务程序的入口地址的地址。
-
为了处理上的方便,通常是为每种设备配以相应的中断处理程序
-
并把该程序的入口地址放在中断向量表的一个表项中,并为每一个设备的中断请求规定一个(标识:)中断号,它直接对应于中断向量表的一个表项中。
-
当IO设备发来中断请求信号时,由中断控制器确定该请求的中断号
-
根据该设备的中断号去查找中断向量表,从中取得该设备中断处理程序的入口地址,这样便可以转入中断处理程序执行。
中断处理过程
-
不同计算机的中断处理过程各具特色,大致步骤
-
①关中断。
- 处理器响应中断后,首先要保护程序的现场状态,在保护现场的过程中,CPU不应响应更高级中断源的中断请求。
- 否则,若现场保存不完整,在中断服务程序结束后,也就不能正确地恢复并继续执行现行程序。
-
②保存断点。
- 为保证中断服务程序执行完毕后能正确地返回到原来的程序,必须将原来的程序的断点保存起来。
- 断点可以压入堆栈,也可以存入主存的特定单元中。
-
③中断服务寻址(引出中断服务程序)
- 引出中断服务程序的实质是,取出中断服务程序的入口地址送入程序计数器(PC)。
- 通常有两种方法寻址中断服务程序的入口地址:
- 硬件向量法和软件查询法。
- 硬件向量法通过硬件产生中断向量地址,再由中断向量地址找到中断服务程序的入口地址。
- 软件查询法用软件编程的办法寻找入口地址。
- 硬件向量法和软件查询法。
- 注意:硬件产生的实际上是中断类型号,而中断类型号指出了中断向量存放的地址,因此能产生中断向量地址。
-
④保存现场和屏蔽字
- 进入中断服务程序后首先要保存现场
- 现场信息
- 一般是指用户可见的工作寄存器的内容,
- 包括
- 程序状态字
- 中断屏蔽寄存器和
- CPU中某些寄存器的内容。
- 存放着程序执行到断点处的现行值
- 现场信息可以用指令直接访问,通常在中断服务程序中通过指令把他们保存到栈中,由**软件实现**
- 断点信息
- 由cpu在中断响应时自动保存到栈或者指定的寄存器中,由**硬件实现**
-
⑤开中断。
- 允许更高级中断请求得到响应,实现中断嵌套。
- 注意这个阶段是在前一阶段:
保存现场和屏蔽字
之后开放
-
⑥执行中断服务程序。
- 这是中断请求的目的。
-
⑦关中断(保卫下一阶段工作)
- 保证在恢复现场和屏蔽字时不被中断。
-
⑧恢复现场和屏蔽字。
- 将现场和屏蔽字恢复到原来的状态。
-
⑨开中断、中断返回。
- 中断服务程序的最后一条指令通常是一条中断返回指令
- 使其返回到原程序的断点处,以便继续执行原程序。
-
其中,
- ①〜③在CPU进入中断周期后,由中断隐指令(硬件自动)完成;
- ④〜⑨由中断服务程序完成(软件完成)。
- 注意:
- 恢复现场是指在中断返回前,必须将寄存器的内容恢到中断处理前的状态,这部分工作由中断服务程序完成。
- 中断返回由中断服务程序的最后一条中断返回指令完成。
🎈对多中断源的处理方式
- 对于多中断信号源的情况,当处理机正在处理一个中断时,又来了一个新的中断请求,这时应如何处理?
- 例如,当系统正在处理打印机中断时,又收到了优先级更高的磁盘中断信号。
- 对于这种情况,可有两种处理方式:
- 屏蔽(禁止)中断
- 嵌套中断
1)屏蔽(禁止)中断/单重中断
-
当处理机正在处理一个中断时,将屏蔽掉所有的中断,即处理机对任何新到的中断请求,都暂时不予理睬,而让它们等待。
-
直到处理机已完成本次中断的处理后,处理机再去检查是否有中断发生。
-
若有,再去处理新到的中断,若无,则返回被中断的程序。
-
在该方法中,所有中断都将按顺序依次处理。
-
其优点是简单,但不能用于对实时性要求较高的中断请求。
2)嵌套中断/多重中断
屏蔽字
- 现代计算机一般使用中断屏蔽技术
- 每个中断源都有一个屏蔽触发器
- 1表示屏蔽(该中断源的请求 1 → D e n y 1\to{Deny} 1→Deny)
- 0表示可以正常申请中断( 0 → O K 0\to{OK} 0→OK)
- 所有屏蔽触发器组合在一起,构成一个屏蔽字寄存器
- 屏蔽字寄存器的内容称为屏蔽字
- 每个中断源都有一个屏蔽触发器
优先级控制
- 在设置了中断优先级的系统中,通常按这样的规则来进行优先级控制;
- (1)当同时有多个不同优先级的中断请求时,CPU优先响应最高优先级的中断请求;
- (2)高优先级的中断请求可以抢占正在运行的低优先级中断的处理机,
- 该方式类似于基于优先级的抢占式进程调度。
- 例如,处理机正在处理打印机中断,当有磁盘中断到来时,可暂停对打印机中断的处理,转去处理磁盘中断。
- 如果新到的是键盘中断,由于它的优先级低于打印机的优先级,故处理机继续处理打印机中断。
- 对于同级别的多个中断,它们将按照先来后到的顺序,即相互屏蔽
- 这些中断分别标记位KaTeX parse error: Undefined control sequence: \set at position 17: …_i^{[k]};i,j\in\̲s̲e̲t̲{1,2,\cdots},k表示优先级同为k
- 那么 X i 比 X i + j X_i比X_{i+j} Xi比Xi+j先处理
- 这些中断分别标记位KaTeX parse error: Undefined control sequence: \set at position 17: …_i^{[k]};i,j\in\̲s̲e̲t̲{1,2,\cdots},k表示优先级同为k
🎈中断处理程序(操作系统部分)
- 当一个进程A请求I/O操作时,该进程A将被挂起
- 直到I/O设备完成I/O操作后,设备控制器便向CPU发送一个中断请求(表示资源可用了)
- CPU响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除进程A的阻塞状态。
- 中断处理程序的处理过程可分成以下几个步骤:
(1)测定是否有未响应的中断信号
- 每当设备完成一个字符(字或数据块)的读入(或输出),设备控制器便向处理机发送一个中断请求信号。
- 请求处理机将设备已读入的数据传送到内存的缓冲区中(读入),或者请求处理机将要输出的数据(输出)传送给设备控制器。
- 程序每当执行完当前指令后,处理机都要测试是否有未响应的中断信号。
- 若没有,继续执行下一条指令。
- 若有,则停止原有进程的执行,准备转去执行中断处理程序,为把处理机的控制权转交给中断处理程序做准备。
(2)保护被中断进程的CPU环境
- 在把控制权转交给中断处理程序之前,需要先保护被中断进程的CPU环境,以便以后能恢复运行。
- 首先需要保存的是,从中断现场恢复到当前进程运行所需要的信息。
- 通常由硬件自动将以下内容保存在中断保留区(栈)中。
- 处理机状态字(PSW)
- 保存在程序计数器(PC)中下一条指令的地址NextAddress,简记为N+1(这样方便从中断处理程序换源断点现场信息和断点信息,仿佛中断没有发生过一样回来继续执行的时候可以直接执行)
- 然后,把被中断进程的CPU现场信息,即,将包括所有CPU寄存器的内容都压入中断栈中,比如
- 通用寄存器
- 段寄存器等
- 在中断处理时可能会占用到这些寄存器,因此要先将原内容保存起来
- 下图:该程序是指令在N位置时被中断的,程序计数器中的内容为N+1,所有寄存器的内容都被保留在栈中。
(3)转入相应的设备处理程序。
- 由处理机对各个中断源进行测试,以确定引起本次中断的I/O设备,并向提供中断信号的设备发送确认信号。
- 在该设备收到确认信号后,就立即取消它所发出的中断请求信号。
- 然后,将相应的设备中断处理程序的入口地址装入到程序计数器中。
- 这样,当处理机运行时,便可自动地转向中断处理程序。
(4)中断处理
- 对不同的设备,有不同的中断处理程序。
- 该程序首先从设备控制器中读出设备状态,以判别本次中断是正常完成中断还是异常结束中断。
- 若是正常完成,中断程序便做结束处理。
- 假如这次是字符设备的读操作,则来自输入设备的中断是表明该设备已经读入了一个字符(字)的数据,并已放入数据寄存器中。
- 此时中断处理应将该数据传送给CPU,再将它存入缓冲区中,并修改相应的缓冲区指针,使其指向下一个内存单元。若还有命令,可再向控制器发送新的命令,进行新一轮的数据传送。
- 若是异常结束中断,则根据发生异常的原因做相应的处理。
(5)恢复CPU的现场并退出中断
- 当中断处理完成以后,需要恢复CPU的现场,退出中断。
- 但是,此刻是否返会到被中断的进程X,取决于两个因素:
- ①本中断是否采用了屏蔽(禁止)中断方式,若是,就会返回被中断的进程X。
- ②采用的是中断嵌套方式,
- 如果没有优先级更高的中断请求IO,在中断完成后,仍会返回被中断的进程X;
- 反之,系统将处理优先级更高的中断请求。
- 如果是要返回到被中断的进程,可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中,其中包括该程序下一次要执行的指令的地址N+1、处理机状态字PSW,以及各通用寄存器和段寄存器的内容。
- 这样,当处理机再执行本程序时,便从N+1处开始,最终返回到被中断的程序。
小结:程序中断方式的思想
-
CPU在程序中安排好于某个时刻启动某台外设(外设启动就绪是需要一定的时间)
- 然后CPU继续执行原来的程序
- 不需要像程序查询方式那样一直等待外设准备就绪。
-
一旦外设完成数据传送的准备工作,就主动向CPU发出中断请求,请求CPU为自己服务。
-
在可以响应中断的条件下,CPU暂时中止正在执行的程序,转去执行中断服务程序为外设服务
- 在中断服务程序中完成一次主机与外设之间的数据传送**,传送完成后,CPU返回原来的程序
🎈例:多重中断和中断屏蔽技术
- 中断屏蔽技术主要用于多重中断。CPU 要具备多重中断的功能,必须满足下列条件:
- 在中断服务程序中提前设置开中断指令。
- 优先级别高的中断源有权中断优先级别低的中断源。
例
-
设某机有4个中断源A、B、C、D,其硬件排队优先次序为A>B>C>D,现要求
将中断处理次序改为D>A>C>B。
1)写出每个中断源对应的屏蔽字
2)根据时间轴给出的4个中断源的请求时刻,画出CPU执行程序的轨迹(**程序§-时间(t)**图像)(设每个中断源的中断服务程序时间长头20us)- 4个中断源对应的请求时刻:
- B:5
- D:10
- A:35
- C:60
- 4个中断源对应的请求时刻:
-
解
-
1)在中断处理次序改为D>A>C>B后,逐个分析屏蔽情况
-
D具有最高优先级
- 可以屏蔽其他所有中断,且不能中断自身,(即屏蔽D,A,C,B全部)
- 因此D对应的屏蔽字为1111;
-
A屏蔽A,C,B,
- A对各个中断源的屏蔽二进制代码
- A:1
- B:1
- C:1
- D:0
- 因此A对应的屏蔽字为1110,
- A对各个中断源的屏蔽二进制代码
-
C屏蔽C,B
- C对各个中断源的屏蔽二进制代码:
- A:0
- B:1
- C:1
- D:0
- C的屏蔽字为0110
- C对各个中断源的屏蔽二进制代码:
-
B屏蔽自身(B)
- B:1
- 其余全为1
- B的屏蔽字为0100
-
-
-
2)根据中断源发出请求的时间顺序以及处理不同中断源的优先级进行多重中断分析
- 在时刻5,B发中断请求,获得CPU;
- 在时刻10,D发中断请求,
- 5~10时间段内,cpu执行了5us的任务B
- 此时B还未执行完毕(还需要15=20-5)us,
- 根据处理优先级,D的优先级高于B,于是D中断B而获得CPU;
- D占用20us(此时时间线到了10+20=30us)完成任务后范围到B的中断程序处继续执行
- 在时刻30,D执行完毕,B继续获得CPU
- 时刻35,A发出中断请求
- 30~35时间段内,cpu执行了5us的任务B
- 此时B还未执行完毕(还需要15-5=10us)
- 根据处理优先级,A的优先级更高,
- 于是A中断B而获得CPU;
- 由于下一个中断信号是在时刻60到达,60-35=25>20
- 即A的任务可以完成,而且还有盈余的时间回到被A中断的B串继续执行25-20=5us的时间
- 时刻55(=35+20),A执行完毕
- 回到B执行
- 时刻60,C发出中断
- 55~60时间段,cpu执行了5us的任务B
- 此时B还未结束(还有10-5=5us)
- 但是C优先级更高,C中断B(抢夺了B的cpu资源)
- C发出的是最后一个中断信号
- 知道执行完毕(耗时20us)
- 回到被中断的B任务
- 时刻80=(60+20),C任务结束
- 回到被C中断的断点继续执行B
- 此时B还需要5us,
- 因此到了时刻85,结束全部任务
-
- 纵坐标就按照字母顺序从低到高升序排列即可