3.7 unix svr4 程序管理
unix 系統v 使用了一種簡單但是功能強大的程序機制,且對使用者可見。unix 採用圖3.15b 中的模型,其中大部分作業系統在使用者程序環境中執行。unix 使用兩類程序,即系統程序和使用者程序。系統程序在核心態下執行,執行作業系統**以實現管理功能和內部處理,如記憶體空間的分配和程序交換;使用者程序在使用者態下執行以執行使用者程式和實用程式,在核心態下執行以執行屬於核心的指令。當產生異常(錯誤)或發生中斷或使用者程序發出系統呼叫時,使用者程序可進入核心態。
3.7.1 程序狀態
unix 作業系統中共有9 種程序狀態,如表3.9 所示。圖3.17(基於[bach86]中的圖)是相應的狀態轉換圖,它與圖3.9b 類似,有兩個unix 睡眠狀態對應於圖3.9b 中的兩個阻塞狀態,其區別可簡單概括如下:
unix 採用兩個執行態表示程序在使用者態下執行還是在核心態下執行。
unix 區分記憶體中就緒態和被搶占態這兩個狀態。從本質上看,它們是同乙個狀態,如圖中它們之間的虛線所示,之所以區分這兩個狀態是為了強調進入被搶占狀態的方式。當乙個程序正在核心態下執行時(系統呼叫、時鐘中斷或i/o 中斷的結果),核心已經完成了其任務並準備把控制權返回給使用者程式時,就可能會出現搶占的時機。這時,核心可能決定搶占當前程序,支援另乙個已經就緒並具有較高優先順序的程序。在這種情況下,當前程序轉換到被搶占態,但是為了分派處理,處於被搶占態的程序和處於記憶體中就緒態的程序構成了一條佇列。
圖3.17 unix 程序狀態轉換圖
只有當程序準備從核心態移到使用者態時才可能發生搶占,程序在核心態下執行時是不會被搶占的,這使得unix 不適用於實時處理。有關實時處理需求的討論請參見第10 章。
unix 中有兩個獨特的程序。程序0 是乙個特殊的程序,是在系統啟動時建立的。實際上,這是預定義的乙個資料結構,在啟動時刻被載入,是交換程序。此外,程序0 產生程序1,稱做初始程序,程序1 是系統中的所有其他程序的祖先。當新的互動使用者登入到系統時,由程序1為該使用者建立乙個使用者程序。隨後,使用者程序可以建立子程序,從而構成一棵分支樹,因此,任何應用程式都是由一組相關程序組成的。
表3.9 unix 程序狀態
程序狀態轉換
1.就緒 執行 2.執行 就緒 3.執行 等待 4.等待 就緒 一 程序的三種基本狀態 程序在執行中不斷地改變其執行狀態。通常,乙個執行程序必須具有以下三種基本狀態。就緒 ready 狀態 當程序已分配到除cpu以外的所有必要的資源,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。執行 ru...
程序狀態轉換
程序在執行中不斷地改變其執行狀態。通常,乙個執行程序必須具有以下三種基本狀態。就緒 ready 狀態 當程序已分配到除cpu以外的所有必要的資源,只要獲得處理機便可立即執行,這時的程序狀態稱為就緒狀態。執行 running 狀態 當程序已獲得處理機,其程式正在處理機上執行,此時的程序狀態稱為執行狀態...
UNIX的程序終止狀態小結
在unix中的程序退出狀態有三種,分別是 normal termination 一般在呼叫exit,exit後,或別的程序kill它出現 abnormal termination 呼叫abort,出錯時強制退出時出現 stopped 在程序接受到stop訊號時退出 先來說如何捕捉子程序的退出狀態 i...