中斷和異常

      在《深入理解計算機》一書中,是將中斷(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)。執行系統調用及給調試程序通報一個特定事件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章