操作系统的中断异常和系统调用
Posted deusjin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统的中断异常和系统调用相关的知识,希望对你有一定的参考价值。
操作系统的中断、异常和系统调用
中断
- 硬件
- 设置中断标记【CPU初始化】
- 将内部、外部事件设置中断标记
- 中断事件的ID
- 设置中断标记【CPU初始化】
- 软件
- 保存当前处理状态
- 中断服务程序处理
- 清除中断标记
- 恢复之前保存的处理状态
异常
异常编号
- 保存现场
- 异常处理
- 杀死产生异常程序
- 重新执行异常指令
- 恢复现场
系统调用
应用程序调用printf(),会触发write()。
程序访问主要是通过高层次的api接口而不是直接进行系统调用。
- win32 api 用于 Windows
- POSIX api 用于 Unix,Linux,MacOSX
- Java api 用于java虚拟机(JVM)
- 其实也实现调用java api随后调用对应操作系统的api
操作系统如何完成系统调用(用户态到<--->内核态)
- 通常情况,与每个系统调用相关的序号
- 系统调用接口根据序号维护表的索引
- 系统调用接口调用内核态中预期的系统调用
- 并返回系统调用的状态和其他任何返回值
- 用户不需要知道系统调用是如何实现的
- 只需要获取API和了解操作系统讲什么作为返回结果
- 操作系统接口细节大部分都隐藏在API中
- 系统调用中,操作系统和应用程序的堆栈是不同的。
跨越操作系统便边界的代价
- 在执行时间上的开销超过程序调用
- 对应中断号,堆栈切换保存与恢复
- 开销:
- 建立 中断/异常/系统调用 号与对应服务例程映射关系的初始化开销
- 建立内核堆栈
- 验证参数
- 内核态映射到用户态的地址空间
- 更新页面映射
- 内核独立地址空间
- TLB
以上是关于操作系统的中断异常和系统调用的主要内容,如果未能解决你的问题,请参考以下文章