中断、异常和系统调用比较

背景

  • 为什么需要中断、异常和系统调用
    • 在计算机运行中,内核是被信任的第三方
    • 只有内核可以执行特权指令
    • 方便应用程序
  • 中断和异常希望解决的问题
    • 当外设连接计算机时,会出现什么现象?
    • 当应用程序处理意想不到的行为时,会出现什么现象?
  • 系统调用希望解决的问题
    • 用户应用程序是如何得到系统服务?
    • 系统调用和功能调用的不同之处是什么?

内核的进入与退出

内核的进入与退出图

中断、异常和系统调用

  • 系统调用(system call)
    • 应用程序主动向操作系统发出服务请求
  • 异常(exception)
    • 非法指令或者其他原因导致当前指令执行失败
      (如:内存出错)后的处理请求
  • 中断(hardware interrupt)
    • 来自硬件设备的处理请求

中断、异常和系统调用比较

  • 源头
    • 中断:外设
    • 异常:应用程序意想不到的行为
    • 系统调用: 应用程序请求操作提供服务
  • 响应方式
    • 中断:异步
    • 异常:异步
    • 系统调用:异步或同步
  • 处理机制
    • 中断:持续进行,对用户应用程序是透明的
    • 异常:杀死或者重新执行意想不到的应用程序指令
    • 系统调用:等待和持续

中断处理机制

  • 硬件处理
    • 在CPU初始化时设置中断使能标志
      • 依据内部或外部事件设置中断标志
      • 依据中断向量调用相应中断服务例程
  • 软件
    • 现场保存(编译器)
    • 中断服务处理(服务例程)
    • 清除中断标记(服务例程)
    • 现场恢复(编译器)

中断嵌套

  • 硬件中断服务例程可被打断
    • 不同硬件中断源可能硬件中断处理时出现
    • 硬件中断服务例程中需要临时禁止中断请求
    • 中断请求会保持到CPU做出响应
  • 异常服务例程可被打断
    • 异常服务例程执行时可能出现硬件中断
  • 异常服务例程可嵌套
    • 异常服务例程可能出现缺页