系統操作原理:進程的狀態和轉換(五態模型)

一、進程狀態與轉換

1.1 進程的三態模型

基于進程在執行過程中可能出現的情況,定義了以下三種狀態:

運行(running)態:指進程正在使用處理器執行程序。在單處理器系統中,僅有一個進程處于運行狀態;在多處理器系統中,則可能有多個進程同時運行。

就緒(ready)態:進程已具備運行條件,僅等待系統分配處理器即可執行。多個處于就緒狀態的進程通常排隊等待,形成就緒隊列。

等待(wait)態:也稱阻塞態或睡眠態,進程因等待某事件完成而暫停運行,例如等待I/O操作結束。即使分配處理器,進程也無法立即運行。

系統操作原理:進程的狀態和轉換(五態模型)

進程狀態轉換的具體原因如下:

運行態→等待態:進程需要等待資源,如外設數據傳輸或人工干預。

等待態→就緒態:等待的資源或事件完成,如I/O操作結束或人工干預完成。

運行態→就緒態:進程的時間片用完,或有更高優先級的進程需要運行。

就緒態→運行態:當處理器空閑時,系統選擇一個就緒隊列中的進程運行。

1.2 進程的五態模型

在三態模型的基礎上,五態模型增加了新建態(new)和終止態(exit):

新建態:表示進程被創建但尚未進入就緒隊列。創建進程需要兩個步驟:1.分配資源并建立管理信息;2.設置為就緒態,等待被調度。

終止態:表示進程完成任務、出現無法解決的錯誤或被其他進程或操作系統終止。終止進程涉及兩個步驟:1.進行善后處理;2.回收資源并從系統中刪除。

系統操作原理:進程的狀態和轉換(五態模型)

內核學習網站:

linux內核源碼/內存調優/文件系統/進程管理/設備驅動/網絡協議

引起進程狀態轉換的具體原因如下:

NULL→新建態:執行程序,創建子進程。

新建態→就緒態:操作系統完成創建進程的操作,且系統性能和內存允許。

運行態→終止態:進程達到自然結束點、出現無法解決的錯誤、被操作系統或其他有終止權的進程終止。

運行態→就緒態:進程時間片用完,或有更高優先級的進程需要運行。

運行態→等待態:等待資源,如外設傳輸或人工干預。

就緒態→終止態:某些操作系統允許父進程終止子進程(未在圖中顯示)。

等待態→終止態:某些操作系統允許父進程終止子進程(未在圖中顯示)。

終止態→NULL:完成善后操作。

1.3 進程的七態模型

三態模型和五態模型假設所有進程都在內存中運行,但當系統資源(特別是內存)不足以滿足所有進程運行時,需要將某些進程掛起(suspend),對換到磁盤交換區,釋放其資源,暫不參與調度,以平滑系統負載。

七態模型在五態模型基礎上增加了掛起就緒態(ready suspend)和掛起等待態(blocked suspend):

掛起就緒態:進程具備運行條件,但目前在外存中,需對換到內存才能被調度執行。

掛起等待態:進程等待某事件發生,且目前在外存中。

系統操作原理:進程的狀態和轉換(五態模型)

引起進程狀態轉換的具體原因如下:

等待態→掛起等待態:根據當前資源和性能要求,操作系統決定將等待態進程對換出去。

掛起等待態→掛起就緒態:等待事件發生后,掛起等待態進程轉為掛起就緒態。

掛起就緒態→就緒態:當內存中無就緒態進程或掛起就緒態進程優先級更高,系統將掛起就緒態進程轉為就緒態。

就緒態→掛起就緒態:根據當前資源和性能要求,操作系統決定將就緒態進程對換出去。

掛起等待態→等待態:當有足夠內存且掛起等待態進程優先級高,操作系統知曉其等待事件即將結束時,可能發生此狀態轉換。

運行態→掛起就緒態:高優先級的掛起等待態進程等待事件結束后需搶占CPU,但內存不足,導致運行態進程轉為掛起就緒態。運行態進程也可自掛起。

新建態→掛起就緒態:根據當前資源和性能要求,操作系統決定新建進程對換出去。

掛起進程等同于不在內存中的進程,因此掛起進程不參與低級調度,直到被調換進內存。

掛起進程具有以下特征:

  • 該進程不能立即執行。
  • 掛起進程可能等待某事件,但事件結束并不能使進程具備執行條件(轉為掛起就緒態)。
  • 進程進入掛起狀態是由于操作系統、父進程或自身阻止其運行。
  • 結束掛起狀態的命令只能由操作系統或父進程發出。

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享