一、來自硬體層面的異常
硬體的異常可能由多個原因産生。
- 算術溢出,計算發生溢出
- 通過鍵盤和滑鼠給網絡發送資訊
- 讀取檔案的請求也是一個異常
異常是軟體和硬體組合到一起的處理過程。異常的發生和捕捉由硬體發生,異常的處理由軟體來完成。
異常代碼(中斷向量)—— 異常發生的時候,CPU 檢測到了特殊的信号。
特殊信号的配置設定:
- I/O 發出的信号的異常代碼,是由作業系統來配置設定的
- 加法溢出這樣的異常代碼,是由硬體來配置設定的
異常表(中斷向量表)
存放的是不同的異常代碼對應的異常的程式處理位址。

檢測異常,拿到異常,根據異常的代碼進行處理
二、異常的分類
- 中斷:CPU 外部的裝置向 CPU 發送中斷的資訊。
- 陷阱:程式員主動設定的斷點,程式執行到這個陷阱就會中斷執行,轉而去執行異常處理程式。最常見的陷阱是系統調用(使用者态到核心态的切換),打開檔案和建立新的程序。
-
故障:故障不是在編寫程式的時候刻意設定的。而是在程式運作的時候發生的,也同樣需要對應的程式去處理。
(故障 和 中斷、陷阱的差別是:處理完故障後,仍然回來處理目前的指令,而中斷和陷阱回來處理下一條指令)
- 中止:當程式遇到故障無法重新運作,程式自然終止。
2022-2-11 計算機組成原理 —— 異常和中斷 - 同步 —— 在程式内部發生的異常:陷阱、故障、終止
- 異步 —— 在程式外部發生的異常:中斷
處理流程:儲存現場,查詢異常代碼,異常處理程式調用
三、異常的處理:上下文切換
1、将目前正在執行的指令去壓棧。同時将 CPU 内目前運作程式使用的寄存器裡的值都壓入棧中。
2、陷阱涉及到核心态與使用者态的切換,将資料壓入到核心棧中,而不是程式棧裡。
3、故障這種異常,執行的是目前的指令,而不是下一條指令,因為目前的指令并沒有正确執行完成。