系统调用
应用程序主动向操作系统发出的服务请求
操作系统服务的编程接口
通常由高级语言编写(C或C++)
程序访问通常是通过高层次的API接口而不是直接进行系统调用。
系统调用的实现
每个系统调用都对应一个系统调用编号来维护表的索引
系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和结果
用户不需要知道系统调用的实现,需要设置调用的参数和获取返回结果
操作系统接口的细节大部分都隐藏在应用编程接口后
- 通过运行程序支持的库来管理
系统调用的开销
系统调用的开销是大于函数调用的
- 引导机制
- 建立内核堆栈
- 验证参数
- 内核态映射到用户态的地址空间
- 更新页面映射权限
- 内核态独立地址空间
- TLB
异常
非法指令或者其他原因导致当前指令执行失败(如:内存出错)后的处理请求
中断
来自硬件设备的处理请求
中断、异常和系统调用比较
源头
- 中断:外设
- 异常:应用程序意想不到的行为
- 系统调用:应用程序请求操作提供服务
响应方式
- 异步
- 同步
- 异步或同步
处理机制
- 中断:持续,对用户应用程序是透明的
- 异常:杀死或者重新执行意想不到的一个用程序指令
- 系统调用:等待和持续