電腦系統:第8章異常控制流程
參考材料:深入理解電腦系統,第8章
1控制流程的種類
——》對由“程式內部”變數表示的內部狀態的變化作出反應的。簡單來說,就是我在運行這段程式,在“程式”中明確指明了下條啟動並執行指令,如順序下一條,while,跳轉等
——》對一些系統狀態的變化作出反應,這些系統狀態“不是由這段程式內的變數”捕獲的。簡單來說,就是我在運行這段程式,運行著運行著,突然從本段程式外部來了一個刺激要我作出反應。
——》對於第二種控制流程,系統通過ECF(Exceptional Control Flow異常控制流程)作出反應。
8.1異常
——》異常的基本過程:processor檢測到有時間發生——》根據提前寫定好的異常表進行跳轉——》到對應例外處理常式——》根據不同類別的異常,作出不同的”返回“
8.1.1異常處理:處理異常需要硬體和軟體緊密合作,很容易搞混哪個部分執行哪個任務:SO,分清哪個部分做哪個任務
1——》”硬體“基礎:每個異常的異常號exception number
2——》”軟體“:作業系統在啟動時,初始化一個”異常表“
3——》”硬體“:processor檢測到了異常——》根據異常表進行跳轉
4——》”軟體“:執行對應例外處理常式
8.1.2異常的類別
1——》中斷(非同步發生的:不是當前指令引起的結果)
2——》陷阱trap
——》系統調用
——》故障faults
——》終止aborts (這4種異常是”同步發生“的,因為是當前指令引起的結果,如缺頁)
*——》以上的幾個概念
”當前指令指明的“指第一種控制流程,因為在程式運行到goto時就會發生跳轉,這是程式顯示指明的;
”當前指令引起的“指程式中沒有顯式的指明要怎麼控制下一條執行哪個(到這就可以判斷是”ECF“),但是因為執行當前一條指令,引起了異常(如缺頁)這就是同步發生的”異常“;
”不是當前指令引起的結果“指程式當前指令不會引起任何異常,但是外部有個裝置發來一個訊號,這就是非同步發生的”異常“;
8.1.3Linux/IA32系統中的異常
1——》IA32系統,查百度應該是指IA32架構,是一個英特爾的指令集架構
2——》這個系統關於異常處理的特異性
——》異常類型數:256.各自都定義好了
——》各個異常的處理方法(舉例了幾個特殊的)
——》系統調用是通過int 0x80提供的
——》所有到”linux“的系統調用是通過寄存器(如%eax等)而不是棧傳遞的