中斷(interrupt)通常被定義為乙個事件,該事件改變處理器執行的指令順序。這樣的事件與cpu晶元內外部硬體電路產生的電訊號相對應。
中斷通常分為同步(synchronous)中斷和非同步(asynchronous)中斷:
在intel微處理器手冊中,把同步和非同步中斷分別稱為異常(exception)和中斷(interrupt)。我們也採用這種分類,當然有時我們也用術語「中斷訊號」指這兩種型別。
中斷是由間隔定時器和i/o裝置產生的,例如,使用者的一次按鍵會引起乙個中斷。
異常是由程式的錯誤產生的,或是由核心必須處理的異常條件產生的。第一種情況下,核心通過傳送乙個每個unix程式設計師都熟悉的訊號來處理異常。第二種情況下,核心執行恢復異常所需要的所有步驟,例如缺頁,或對核心服務的乙個請求(通過一條 int 或 sysenter 指令)。
顧名思義,中斷訊號提供了一種特殊的方式,使處理器轉而去執行正常控制流之外的**。當乙個中斷訊號達到時,cpu必須停止它當前正在做的事情,並且切換到乙個新的活動。為了做到這一點,就要在核心態堆疊儲存程式計數器的當前值(即eip和cs暫存器的內容),並把與中斷型別相關的乙個位址放進程式計數器。
有些事情會使你想起在前一章描述的上下文切換,這發生在核心用乙個程序替換另乙個程序時。但是,中斷處理與程序切換有乙個明顯的差異:由中斷或異常處理程式執行的**不是乙個程序。更確切地說,它是乙個核心控制路徑,代表中斷發生時正在執行的程序執行。作為乙個核心控制路徑,中斷處理程式比乙個程序要「輕」(light)(中斷的上下文很少,建立或終止中斷處理需要的時間很少)。
intel文件把中斷和異常分為以下幾類:
(1)中斷:
(2)異常:
每個中斷和異常是由0~255之間的乙個數來標識。intel把這個8位的無符號整數叫做乙個向量(vector)。非遮蔽中斷的向量和異常的向量是固定的,而可遮蔽中斷的向量可以通過對中斷控制器的程式設計來改變。
注:內容來自《深入理解linux核心》
中斷,異常,陷阱 概念
中斷 為了裝置與cpu之間的非同步通訊。是由裝置向cpu發的訊號。典型的有如服務請求,任務完成提醒等。比如我們熟知的時鐘中斷,硬碟讀寫服務請求中斷。中斷的發生與系統處在使用者態還是在核心態無關,只決定於eflags暫存器的乙個標誌位 中斷允許位 我們熟悉的sti,cli兩條指令就是用來設定這個標誌位...
中斷和異常
中斷和異常 中斷訊號的處理方式 分緊急部分和不緊急部分 中斷處理 必須能夠重入,以便能夠中斷巢狀 中斷和異常的產生 乙個irq interrupt request 代表中斷控制器上的一根中斷線,和乙個中斷向量 單cpu 可程式設計中斷控制器 pic 多cpu 改進的可程式設計中斷控制器 apic 乙...
中斷和異常
中斷通常定義為乙個事件,該事件改變處理器執行的指令順序。中斷通常分為同步中斷與非同步中斷。異常是同步的,i o中斷是非同步的。中斷可以分為 i o裝置發出的中斷請求 irq 都可以被遮蔽,乙個中斷被遮蔽以後,控制單元就忽略他。只有硬體故障等幾個危急事件才是非遮蔽中斷。異常可以分為 可以糾正的異常,例...