進程的狀態
進程的生命周期管理
進程的狀態變化模型
進程掛起模型
進程的生命期管理
進程的創建
進程運行
進程等待
進程喚醒
進程結束
進程創建
引起進程創建的三個主要事件
進程初始化時 MIT進程
用戶請求創建新的進程
正在運行的進程執行了創建進程的系統調用
(創建了進程控制塊)
進程運行
內核選擇一個就緒的進程,讓他占用處理機並執行
進程等待
以下情況下 進程等待
請求並等待系統服務,無法馬上完成
啟動某種操作,無法馬上完成
需要的數據沒有到達
進程只能阻塞自己,因為只有進程自己知道何時需要等待某事的發生
進程喚醒
進程喚醒的原因:
被阻塞的進程需要的資源可以被滿足
被阻塞進程等待的事件發生
將該進程的PCB插入到就緒隊列
進程只能被別的進程喚醒 或者操作系統喚醒
進程結束
以下四種情形 進程結束
正常退出(自願)
錯誤退出(自願)
致命錯誤(強制的)
被其他進程所殺(強制的)
進程狀態變化模型
進程的三種基本狀態 (同時只會處在一個狀態)
運行狀態: 正在處理機上運行
就緒狀態: 進程獲得了除了處理機之外的一切資源,一旦得到處理機即可運行
等待狀態(阻塞態): 一個進程等待某件事情等暫時停止運行,等待某資源 或者事件
其他基本狀態:
創建狀態:正在創建 還沒有撞到就緒狀態之前的狀態
結束狀態:一個進程正在從系統中小時時的狀態,這是因為進程結束或者由於其他原因所導致的。PCB徹底消失了 才算是完全結束了
進程掛起
為了充分利用系統資源,被掛起的進程不占用內存空間,他在磁盤上
阻塞掛起狀態: 進程在外寸並且等待某事件的出現
就緒掛起狀態: 進程在外存,但是只要進入內存,就能運行
掛起(Suspend):把一個進程從內存轉到外存;可能有以下幾種情況
●阻塞到阻塞掛起:沒有進程處於就緒狀態或就緒進程要求更多內存資源時,會進行這種轉換,以提交新進程或運行就緒進程; (把阻塞的進程掛起)
●就緒到就緒掛起:當有高優先級阻塞(系統認為會很快就緒的)進程和低優先就緒進程時,系統會選擇掛起低優先級就緒進程;(操作系統會把他認為的很久才喚醒的掛起)
●運行到就緒掛起:對搶先式分時系統當有高優先級阻塞掛起進程因事件出現而進入就緒掛起時,系統可能會把運行進程轉到就緒掛起狀態;
在外存時的狀態轉換:
●陽塞掛起到就緒掛起:當有阻塞掛起進程因相關事件出現時,系統會把阻塞掛起進程轉換為就緒掛起進程。
解掛/激活: 把一個進程從外存轉換到內存
■就緒掛起到就緒:沒有就緒進程或掛起就緒進程優先級高於就緒進程時,會進行這種轉換;
■阻塞掛起到阻塞:當一個進程釋放足夠內存時,系統會把一個高優先級阻塞掛起(系統認為會很快出現所等待的事件)進程轉換為阻塞進程;
狀態隊列
■由操作系統來維護一組隊列,用來表示系統當中所有進程的當前狀態;
■不同的狀態分別用不同的隊列來表示就緒隊列、各種類型的阻塞隊列);
■每個進程的PCB都根據它的狀態加入到相應的隊列當中,當一個進程的狀態發生變化時,它的PCB從一個狀態隊列中脫離出來,加入到另外一個隊列。