在《深入理解計算機》一書中,是將中斷(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指令)。
中斷和異常的分類