异常控制流学习心得

异常控制流

什么是异常控制流?
从给处理器加电开始,直到断电为止程序计数器假设一个值的序列:a0, a 1, . . . , an−1。
其中每个ak是某个相应的指令Ik的地址,每次从ak到ak+1的过渡称为控制转移,这样的控制转移序列叫做处理器的控制流。
而现代操作系统通过使控制流发生突变来对系统状态做出反应,这些突变称为异常控制流(ECF)
异常控制流通常发生在以下三个层次:
(1)硬件层,硬件检测到的事件会触发控制突然转移到异常处理程序。
(2)系统层,内核通过上下文转换将控制从一个用户进程转移到另一个用户进程。
(3)应用层,一个进程可以向另一个进程发送信号,接收者会将控制突然转移到它的一个信号处理程序。

作为程序员,我们为什么要理解异常控制流(ECF)?
首先,理解ECF能帮助我们理解许多重要的系统概念。
其次,理解ECF能帮助我理解应用程序是如何与操作系统交互的。
并且,理解ECF能帮助我们编写出有趣的新应用程序。
然后,理解ECF能帮助我们理解并发。
最后,理解ECF能帮助我们理解软件一场如何工作。

什么是异常?
异常就是控制流中的突变,用来响应处理器状态中的某些变化。它是异常控制流的一种形式,一部分由硬件实现,一部分有软件实现。
异常的刨析
当处理器状态发生变化时,处理器正在执行某个当前指令Icurr。
状态变化称为事件,事件可能跟当前指令的执行直接相关,事件也可能和当前指令的执行没有关系。
当处理器检测有事件发生时,它就会通过一张叫做异常表的跳转表,到一个专门设计用来处理这类事件的操作系统子程序。
当异常处理程序完成处理后,根据引起异常的事件类型,会发生以下三种情况之一:
(1)处理程序将控制返回给当前指令Icurr。
(2)处理程序将控制返回给Inext。
(3)处理程序终止被中断程序。

异常处理
异常表
系统为每种类型的异常都分配一个唯一的非负整数的异常号。
系统启动时,操作系统分配和初始化一张称为异常表的跳转表,条目k包含异常k的处理程序的地址。
在运行时,处理器检测到发生一个事件,确定相应的异常号k。

异常号是异常表的索引,异常表的起始地址放在一个叫异常表基址寄存器的特殊CPU寄存器中。
异常与过程调用:
(1)过程调用时,在跳转处理程序之前,处理器将返回地址压入栈中,然而根据异常的类型,返回地址要么是当前指令要么是下一条指令。
(2)处理器也将额外的处理器状态压到栈里,在处理程序返回时,重新开始被中断的程序。
(3)控制从一个用户程序转移到内核,所有这些项目都被压到内核栈中,而不是压到用户栈中。
(4)异常处理程序运行在内核模式下,其对所有的系统资源都有完全的访问权限。

异常的类别
中断(interrupt)
原因:来自I/O设备的信号
异步或同步:异步
返回行为:总是返回到下一条指令
陷阱(trap)
原因:有意的异常
异步或同步:同步
返回行为:总是返回到下一条指令
用途:在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用
故障(fault)
原因:潜在可恢复的错误
异步或同步:同步
返回行为:可能返回到当前指令
终止(abort)
原因:不可恢复的错误
异步或同步:同步
返回行为:不会返回

进程
异常是允许操作系统提供进程的概念的基本构造快,进程是计算机科学中最深刻,最成功的概念之一。
假象:我们会觉得程序是系统中唯一运行着的程序。我们的程序好像独占处理器和存储器。
这些假象都是通过进程概念提供给我们的。
进程经典定义:一个执行中的程序实例。
系统中每个程序都是运行某个进程的上下文中的。
上下文是由程序正确运行所需的状态组成。
这个状态包括存储器中的代码和数据,它的栈,通用目的寄存器,程序计数器,环境变量等。
进程提供的假象:
一个独立的逻辑控制流。
一个私有的地址空间。

并发流
定义:一个逻辑流的执行在时间上与另一个流重叠的现象
多任务(multitasking):一个进程和其他进程轮流运行的概念

创建和终止进程
进程所处于的三个状态:
运行:进程要么在CPU上执行,要么在等待被执行且最终会被内核调度
停止:进程的执行被挂起,且不会被调度
终止:进程永远地停止了
终止有三种原因:
1.收到一个信号,该信号地默认行为是终止进程
2.从主程序返回
3.调用exit函数

除以上内容外,异常控制流还有许多知识值得的和需要我们去理解学习,理解好ECF是做一个好程序员不可少的一步

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值