就緒狀態 :一個進程獲得了除處理機外的一切所需資源,一旦得到處理機即可運行,則稱此進程處於就緒狀態。 執行狀態:當一個進程在處理機上運行時,則稱該進程處於運行狀態。 阻塞狀態:一個進程正在等待某一事件發生(例如請求I/O而等待I/O完成等)而暫時仃止運行,這時即使把處理機分配給進程也無法運行,故稱該 ...
- 就緒狀態 :一個進程獲得了除處理機外的一切所需資源,一旦得到處理機即可運行,則稱此進程處於就緒狀態。
- 執行狀態:當一個進程在處理機上運行時,則稱該進程處於運行狀態。
- 阻塞狀態:一個進程正在等待某一事件發生(例如請求I/O而等待I/O完成等)而暫時仃止運行,這時即使把處理機分配給進程也無法運行,故稱該進程處於阻塞狀態。
- 掛起狀態:由於IO的速度慢於CPU的運算速度,經常出現CPU等待I/O的情況。這時OS需要將主存中的進程對換至外存。在進程行為模式中需要增加一個新的掛起(suspend)狀態。當記憶體中所有進程阻塞時,OS可將一進程置為掛起態並交換到外存,再調入另一個進程執行。
- 新建狀態:進程剛創建,但還不能運行,OS還沒有把它加到可執行進程組中,通常是還沒有載入到主存中的新進程。
- 退出狀態:OS從可執行進程組中釋放出的進程,或者是因為它自身停止了,或者是因為某種原因被取消。進程不在適合執行,但與作業相關的表和其它信息臨時被OS保留起來,為其他程式提供所需信息。
- 活躍就緒:指進程在主存並旦可被調度的狀態。
- 靜止就緒:指進程被對換到輔存時的就緒狀態,是不能被直接調度的狀態,只有當主存中沒有活躍就緒態進程,或者是掛起態進程具有更高的優先順序,系統將把掛起就緒態進程調回主存並轉換為活躍就緒。
- 活躍阻塞:指進程在主存中。一旦等待的事件產生,便進入活躍就緒狀態。
- 靜止阻塞:指進程對換到輔存時的阻塞狀態。一旦等待的事件產生,便進入靜止就緒狀態。
進程轉換狀態圖
- 三種基本狀態轉換圖:
- 五種基本狀態轉換圖(單掛起):
- 五種基本狀態轉換圖(雙掛起):
阻塞及掛起的理解
- 掛起是一種主動行為,是把一個進程從記憶體轉到外存,而阻塞則是一種被動行為(並不絕對,看個人理解),是在等待事件或資源時任務的表現。對於掛起,其進程所有資源都轉入外存;而阻塞,其進程所有資源依然保存在記憶體中。
- 對應掛起的行為是激活,即當沒有活動就緒進程時或靜止就緒隊列裡面有進程優先順序高於活動就緒裡面所有進程,還有就是當一個進程釋放足夠記憶體時,系統會把一個高優先順序阻塞激活。而阻塞卻沒有對應的主動行為來解除,需要其他進程或系統喚醒。
- 一個比喻:只有一個鍋,當食材已經準備充分的菜就可以下鍋,這就是執行態;而其他準備好的菜就順序放在一旁,等待下鍋,這就是就緒態;還有的菜準備還不是很充分,例如該切片的菜還沒有切片,還有一些佐料還沒有從冰箱里拿出,這就是I/O操作等待,類似阻塞態;而還有一種情況就是廚房的面積太小了,桌子上放不下那麼多的準備下鍋的菜,於是先將那些還沒有準備好的菜放入冰箱,如果還是放不了那麼多菜,就把那些已經準備好的但沒有下鍋的菜放入冰箱,以免變質,這就是掛起態;當桌子上有位置了,就把菜從冰箱拿出來,這便是激活操作。做好的菜就可以端出廚房,這便是退出態。(PS:這裡我假設冰箱空間很大,也存在那種炒到一半的菜放到一邊的情況,即從執行態到就緒態或阻塞態的情況,這種情況可以類似川菜中先將肉處理一下(去腥等等),然後又從鍋里撈出來,用豆瓣和其他佐料來進行腌制(這裡如果佐料沒有在桌子上就類似進入阻塞態,而如果有就相當於進入就緒態,但是鍋里已經被占用了,需要等待一會兒)至於優先順序的高低,也可類比有些菜是為了其他菜做鋪墊(舉個例子:在川菜裡面,回鍋肉和炒白菜,一般家庭會優先做回鍋肉,因為當做回鍋肉時,會炒出許多豬油,而這些有可以用來炒白菜,這樣的炒白菜不僅好吃,而且也節約了許多油。))