1、中断概念
中断是现代操作系统实现并发性的基础之一
-
目的:请求系统服务,实现并行工作,处理突发事件,满足实时要求,都需要打断处理器正常的工作
-
定义:中断是指程序执行过程中,当发生某个事件时,中止CPU上现行程序的运行,引出处理该事件的程序执行的过程
-
实现方式:在提供中断装置的计算机系统中,在每两条指令之间或某些特殊指令执行期间都检查是否有中断事件发生,若无则立即执行下一条或继续执行,否则响应事件并转去处理中断
中断装置:发现中断源并产生中断的硬件,包括:
- 中断逻辑线路
- 中断寄存器
中断源:引起中断的事件
2、中断源
-
按中断事件性质和激活方式 (IBM 大型机)
- 强迫性中断 / 自愿性中断
-
按中断事件来源和实现手段 (Intel x86 PC)
- 硬中断
- 外中断(异步中断/中断)
- 内中断(同步中断/异常) - 软中断
- 信号- 软件中断
- 硬中断
(1)硬中断
由硬件设施来产生的中断请求
-
外中断(异步中断/中断):来自处理器和主存之外
- 与当前程序无关,不可确定事件的发生时间
- 细分为 可屏蔽中断和不可屏蔽中断,具体不同优先级
- 时钟中断,键盘中断,它机中断,设备中断 … -
内中断(同步中断/异常):来自处理器内部的
- 在程序执行过程中产生
- 不可屏蔽,需要立刻响应
- 硬件故障:电源失效,奇偶校验错误 …
- 程序性异常:非法操作,地址越界,除数为0 …
- 访管中断:执行系统调用 …
中断(外中断)与 异常(内中断)的区别:
-
中断是由与现行指令无关的中断信号触发
- 系统不能确定中断事件的发生时间
- 中断与CPU是异步的
- CPU对中断的响应完全是被动的
- 中断的发生于CPU模式无关
- 通常在两条指令之间才能响应中断
- 通常中断处理程序所提供的服务不是当前进程所需要的 -
异常是由处理器控制单元产生,源于现行程序执行指令过程中检测到例外
- 异常与CPU是同步的
- 一条指令执行期间允许响应异常,而且允许多次响应异常
- 异常处理程序提供的服务是为当前进程所用的
- 大部分异常发生在用户态
- 异常会嵌套中断,但中断不会嵌套异常
产生异常时,硬件并不清除中断标志位,此时还允许外部硬件中断
产生中断时,硬件将立即清除中断标志位,以禁止其他硬件中断
(2)软中断
不必由硬件产生中断源而引发的中断,软件对硬中断机制的模拟,实现宏观的异步执行。
-
信号机制 (进程间通信)
- 信号发送者相当于中断源
- 信号接收者则是另一个进程 -
软件中断 (线程调度,延迟调用和异步执行)
- Linux bottom half (softirq)
- Windows Dispathch/DPC, APC
(3)软硬中断区别
- 中断(硬件,异步):
用于外部设备对CPU的中断,转向中断处理程序执行 - 异常(硬件,同步):
因指令执行不正确而中断,转向异常处理程序执行 - 软件中断(软件,进程间调度):
决定不同进程、线程间的调度执行顺序 - 信号(软件,进程间通信):
用于内核或进程对某个进程的重点,向进程同时某个特定事件发生或迫使进程执行信号处理程序
(4)中断与信号
-
相同:
- 概念一致,CPU接收中断,进程接收信号
- 都是异步执行
- 中断:每条指令结束时安排中断查询
- 信号:异常处理末尾或者时钟中断结束
- 均采用“向量表”机制实现中断处理
- 均采用“屏蔽”措施
-
不同:
- 前者由硬件和软件结合实现,后者则完全由软件实现
- 中断向量表和处理程序位于系统空间
- 信号向量表位于系统空间,信号处理程序则由应用程序提供,并在用户空间执行
3、中断和异常的响应及服务
区分中断和异常:
- 中断:指令执行结束后检查中断寄存器是否有中断事件发生
若无或者中断被屏蔽,继续执行程序的后续指令
若有则暂停当前程序的执行,转向内核的中断处理程序 - 异常:它是在执行指令时由指令本身发生的,指令的实现或执行逻辑一旦发生异常情况,立即转向内核的异常处理程序
所有计算机系统都采用硬件和软件(硬件中断装置和软件中断处理程序)结合的方法实现中断处理 :
- 发现中断源:未屏蔽中断时,由硬件发现中断/异常事件
若存在多个中断源,则根据中断优先级先后响应 - 保护现场:保存PSW至核心栈
- 转向中断/异常处理事件:基于中断向量,查询中断向量表,获取保存在系统空间的中断/异常处理程序
- 恢复现场:恢复PSW,返回中断点继续执行
- 访管指令:执行下一条指令(当用户进程取得CPU时间时)
- 致命故障:直接结束进程
- 页面故障:返回发生异常的指令,继续进行
4、中断事件处理原则
![](https://i-blog.csdnimg.cn/blog_migrate/5644dbb9c3e8e6996beb5d395f5ccafc.png#pic_center)
中断 | 原则 |
---|---|
硬件故障中断事件 | ![]() |
I/O中断事件 | ![]() |
时钟中断 | ![]() |
程序性中断事件 | ![]() |
访管中断 | ![]() |
5、中断优先级和多重中断
中断优先级的实现由软硬件结合:
- 硬件:根据排定的优先次序做一个硬件链式排定器,当有高一级的中断事件产生时,封住比它优先级低的所有中断源
- 软件:编写一个查询程序,依据优先级次序自高到低进行查询
中断的屏蔽:
- 中断屏蔽是指产生并提出中断请求后,CPU允许响应或禁止响应的状态位
- 计算机均配置可编程中断控制器,通过指令设置可编程中断控制器的屏蔽码
- 中断的屏蔽是根据程序状态字中的中断屏蔽位来实现的。通常允许中断时屏蔽位为1,禁止中断时,屏蔽位为0
中断寄存器:用于记录中断事件
- 中断字:中断寄存器的内容,每一位对应一个中断事件。
- 每当一条机器指令执行结束的时刻,中断控制部件扫描中断字,查看是否有中断事件发生,若有则处理器便响应这个中断请求
多重中断:中断同时出现、中断虽不同时出现却被硬件同时发现、其他中断正在处理期间,CPU又响应了新的中断事件,于是暂停正在运行的中断处理程序,转去执行新的中断处理程序,这就是多重中断,又称中断嵌套
原则:优先级高的允许打短优先级低的,但优先级低的不允许打短优先级高的
![](https://i-blog.csdnimg.cn/blog_migrate/814056cf1f9cd6346ef68cce3f0a03ac.png#pic_center)
多重中断事件处理:
- 串行处理:同一优先级的不同中断,通常由同一个中断处理程序按自左至右的顺序逐个处理并清除之。
- 嵌套处理:在运行某些中断处理程序时仍然能响应中断,系统保持被中断的中断处理程序现场,然后转向处理新中断事件的中断处理程序,以便在处理结束时可以返回原来的中断处理程序继续运行。
- 即时处理:如果在处理中断程序时出现程序性中断,表示当前程序有异常,需要对其立即响应并处理。