程序總是處於下面三種狀態之一:
執行。程序要麼在cpu上執行,要麼在等待被執行且最終會被核心排程。
停止。程序的執行被掛起(suspended),且不會被排程。
終止。程序永遠的停止了。程序會因為三種原因終止:1)收到乙個訊號,該訊號的預設行為是終止程序,2)從主程式返回,3)呼叫exit函式。
父程序通過呼叫fork函式建立乙個新的執行的子程序。
fork函式的特點:
呼叫一次,返回兩次。fork函式被父程序呼叫一次,但是卻返回兩次-----一次是返回到父程序,一次是返回到新建立的子程序。
當乙個程序由於某種原因終止時,核心並不是立即把它從系統中清除。相反,程序被保持在一種已終止的狀態中,直到被它的父程序**(reaped)。當父程序**已終止的子程序時,核心將子程序的退出狀態傳遞給父程序,然後拋棄已終止的程序,從此時開始,該程序就不存在了。乙個終止了但還未被**的程序稱為僵死程序(zombie)。
乙個程序可以通過呼叫waitpid函式來等待它的子程序終止或者停止。
傳送乙個訊號到目的程序是由兩個不同步驟組成的:
傳送訊號。核心通過更新目的程序上下文中的某個狀態,傳送(遞送)乙個訊號給目的程序。傳送訊號可以有如下兩種原因:1)核心檢測到乙個系統事件,比如除零錯誤或者子程序終止。2)乙個程序呼叫了kill函式,顯式的要求核心傳送乙個訊號給目的程序。乙個程序可以傳送訊號給它自己。
接收訊號。當目的程序被核心強迫以某種方式對訊號的傳送做出反應時,它就接收了訊號。程序可以忽略這個訊號,終止或者通過執行乙個稱為訊號處理程式(signal handler)的使用者層函式捕獲這個訊號。
深入理解計算機系統 異常
異常是異常控制流的一種形式,它一部分是由硬體實現的,一部分是由作業系統實現的。異常就是控制流中的突變,用來響應處理器狀態中的某些變化。在處理器中,狀態被編碼為不同的位和訊號。狀態變化稱為事件event,事件可能與當前指令的執行直接相關。比如發生虛擬儲存器的換頁,算數溢位,或者一條指令試圖除以零。另一...
深入理解計算機系統 異常
2012 07 19 22 41 53 分類 linux 標籤 linux 計算機系統異常 字型大小大中小 訂閱異常是異常控制流的一種形式,它一部分是由硬體實現的,一部分是由作業系統實現的。異常就是控制流中的突變,用來響應處理器狀態中的某些變化。在處理器中,狀態被編碼為不同的位和訊號。狀態變化稱為事...
《深入理解計算機系統》 異常處理
異常表 在作業系統啟動時,系統建立和初始化了乙個被稱為異常表的跳轉表,條目k對應異常k的異常處理程式入口位址。異常的分類 中斷 interrupt 來自處理器外部i o裝置的訊號,並不是由專門的指令造成的,是非同步的,其處理程式成為中斷處理程式。陷阱 trap 故意的異常,是執行指令的結果,其作重要...