中断与异常机制
中断异常机制介绍
操作系统是由 “中断驱动” 或者 “事件驱动” 的
主要作用:
- 及时处理设备发来的中断请求
- 可使 OS 捕获用户程序提出的服务请求
- 防止用户程序执行过程中的破坏性工作
- 。。。
特点:
- 随即发生的
- 自动处理的(硬件来完成)
- 可恢复的
为何引入中断与异常?
中断的引入:为了支持CPU和设备之间的并行操作
当 CPU 启动设 备进行输入/输出后,设备便可以独立工作,CPU 转去处理与此次输入/输出不相关的事情;当设备完成输入/输出后,通过向 CPU 发中断报郜此次输入/输出的结果,让 CPU 决定如何处理以后的事情
异常的引入:表示CPU执行指令时本身出现的问题
如算术溢出、除零、取数时的奇偶错,访存地址时越界或执行了 “陷入指令” 等,这时硬件改变了 CPU 当前的执行流程,转到相应的错误处理程序或异常处理程序或执行系统调用
早期两者都是中断,后来有了区分,区分的标准是主要是产生的原因
事件分类
- 中断(外中断)
- IO 中断。比如键盘上按 ctrl+c、网卡接收到数据包、打印机结束、读盘结束
- 时钟中断。比如设置的定时器到时间了、cpu 上运行的时间片时间到了
- 硬件故障。比如笔记本电脑电池耗尽报警、读内存奇偶检验错误
- 异常(内中断)
- 系统调用
- 页故障/页错误
- 保护性异常
- 断点异常
- 其他程序的异常,如算术溢出等
中断:外部事件,正在运行的程序所不期望的
异常:正在执行的指令引发的
![image-20211021115751615](https://i.loli.net/2021/10/21/tYPU5HKRLrNCDZF.png)
中断异常机制工作原理
中断异常机制是现代计算机系统的核心机制之一。
硬件和软件相互配合而使计算机系统的已充分发挥能力。
硬件主要工作是响应。
捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序。
软件的主要工作是处理。
识别中断/异常类型并完成相应的处理。
硬件部分
![image-20211021111113102](https://i.loli.net/2021/10/21/oQm8vDK4tJUTYyz.png)
中断响应示意图
![image-20211021110245697](https://i.loli.net/2021/10/21/BJ9pTGbfhqsNgCH.png)
- 设备发送中断信号
- 中断硬件部件保存现场,把内存保存到了系统堆栈内,主要是 PSW(程序状态字) + PC
- 中断硬件根据中断码查中断向量表,得到对应的处理程序
- 把中断处理程序入口地址等信息推送到相应的寄存器
- 执行中断处理程序(从中断断点开始执行,完事之后继续执行)
软件部分
中断处理程序
设计操作系统时,为每一类中断/异常时间都编好相应的处理程序,并设置好中断向量表
系统运行时若响应中断,中断硬件部件将 CPU 控制权转给中断处理程序:
- 保存相关寄存器信息
- 分析中断/异常的具体原因
- 执行对应的处理功能
- 恢复现场,返回被事件打断的程序
小结
以设备输入输出中断为例:
- 打印机给 CPU 发中断信号
- CPU 处理完当前指令后检测到终端,判断出中断来源并向相关设备发确认信号
- CPU 开始为软件处理终端做准备:
- CPU 状态被切换为内核态
- 在系统栈中保存被中断程序的重要上下文环境,主要是程序计数器 PC,程序状态字 PSW
- CPU 根据中断码查中断向量表,获得与该中断相关的处理程序的入口地址,并将 PC 设置成该地址,新的指令周期开始时,CPU 控制转移到中断处理程序
- 中断处理程序开始工作
- 在系统栈中保存现场信息
- 检查 I/O 设备的状态信息,操纵 I/O 设备或者在设备和内存之间传送数据等等
- 中断处理结束后,CPU 检测到中断返回指令,从系统栈中恢复被中断程序的上下文环境,CPU 状态恢复成原来的状态,PSW 和 PC 恢复成中断前的值,CPU 开始一个新的指令周期
1-6 中只有 5 工作在软件部件,其余都工作在硬件部件
参考
沉舟侧畔千帆过,病树前头万木春。