三態模型
進程在其生命週期內可能具有多種狀態,一般而言,運行態,就緒態和等待態爲三種基本狀態。
- 運行態(running):進程已獲得CPU,其程序正在執行的狀態。
在單處理機系統中,只有一個進程處於執行狀態; 在多處理機系統中,則有多個進程處於執行狀態。
- 就緒態(ready):進程已處於準備好運行的狀態。
當進程已分配到除CPU以外的所有必要資源後,只要再獲得CPU,便可立即執行,進程這時的狀態稱爲就緒狀態。在一個系統中處於就緒狀態的進程可能有多個,通常將它們排成一個隊列,稱爲就緒隊列。
- 等待態(wait):正在執行的進程由於發生某事件(如I/O請求、申請緩衝區失敗等)暫時無法繼續執行時的狀態。
也稱爲阻塞或睡眠狀態。系統將處於等待狀態的進程排成一個隊列,稱該隊列爲等待隊列。
狀態轉化圖
運行態→等待態:等待使用資源;如等待外設傳輸;等待人工干預。
等待態→就緒態:資源得到滿足;如外設傳輸結束;人工干預完成。
運行態→就緒態:運行時間片到;出現有更高優先權進程。
就緒態→運行態:CPU 空閒時選擇一個就緒進程。
五態模型
-
新建態:
進程是由創建而成,創建過程很複雜,首先由進程申請一個空白PCB,並向PCB中填寫用於控制和管理進程的信息;然後爲該進程分配運行時所必須的資源;最後,把該進程轉入就緒狀態並插入就緒隊列之中。如果進程所需的資源尚不能得到滿足,比如系統尚無足夠的內存使進程無法裝入其中,此時創建工作尚未完成,進程不能被調度運行,進程處於創建態。
-
終止態:
當一個進程到達了自然結束點,或是出現了無法克服的錯誤,或是被操作系統所終結,或是被其他有終止權的進程所終結,它將進入終止狀態。進入終止狀態的進程將不能再執行,但是在OS中依然保持一個記錄,其中保存着狀態碼和計時統計數據,等待別的進程收集,一旦資源被收集完成,OS會立刻刪除該進程。
狀態轉化圖
NULL→新建態:執行一個程序,創建一個子進程。
新建態→就緒態:當操作系統完成了進程創建的必要操作,並且當前系統的性能和虛擬內存的容量均允許。
運行態→終止態:當一個進程到達了自然結束點,或是出現了無法克服的錯誤,或是被操作系統所終結,或是被其他有終止權的進程所終結。
運行態→就緒態:運行時間片到;出現有更高優先權進程。
運行態→等待態:等待使用資源;如等待外設傳輸;等待人工干預。
就緒態→終止態:未在狀態轉換圖中顯示,但某些操作系統允許父進程終結子進程。
等待態→終止態:未在狀態轉換圖中顯示,但某些操作系統允許父進程終結子進程。
終止態→NULL:完成善後操作。
七態模型
掛起,激活操作:
引起掛起的原因:
(1) 終端用戶的需要。
(2) 父進程請求。
(3) 負荷調節的需要。
(4) 操作系統的需要。
狀態轉化圖
等待態→掛起等待態:操作系統根據當前資源狀況和性能要求,可以決定把等待態進程對換出去成爲掛起等待態。
掛起等待態→掛起就緒態:引起進程等待的事件發生之後,相應的掛起等待態進程將轉換爲掛起就緒態
掛起就緒態→就緒態:當內存中沒有就緒態進程,或者掛起就緒態進程具有比就緒態進程更高的優先級,系統將把掛起就緒態進程轉換成就緒態。
就緒態→掛起就緒態:操作系統根據當前資源狀況和性能要求,也可以決定把就緒態進程對換出去成爲掛起就緒態。
掛起等待態→等待態:當一個進程等待一個事件時,原則上不需要把它調入內存。但是在下面一種情況下,這一狀態變化是可能的。當一個進程退出後,主存已經有了一大塊自由空間,而某個掛起等待態進程具有較高的優先級並且操作系統已經得知導致它阻塞的事件即將結束,此時便發生了這一狀態變化。
運行態→掛起就緒態:當一個具有較高優先級的掛起等待態進程的等待事件結束後,它需要搶佔 CPU,而此時主存空間不夠,從而可能導致正在運行的進程轉化爲掛起就緒態。另外處於運行態的進程也可以自己掛起自己。
新建態→掛起就緒態:考慮到系統當前資源狀況和性能要求,可以決定新建的進程將被對換出去成爲掛起就緒態。