異常控制流(ECF)機制 簡介

2021-06-19 20:43:29 字數 1678 閱讀 4210

異常控制流(ecf):當發生某種事件(例:乙個硬體定時訊號、包到達介面卡後要求儲存的事件等)作業系統使控制流發生突變來應對這些事件,稱此突變為異常控制流(ecf)。

ecf發生在計算機系統的

各個層次。

如 硬體層,檢測到事件會觸發控制突然轉移到 異常處理程式。

在os層, 核心通過上下文轉換將 控制從 乙個使用者程序轉移到另乙個使用者程序。

在應用層,乙個程序可以傳送訊號到另乙個程序,而接收者會將控制 突然轉移給他的乙個訊號處理程式。且程式可以迴避

通常的棧規則,並執行到其他函式任意位置的

非本地跳轉來對錯誤做出反應。

應用層 通過使用 陷阱(trap)或系統呼叫(system call)的ecf形式,來向作業系統請求服務。

各層次上的各種形式的ecf:

系統呼叫--應用程式提供到作業系統的入口點的異常。

非本地跳轉--應用層形式

異常

異常是ecf的一種形式,一部分有硬體實現,一部分有作業系統實現。 任意時刻當處理器檢測到有事件發生時,他就會通過 異常表(一張跳轉表),跳轉到對應的 異常處理程式。完成後,會發生下列3種情況之一:

1.控制返回到當前的指令,繼續執行。

2.控制返回到 當前指令的下一條指令,繼續執行。

3.終止

異常的類別

四種:中斷、陷阱、故障和終止

中斷--非同步--來自i/o裝置的訊號(硬體中斷)--返回給下一條指令

陷阱--同步--主要用於

系統呼叫--返回給下一條指令

故障--同步--

缺頁、除法錯誤等故障--故障修復後重新執行原指令(如不可恢復 則abort終止)

終止--同步--硬體錯誤--將控制返回給abort來終止

系統呼叫函式的封裝

目標--減少**量,提高可靠性

當unix系統級函式遇到錯誤時,典型會返回-1,並設定全域性變數errno來表示錯誤。完整的程式應包含錯誤型別如下:

當 fork() 建立乙個程序。成功:返回 非負數(父程序中 返回 子程序pid號--整數,子程序返回0)

完整 檢測

方法一:

if( (pid = fork()) < 0)

做如下封裝

void unix_error(char* msg)

pid_t fork()

方法二:

pid = fork();

對比:此時方法二較方法一 同樣包含檢錯程式,且**量更少,更清晰。

異常控制流

異常控制流 在作業系統執行程式時,作業系統會把程式具體到每條指令,利用程式指標順序執行指令以達到程式執行的目的。這些指令類似乙個集合,稱之為控制流。程式指標依次執行每條指令,稱之為控制轉移。但是在程式執行過程中因為種種原因,程式狀態發生變化,程式指標不會依次執行這些程式指令,引起程式狀態變化的是存在...

異常控制流

作業系統通過使控制流程發生突變來響應系統狀態變化,這些突變就是異常控制流 exceptional control flow,ecf 異常控制處理流程 1.系統啟動時,作業系統分配和初始化一張異常表,使得索引為k的條目對應異常號為k的處理程式的位址。2.系統執行時,處理器檢測到狀態變化,確定相應的異常...

異常控制流

從給處理器加電開始,直到斷電為止,程式計數器假設乙個值的序列a 0,a 1,a n 1,其中,每個a k是某個相應的指令i k的位址。每次從a k到a k 1 的過渡稱為控制轉移。這樣的控制轉移序列叫做處理器的控制流 現代系統通過使控制流發生突變來對這些情況作出反應,這些突變稱為異常控制流 ecf ...