進程的狀態及轉換
進程的三態模型
-
執行(running)態:進程占有處理器正在運行的狀態。
進程已獲得CPU,其程序正在執行。在單處理機系統中,只有一個進程處於執行狀態; 在多處理機系統中,則有多個進程處於執行狀態。
-
就緒(ready)態:進程具備運行條件,等待系統分配處理器以便運行的狀態。
當進程已分配到除CPU以外的所有必要資源后,只要再獲得CPU,便可立即執行,進程這時的狀態稱為就緒狀態。在一個系統中處於就緒狀態的進程可能有多個,通常將它們排成一個隊列,稱為就緒隊列。
-
阻塞(block)態:又稱等待態,指進程不具備運行條件,正在等待某個時間完成的狀態。
也稱為等待或睡眠狀態,一個進程正在等待某一事件發生(例如請求I/O而等待I/O完成等)而暫時停止運行,這時即使把處理機分配給進程也無法運行,故稱該進程處於阻塞狀態。

引起進程狀態轉換的具體原因如下:
執行態→阻塞態:等待使用資源;如等待外設傳輸;等待人工干預。
阻塞態→就緒態:資源得到滿足;如外設傳輸結束;人工干預完成。
執行態→就緒態:運行時間片到;出現有更高優先權進程。
就緒態→執行態:CPU 空閑時選擇一個就緒進程。
進程的五態模型
五態模型在三態模型的基礎上增加了創建態(new)和終止態(exit)。
-
創建態:對應於進程被創建時的狀態,尚未進入就緒隊列。
1.為新進程分配所需要資源和建立必要的管理信息(分配PCB及其所需資源),設置該進程為就緒態,並等待被調度執行
2.但進程所需的資源尚不能滿足,例如:內存不夠用,無法將該進程設為就緒態,則此時創建工作並未完成,進程不能被直接調用,
該狀態就為創建態
3.當處於創建態的進程獲取到它所需的資源后,則
轉為就緒態
-
終止態:指進程完成任務到達正常結束點,或出現無法克服的錯誤而異常終止,或被操作系統及有終止權的進程所終止時所處的狀態。
處於終止態的進程不再被調度執行,下一步將被系統撤銷,最終從系統中消失。
1.先等待操作系統或相關的進程進行善后處理(如抽取信息)。
2.然后回收占用的資源並被系統刪除(將PCB清零並歸還系統)。

引起進程狀態轉換的具體原因如下:
NULL→創建態:執行一個程序,創建一個子進程。
創建態→就緒態:當操作系統完成了進程創建的必要操作,並且當前系統的性能和虛擬內存的容量均允許。
運行態→終止態:當一個進程到達了自然結束點,或是出現了無法克服的錯誤,或是被操作系統所終結,或是被其他有終止權的進程所終結。
運行態→就緒態:運行時間片到;出現有更高優先權進程。
運行態→等待態:等待使用資源;如等待外設傳輸;等待人工干預。
就緒態→終止態:未在狀態轉換圖中顯示,但某些操作系統允許父進程終結子進程。
等待態→終止態:未在狀態轉換圖中顯示,但某些操作系統允許父進程終結子進程。
終止態→NULL:完成善后操作
進程的七態模型
三態模型和五態模型都是假設所有進程都在內存中的事實上有序不斷的創建進程,當系統資源尤其是內存資源已經不能滿足進程運行的要求時,必須把某些進程掛起(suspend),對換到磁盤對換區中,釋放它占有的某些資源,暫時不參與低級調度。
引起進程掛起的原因是多樣的,主要有:
-
終端用戶的請求。當終端用戶在自己的程序運行期間發現有可疑問題時,希望暫停使自己的程序靜止下來。亦即,使正在執行的進程暫停執行;若此時用戶進程正處於就緒狀態而未執行,則該進程暫不接受調度,以便用戶研究其執行情況或對程序進行修改。我們把這種靜止狀態成為“掛起狀態”。
-
父進程的請求。有時父進程希望掛起自己的某個子進程,以便考察和修改子進程,或者協調各子進程間的活動。
-
負荷調節的需要。當實時系統中的工作負荷較重,已可能影響到對實時任務的控制時,可由系統把一些不重要的進程掛起,以保證系統能正常運行。
-
操作系統的需要。操作系統有時希望掛起某些進程,以便檢查運行中的資源使用情況或進行記賬。
-
對換的需要。為了緩和內存緊張的情況,將內存中處於阻塞狀態的進程換至外存上。
七態模型在五態模型的基礎上增加了靜止就緒態(ready suspend)和靜止阻塞態(blocked suspend)。
- 靜止(掛起)就緒態:進程具備運行條件,但目前在
外存
中,只有它被對換到內存才能被調度執行。 - 靜止(掛起)阻塞態:表明進程正在等待某一個事件發生且在
外存
中。