深入理解计算机系统--异常控制流

本文介绍了异常控制流(ECF)在计算机系统中的应用,包括进程、虚拟存储器等基本机制,并探讨了不同类型的异常及其处理方式。同时,文章还讨论了信号、非本地跳转等高级主题。

异常控制流

(ECF:Exceptional Control Flow)在计算机系统中的意义:

 

  • ECF 是OS用来实现 I/O(异步、同步IO)、进程(进程切换,多任务系统支持)和虚拟存储器(VSS)的基本机制。
  • APP通过使用一种叫做陷阱(trap)或者系统调用(System call)的ECF,向OS请求服务。
  • 为APP交互提供了更多渠道:信号
  • 为编程语言提供了软件层面的异常处理机制。软件异常允许程序进行非本地跳转(违法通常的调用、返回栈规则的跳转)来响应错误情况。

异常

处理器在检测到事件(CPU的状态被编码为不同的位和信号)发生时,通过异常表进行一个间接过程调用,到一个专门处理这类事件的OS子系统(异常处理程序)。

类别:

 

类别原因异步/同步返回行为
中断来自IO设备的信号异步总是返回到下一条指令
陷阱有意的异常同步总是返回到下一条指令
故障潜在可恢复的错误同步可能返回当前指令
终止不可恢复的错误同步不会返回

进程

现代计算机通过时钟信号让CPU进行运作,通过时间片的理念将OS进行分时处理,允许OS多进程工作。

在完成这个业务的时候,OS需要进行上下文切换:状态保存、状态恢复。

 

另外在进行系统调用和陷阱处理时,OS要完成用户态和内核态的转换控制。

 

信号

信号时OS和APP进行交互的更高级途径,由APP来决定对信号的处理。

非本地跳转

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

其中仍然需要考虑到状态转移的问题,setjmp函数在env缓冲区中保存了当前栈内容,longjmp通过读取env缓冲区来回复栈的内容。

http://www.cnblogs.com/mydomain/archive/2011/06/18/2084155.html

C++和Java提供的异常机制是较高层次的,是C的setjmp和longjmp函数的更加结构化的版本。

catch子句:setjmp

throw:longjmp

Linux对异常控制流的支持

  • strace
  • ps
  • top
  • kill
  • /proc系统接口

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值