操作系统异常控制流

处理器执行指令的地址之间的过度被称作控制转移, 这样的控制转移序列叫做处理器的控制流。

现代操作系统通过使控制流发生突变来对系统状态的变化做出反应,这些突变被称作异常控制流

异常是一种形式的异常控制流。异常就是控制流中的突变,用来响应处理器状态中的某些变化。

当处理器检测到有异常发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用,到一个专门设计用来处理这类事件的操作系统子程序—异常处理程序。异常处理程序运行在内核模式下。

异常可以分为四类:中断、陷阱、故障和终止。

在这里插入图片描述

中断

中断是异步发生的,是来自处理器外部的I/O设备的信号的结果。硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的。硬件中断的异常处理程序常常被称为中断处理程序。I/O设备,例如网络适配器、磁盘控制器和定时器芯片,通过向处理器芯片上的一个管脚发信号,并将异常号放到系统总线上,来触发中断,这个异常号标识了引起中断的设备。
在这里插入图片描述
剩下的异常类型(陷阱、故障和终止)是同步发生的,是执行当前指令的结果。这类指令被叫做故障指令。

陷阱

陷阱是有意的异常,是执行一条指令的结果。最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。普通函数运行在用户模式,系统调用运行在内核模式。

故障

故障由错误情况引起,它可能被故障处理程序修正。当一个故障发生时,处理器将控制转移给故障处理程序。如果能修正错误就将控制返回到故障指令重新执行,否则程序返回到内核中的abort例程,终止引起故障的程序。故障的一个经典示例是缺页异常。
在这里插入图片描述

终止

终止时不可恢复的致命错误造成的结果—典型的是一些硬件错误。
在这里插入图片描述

用户模式和内核模式

一个运行应用程序代码的进程初始是在用户模式的。进程从用户模式变为内核模式的唯一方法是通过中断、故障或者陷入系统调用这样的异常。当异常发生时,控制传递到异常处理程序,处理器将模式从用户模式变为内核模式。

中断引发的上下文切换

在这里插入图片描述

信号

一个信号是一条消息,它通知进程一个某种类型的事件已经在系统中发生了。
在这里插入图片描述
信号提供了一种机制向用户进程通知这些异常的发生。

非本地跳转

C提供一种形式的用户级异常控制流,称为非本地跳转,它将控制直接从一个函数转移到另一个当前正在执行的函数,而不需要经过正常的调用返回序列。通过setjmp、longjmp实现。



参考文献:
《深入理解计算机系统》(美)布赖恩特(Bryant,R.E.) 编著

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值