進程狀態
-
進程的五種(三種)狀態:
- 新建(New):進程剛被創建,尚未加入到就緒隊列;
- 就緒(Ready):進程已獲得除CPU外的所有資源,等待被調度執行。多個就緒進程存放在就緒隊列中
- 運行(Running):進程正在CPU上執行命令(單核CPU同一時刻僅有一個進程處于運行狀態)
- 阻塞(Blocked/Wait):進程因等待外部事件(如I/O完成、信號量釋放等)暫停執行,即使分配CPU也無法運行。處于阻塞隊列中
- 終止(Terminated):進程執行完畢或被強制終止,操作系統回收其資源(內存、文件句柄等)
-
進程間狀態的切換:
- 新建 → 就緒
- 觸發條件:操作系統完成進程創建(分配內存、初始化PCB等)。
- 就緒 → 運行
- 觸發條件:調度程序選中該進程(如時間片輪轉、優先級調度)。
- 運行 → 就緒
- 觸發條件:
- 時間片用完(分時系統)。
- 更高優先級進程搶占CPU(搶占式調度)。
- 觸發條件:
- 運行 → 阻塞
- 觸發條件:進程主動等待資源或事件,如:
- 發起I/O請求(讀文件、網絡通信)。
- 申請互斥鎖失敗。
- 調用
sleep()
等阻塞式系統調用。
- 觸發條件:進程主動等待資源或事件,如:
- 阻塞 → 就緒
- 觸發條件:等待的事件完成(如I/O結束、鎖釋放),由中斷或信號通知操作系統。
- 運行 → 終止
- 觸發條件:
- 進程正常結束(執行
exit()
)。 - 發生致命錯誤(如段錯誤)。
- 被其他進程強制終止(如
kill
命令)。
- 進程正常結束(執行
- 觸發條件:
- 其他狀態 → 終止
- 觸發條件:
- 父進程終止子進程(如從就緒或阻塞狀態直接終止)
- 觸發條件:
- 新建 → 就緒
-
進程狀態模型擴展:掛起態:
- 引入原因:緩解內存空間不足,將進程暫時換到外存
- 新增狀態:
- 就緒掛起態:進程在外存,可被激活到就緒態
- 阻塞掛起態:進程在外存,等待事件(事件完成后激活到就緒態)
- 情況示例:
- 運行 → 就緒掛起:內存不足時,操作系統掛起低優先級進程。
- 阻塞掛起 → 就緒:事件完成且內存可用時,進程被激活回內存。