1. 程式人生 > 其它 >(程序管理)05.程序的排程演算法

(程序管理)05.程序的排程演算法

程序排程,就是緒狀態的程序獲得 CPU 的使用權,程序由就緒狀態轉變成執行狀態。

程序排程可以分為:

搶佔式 系統會根據程序的優先順序高低來進行排程,程序之間可以插隊
非搶佔式 系統按照先來先服務的方式來排程,程序間不能插隊

程序排程演算法有很多,比較常用的排程演算法如下:

1、先來先服務 first come first serve (FCFS)

先來的程序先被排程,這種演算法很公平,但是如果執行的是一個長作業,那麼後面的短作業將會被長時間擱置,造成短作業飢餓。

2、短作業優先 shortest job first (SJF)

為了避免短作業飢餓的情況,就優先把短作業都執行完,然後再執行長作業。這樣又會引發另一個問題,那就是如果短作業非常多,那麼容易導致長作業將不會被執行,又會造成長作業飢餓。

3、時間片輪轉 round serve (RS)

時間片輪轉就是輪詢,定義一個時間片的長度,然後平均給每個程序分配時間片,一旦時間片用完,此時作業未執行完,作業就會從執行狀態轉變成就緒狀態,等待被重新排程。如果作業比較多,那這樣容易造成長作業需要輪轉好久才能執行完。

4、多級反饋佇列

該演算法設定了不同的佇列,可以分類為高、中、低優先順序佇列,並且優先順序越高,分配的時間片就越短,反之優先順序越低,分配時間片越長。首先,先進來的作業會進入高優先順序;如果沒有被執行完,就會壓入中優先順序佇列;如果還沒執行完再壓入低優先順序佇列。只有上一個佇列的程序被執行完,才能執行當前佇列的程序。

這種演算法還是無法有效避免長作業飢餓的情況,因為只有高優先順序佇列沒有程序,才會執行下一級別的佇列。假如上一級的佇列一直有程序,那麼下一級別的佇列的程序將會飢餓。

5、高響應比優先

這種演算法是在短作業優先排程演算法的基礎上,加上一個隨著時間累計而疊加的權重機制。

系統會根據優先順序來決定程序執行的先後,但同時為了確保那些等待時間長的程序也能被執行,那麼就會結合程序等待的時間來更新程序的權重。其中等待時間越長,那麼權重越高。

這種演算法既可以優先完成短作業,又能確保長作業不至於長期飢餓,是一個折中的演算法。