天天看點

淺評中斷、陷阱、異常 (轉)

淺評中斷、陷阱、異常

刺猬@http://blog.csdn.net/littlehedgehog

前幾天看的一篇好文,從另一個角度介紹了中斷(interrupt)、陷阱(traps)、異常(exception)。

外部中斷,就是我們通常所說的中斷(interrupt)。對于執行的系統來說,這種中斷發生完全是"異步"的,根本無法預測到此類中斷會在什麼時候發生。是以,CPU(或者軟體)對于此類外部中斷完全是"被動"的。不過,軟體可以通過關中斷的形式來關閉對中斷的響應,把它"反映情況"的途徑掐斷,這樣就眼不見心不煩了。

有軟體産生的中斷則不同,它是由專設的指令,如Intel X86的"INT n",在程式中有意地産生,是以是主動的,"同步"的。隻要CPU一執行一條int指令,就知道在開始執行下一條指令之前一定要先進入中斷服務程式,這種主動的中斷我們稱之為"陷阱"。

此外,還有一種與中斷相似的機制稱之為"異常"(exception),一般也是異步的,多半是由于"不小心"犯了規才發生的。例如,當你在程式中發出一條除法指令div,而除數為零時就會發生一次異常。這多半是由于不小心,而不是故意的,是以這也是被動的。當然,我們的确可以故意除以零,呵呵,這個就有點強詞奪理了。

我終結一下,中斷和異常有個比較大的共同點就是"不可預知性",是以是被迫的;而陷阱有"有意為之"的含義。其實,這種東西了解即可,做系統程式設計的時候身邊備上一本Intel手冊即可。

繼續閱讀