操作系统的中断、异常和系统调用
中断
- 硬件
- 软件
- 保存当前处理状态
- 中断服务程序处理
- 清除中断标记
- 恢复之前保存的处理状态
异常
异常编号
系统调用
应用程序调用printf(),会触发write()。
程序访问主要是通过高层次的api接口而不是直接进行系统调用。
- win32 api 用于 Windows
- POSIX api 用于 Unix,Linux,MacOSX
- Java api 用于java虚拟机(JVM)
- 其实也实现调用java api随后调用对应操作系统的api
操作系统如何完成系统调用(用户态到<--->内核态)
- 通常情况,与每个系统调用相关的序号
- 系统调用接口调用内核态中预期的系统调用
- 用户不需要知道系统调用是如何实现的
- 只需要获取API和了解操作系统讲什么作为返回结果
- 操作系统接口细节大部分都隐藏在API中
- 系统调用中,操作系统和应用程序的堆栈是不同的。
跨越操作系统便边界的代价
- 在执行时间上的开销超过程序调用
- 开销:
- 建立 中断/异常/系统调用 号与对应服务例程映射关系的初始化开销
- 建立内核堆栈
- 验证参数
- 内核态映射到用户态的地址空间
- 内核独立地址空间
操作系统的中断、异常和系统调用
原文:https://www.cnblogs.com/deusjin/p/13188672.html