中断和异常

      在《深入理解计算机》一书中,是将中断(interrupt)、陷阱(trap)、故障(fault)和终止(abort)统一归于异常来阐述。C++和JAVA程序猿会注意到术语“异常”也用来描述由C++和JAVA以catch、throw和try语句的形式提供的应用级ECF(异常控制流 Exceptional Control Flow).如果想完全弄清楚,我们必须区别“硬件”和“软件”异常,但是这通常是不必要的,因为从上下文中就能够很清楚地知道是哪种含义。



      中断与异常的概念:

      通常将中断和异常放在一起讨论,那么我们先将两者区分开来。(以下来自《深入理解linux内核》一书)

      中断(interrupt)通常被定义为一个事件,该事件改变处理器执行的指令顺序。这样的事件与cpu芯片内外部硬件电路产生的电信号相对应。中断通常分为同步(synchronous)中断和异步(asynchronous)中断:

*同步中断是指当指令执行时由CPU控制单元产生的,之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。

*异步中断是由其他硬件设备依照CPU时钟信号随机产生的。


      在Intel微处理器手册中,把同步和异步中断分别称为异常(exception)和中断(interrupt)。我们也采用这种分类,当然有时候我们也用属于“中断信号”指这两种类型。中断是由间隔定时器和I/O设备产生的,例如:用户的一次按键会引起一个中断。另一方面,异常是由程序错误产生的,或者由内核必须处理得异常条件产生的。第一种情况下,内核通过发送一个每个unix程序猿都熟悉的信号来处理异常。第二种情况下,内核执行恢复异常需要的所有步骤,例如缺页,或对内核服务的一个请求(通过一条init或sysenter指令)。



中断和异常的分类

中断:
      可屏蔽中断(maskable interrupt)
      非屏蔽中断(nonmaskable interrupt)只有几个危机事件(如硬件故障)才引起非屏蔽中断。非屏蔽中断总是由CPU辨认。
异常:
      故障(fault)通常可以纠正,一旦纠正,程序就可以在不是连贯性的情况下重新开始。
      陷阱(trap)在陷阱指令执行后立即报告;内核把控制权返回给程序后就可以继续它的执行而不是连贯性。陷阱的主要用途是为了调试程序。
      异常终止(abort)异常终止用于报告严重的错误,如硬件故障或系统表中无效的值或不一致的值。
      编程异常(programmed exception)控制单元把编程异常作为陷阱来处理。编程异常也叫做软中断(software interrupt)。执行系统调用及给调试程序通报一个特定事件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章