Loading... # 中断与异常 ## 中断机制的诞生 早期计算机:各程序只能串行执行,系统资源利用率低 为解决上述问题,发明了操作系统,引入中断机制,**实现多道程序并发执行**。**发生中断意味着需要操作系统的介入** ## 中断的概念和作用 * 中断发生时,**CPU立即进入核心态** * 中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理 * 对于不同的中断信号,会进行不同的处理 中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权 用户态$\to$核心态:通过中断实现,且是**唯一途径** 核心态$\to$用户态:通过执行一个特权指令,将程序状态字(PSW)的标志位设置为用户态 ## 中断的分类 ```mermaid graph LR A(中断)-->B["内中断(也称异常、例外、陷入)"] A-->C["外中断(中断)"] B-->D["自愿中断——指令中断"] B-->E["强迫中断"] E-->F["硬件故障(eg:缺页)"] E-->G["软件中断(eg:整数除0)"] C-->H["外设请求(eg:I/O操作完成后发出的中断信号)"] C-->I["人工干预(eg:用户强行终止一个进程)"] ``` 判断中断信号是来自CPU内部还是外部来判断是内/外中断 另一种分类方式 ![0CA93096ADEF81054586CA8CF660683B.png](http://xherlock.top/usr/uploads/2022/02/2249142540.png) ## 外中断的处理过程 1. 执行完每个指令后,CPU都要检查当前是否有外部中断信号 2. 若检测到外部中断信号,则需要保护被中断进程的CPU环境 3. 根据中断信号类型转入相应的中断处理程序 4. 恢复原进程的CPU环境并退出中断,返回原进程继续往下执行 # 系统调用 ## 什么是系统调用,有啥用? 系统在的各种共享资源都由操作系统都由操作系统统一掌管,因此在用户程序中,凡是与资源有关的操作,都必须通过系统调用的方式向操作系统提出服务请求,由操作系统代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作 系统调用相关处理涉及到对系统资源的管理、对进程的控制,需要执行一些特权指令才能完成,因此系统调用的相关处理需要在核心态下进行 ## 分类 * 设备管理:完成设备的请求、释放、启动等功能 * 文件管理:完成文件的读写、创建、删除等功能 * 进程控制:完成进程的创建、撤销、阻塞、唤醒等功能 * 进程通信:完成进程之间的消息传递、信号传递等功能 * 内存管理:完成内存的分配、回收等功能 ## 系统调用与库函数的区别 ![D796CA914C07B3575C66CAB07D912C13.png](http://xherlock.top/usr/uploads/2022/02/646533527.png) ## 系统调用背后的过程 高级语言--编译-->汇编语言 传递系统调用参数-->执行陷入指令(用户态)-->执行系统调用相应服务程序(核心态)-->返回用户程序 ![FF1811FADEFD7A4723CBDD90212C1273.png](http://xherlock.top/usr/uploads/2022/02/916190154.png) 注意: * 陷入指令是在用户态执行的,执行陷入指令后立即引发一个内中断,从而CPU进入核心态 * 发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行 * 陷入指令是唯一一个只能在用户态执行,而不可在核心态执行的指令 最后修改:2022 年 02 月 27 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏