1. 程式人生 > >操作系統學習(十三) 、中斷和異常

操作系統學習(十三) 、中斷和異常

中斷控制器 外部 兩種 它的 恢復 條件 事件 內部錯誤 範圍

一、中斷和異常

中斷何和異常是指明系統、處理器或當前執行程序(或任務)的某處出現一個事件,該事件需要處理器進行處理。通常,這種事情會導致執行控制器被強迫從當前運行程序轉移到被稱為終端處理程序或異常處理程序的特殊軟件函數或任務中。處理器響應中斷或異常所采取的行動稱為中斷/異常服務(處理)。

通常中斷發生在程序執行的隨機時刻,以響應硬件發出的信號。系統硬件使用中斷來處理外部事件,例如要求為外部設備提供服務。當然,軟件也能通過執行 INT n 指令產生中斷。

異常發生在處理器執行一條指令時,檢測到一個出錯條件時發生,例如被0除出錯條件。處理器可以檢測到各種出錯條件,包括違反保護機制。頁錯誤以及機器內部錯誤。對應用程序來說,80x86的中斷和異常處理機制可以透明地處理發生的異常和中斷事件。當收到一個中斷或檢測到一個異常時,處理器會自動把當前正在正在執行的程序或任務掛起,並開始運行中斷或異常處理程序。當處理程序執行完畢,處理器就會恢復並繼續執行被中斷的程序或任務。被中斷程序的恢復過程並不會失去程序執行的連貫性,除非從異常中恢復是不可能的或者中斷異常導致當前運行程序被終止。

二、異常和中斷向量

為了有助於處理異常和中斷,每個需要被處理器進行特殊處理的處理器定義的異常和中斷條件都被賦予了一個標識號,稱為向量。處理器把賦予異常或中斷的向量用作中斷描述符表IDT中的一個索引號,來定位一個異常或中斷的處理程序入口點位置。

允許的向量號範圍是0到255.其中0到31保留用作80x86處理器定義的異常和中斷,不過目前該範圍內的向量號並非每個都已定義了功能,未定義功能的向量號將留在以後使用。

範圍在32到255的向量號用於用戶定義的中斷。這些中斷通常用於外部I/O設備,使得這些設備可以通過外部硬件中斷機制向處理器發送中斷。

三、中斷源和異常源

(一)、中斷源

處理器從兩種地方接收終端:

  • 外部(硬件產生)的中斷。
  • 軟件產生的中斷。

外部中斷通過處理器芯片上兩個引腳(INTR 和 NMI)接收。當引腳接收到外部發生的中斷信號時,處理器就會從系統總線上讀取外部中斷控制器提供的中斷向量號。當引腳 NMI 接收到信號時,就產生一個非屏蔽中斷。它使用固定的中斷向量號2。 任何通過處理器 INTR 引腳接收的外部中斷都被稱為可屏蔽硬件中斷,包括中斷向量號0到255。標誌寄存器 EFLAGS 的 IF 標誌可用來屏蔽所有這些硬件中斷。

通過在指令操作數中提供中斷向量號, INT n 指令可用於從軟件中產生中斷。例如,指令 INT 0x80 會執行Linux的系統系統中斷調用中斷0x80。向量0到255中的任何一個都可以用作INT指令的中斷號。如果使用了處理器預先定義的 NMI向量,那麽處理器對它的響應將與普通方式產生的該NMI中斷不同,如果NMI的向量號2用於該INT指令,就會調用NMI的中斷處理程序,但此時並不會激活處理器的NMI處理硬件(???)。

註意,EFLAGS中的IF標誌位不能屏蔽使用INT執行從軟件產生的中斷。

(二)、異常源

未完,更新中....

操作系統學習(十三) 、中斷和異常