中断与异常

中断和异常一直是OS课程中的重点,最近在读Csapp中异常部分给了我一些不同的理解方式,在这里稍加总结。

 

首先,给出书中定义:

 

现代操作系统通过使控制流发生突变来对这些情况做出反应。一般而言,把这些突变称为ECF(exceptional control flow),即异常控制流。

 

异常可以分为四类:中断(interrupt)、陷阱(trap)、故障(fault)和终止(abort)

中断与异常_第1张图片

 

 

 

 

中断

 

中断是异步的,是来自处理器外部的I/O设备的信号的结果。硬件中断不是由任何一条专门的指令造成的,从这个意义上来说它是异步的。硬件中断的异常处理程序常常被称为中断处理程序(interrupt handler)

 

下图概述了一个中断的处理。I/O设备通过向处理器芯片上的一个管脚发信号,并将异常号放到系统总线上,来处罚中断,这个异常号标示了引起中断的设备。中断处理程序将控制返回给应用程序控制流的下一条指令。

 

中断与异常_第2张图片

 

 

剩下的异常类型是同步的,是执行当前指令的结果。

 

陷阱

 

陷阱是有意的异常,是执行一条指令的记过。就像中断处理程序一样,陷阱处理程序将程序控制流返回到下一条指令。陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用。

 

中断与异常_第3张图片

 

故障

 

故障由错误情况引起,它可能被错误处理程序修正。当一个故障发生时,处理器讲控制转移给故障处理程序。如果处理程序能够修正这个错误情况,它就控制返回到故障指令,从而重新执行它。否则,处理程序返回到内核中的abort例程,终止引起故障的应用程序。

 

中断与异常_第4张图片

 

 

终止

 

终止时不可恢复的致命错误造成的过节——典型的是一些硬件错误。比如DRAM或者SRAM位被损坏时发生的奇偶错误。终止处理程序从不将控制返回给应用程序。

 

 

 

最后做简单举例帮助更好的理解

 

中断: 外部设备的响应请求,如敲击键盘,磁盘读取;

陷阱: 请求系统调用,如文件读取,创建进程;

故障: 不一定是致命性错误,如缺页异常;

终止: 致命性错误,如文中提到的奇偶错误;

 

 

 

 

说明:以上内容参照Csapp中文版第八章所写,图就是原书中的插图。

 

2010-09-04

 

你可能感兴趣的:(中断与异常)