码迷,mamicode.com
首页 > 其他好文 > 详细

操作系统的中断、异常和系统调用

时间:2020-06-24 17:46:02      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:初始   服务   系统调用   维护   windows   macos   堆栈   堆栈切换   write   

操作系统的中断、异常和系统调用


中断

  • 硬件
    • 设置中断标记【CPU初始化】
      • 将内部、外部事件设置中断标记
      • 中断事件的ID
  • 软件
    • 保存当前处理状态
    • 中断服务程序处理
    • 清除中断标记
    • 恢复之前保存的处理状态

异常

异常编号

  • 保存现场
  • 异常处理
    • 杀死产生异常程序
    • 重新执行异常指令
  • 恢复现场

系统调用

应用程序调用printf(),会触发write()。

程序访问主要是通过高层次的api接口而不是直接进行系统调用。

  • win32 api 用于 Windows
  • POSIX api 用于 Unix,Linux,MacOSX
  • Java api 用于java虚拟机(JVM)
    • 其实也实现调用java api随后调用对应操作系统的api

操作系统如何完成系统调用(用户态到<--->内核态)

  • 通常情况,与每个系统调用相关的序号
    • 系统调用接口根据序号维护表的索引
  • 系统调用接口调用内核态中预期的系统调用
    • 并返回系统调用的状态和其他任何返回值
  • 用户不需要知道系统调用是如何实现的
    • 只需要获取API和了解操作系统讲什么作为返回结果
    • 操作系统接口细节大部分都隐藏在API中
  • 系统调用中,操作系统和应用程序的堆栈是不同的。

跨越操作系统便边界的代价

  • 在执行时间上的开销超过程序调用
    • 对应中断号,堆栈切换保存与恢复
  • 开销:
    • 建立 中断/异常/系统调用 号与对应服务例程映射关系的初始化开销
    • 建立内核堆栈
    • 验证参数
    • 内核态映射到用户态的地址空间
      • 更新页面映射
    • 内核独立地址空间
      • TLB

操作系统的中断、异常和系统调用

标签:初始   服务   系统调用   维护   windows   macos   堆栈   堆栈切换   write   

原文地址:https://www.cnblogs.com/deusjin/p/13188672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!