调用、异常、中断
对比
- 系统调用:应用程序主动向操作系统发出服务请求(来源:应用程序)
- 异常:非法指令或者其他坏的处理状态(来源:应用程序意想不到的行为)
- 中断:来自不同的硬件设备的计时器和网络的中断 (来源:外设)
概念 | 来源 | 处理时间 | 响应 | |
---|---|---|---|---|
调用 | 应用程序主动向操作系统发出服务请求 | 应用程序 | 异步或同步 | 等待和持续 |
异常 | 非法指令或者其他坏的处理状态 | 应用程序意想不到的行为 | 同步 | 杀死或者重新执行意想不到的应用程序指令 |
中断 | 来自不同的硬件设备的计时器和网络的中断 | 外设 | 异步 | 持续,对用户应用程序是透明的 |
过程
中断
- 硬件
- 设置中断标记
- 1.将内部、外部事件设置中断标记
- 2.中断事件ID
- 设置中断标记
- 软件
- 保存当前处理状态
- 中断服务程序处理
- 清除中断标记
- 恢复之前保存的处理状态
异常
- 保存现场
- 异常处理
- 杀死产生了异常的程序
- 重新执行异常指令
- 恢复现场
系统调用
- 例子:应用程序调用printf(), 会触发系统调用write()
- 程序访问主要是通过高层次的API接口而不是直接进行系统调用
- 通常情况下,与每个系统调用相关的序号,系统调用接口根据这些序号来维护表的索引
- 系统调用接口调用内核态中预期的系统调用,并返回系统调用的状态和其他任何返回值
- 用户不需要知道系统调用是如何实现的,只需要获取API和了解操作系统将什么作为返回结果,
操作系统接口的细节大部分都隐藏在API中 - 用户态 内核态
中断
概念与作用
- 当中断发生时,CPU立即进入核心态
- 当中断发生时,当前运行的进程暂停运行, 并由操作系统内核对中断进行处理
- 对于不同的中断信号,会进行不同的处理
- 发生中断,就意味着需要操作系统介入,开展管理工作,由于操作系统的管理工作需要使用特权指令,因此CPU从用户态转为核心态,中断可以使用户态切换为核心态,使操作系统获取计算机的控制权。有了中断,才能实现躲到程序的并发执行
- 用户态到内核态的转化是通过中断实现的,并且中断是唯一途径
- 核心态到用户态的转化是通过执行特权命令,将程序状态字的标志位设置成用户态
分类
- 第一种分类
- 第二种分类
系统调用
- 系统调用是操作系统提供给应用程序使用的接口,可以理解为一种可供应用程序调用的特使函数,应用程序可以发出系统调用请求来获取操作系统的服务