在上一節中我們講了三種排程演算法,分別是先來先服務演算法,短作業優先演算法,高相應比優先演算法,今天我們再來學習三種演算法,分別是時間片輪轉演算法,優先順序排程演算法,多級反饋佇列演算法。
目錄
2.2.5 排程演算法(二)
2.2.5.1 時間片輪轉演算法(rr, round-robin)
2.2.5.2 優先順序排程演算法
2.2.5.3 多級反饋排程演算法
2.2.5.4 三種排程演算法比較
時間片輪轉演算法:按照各程序到達就緒佇列的順序,輪流讓各個程序執行乙個
時間片(如
100ms
)。若程序未在乙個時間片內執行完,則剝奪處理機,將程序重新放到就緒佇列隊尾重新排隊。我們需要注意的是時間片輪轉演算法應用的物件是程序,因為只有程序才會被分配時間片而作業並不會。時間片輪轉演算法是一種搶占式的演算法,由時鐘裝置發出中斷訊號來通知cpu時間已到。
有一組程序,如下圖所示,請用時間片輪轉演算法給出程序的執行順序,時間片分別設為2以及5 。
時間片為2時,程序到達情況如下:
0時刻:只有p1這乙個程序所以p1上處理機執行。
2時刻:p2到達,被存放在就緒佇列的隊頭,剛好p1時間片完於是p1插入到隊尾,p2上處理機執行。
4時刻:p3到達,p2時間片用完被插入到p3之後,但此時隊頭中為p1,於是將p1上處理機執行。
5時刻:p4到達,但是此時p1時間片還沒完於是將p4插入到隊尾
6時刻:p1的時間片完,下處理機並插入到隊尾,處於隊頭的p3進行排程。
7時刻:雖然p3的時間片還沒完但p3已經結束了執行,所以隊頭的p2發生排程9時刻
:程序p2
時間片用完,並剛好執行完,發生排程,
p4上處理機
11時刻:p4
時間片用完,重新回到就緒佇列。
p1上處理機 12
時刻:p1執行完,主動放棄處理機,此時就緒佇列中只剩p4,
p4上處理機
14時刻:就緒隊列為空,因此讓
p4接著執行乙個時間片。
16時刻:所有程序執行結束
上述過程的執行示意圖如下:
這是大家可能會發現,時間片為5的輪轉演算法與先來先服務演算法的排程情況是一致的,所以如果時間片劃分過大那麼時間片輪轉演算法就會退化為先來先服務演算法;另一方面,如果時間片劃分過小就會導致程序切換頻繁,系統開銷過大。
優先順序排程演算法:每個作業/
程序有各自的優先順序,排程時選擇優先順序最高的作業/程序。優先順序排程演算法既有搶占式又有非搶占式,總之一切都是根據優先順序高低來決定的。
在如圖所示的程序中,我們規定優先數越大,優先順序越高,分別用搶占式以及非搶占式給出排程順序:
非搶占式:(括號中是處於就緒佇列中的程序)
0時刻(
p1):只有
p1到達,
p1上處理機。
7時刻(p2、p3
、p4):p1
執行完成主動放棄處理機,其餘程序都已到達,
p3優先順序最高,
p3上處理機。
8時刻( p2、
p4 ):
p3完成,p2、
p4優先順序相同,由於
p2先到達,因此
p2優先上處理機
12時刻(
p4):
p2完成,就緒佇列只剩p4,
p4上處理機。
16時刻( ):p4
完成,所有程序都結束
排程結果如下圖所示:
搶占式:
0時刻(
p1):只有
p1到達,
p1上處理機。
2時刻(
p2):
p2到達就緒佇列,優先順序比
p1更高,發生搶占。
p1回到就緒佇列,
p2上處理機。
4時刻(p1、p3
):p3
到達,優先順序比
p2更高,
p2回到就緒佇列,
p3搶占處理機。
5時刻(p1、
p2、p4):
p3完成,主動釋放處理機,同時,
p4也到達,由於p2比
p4更先進入就緒佇列,因此選擇p2上處理機
7時刻(p1、
p4):
p2完成,就緒佇列只剩p1、
p4,p4上處理機。
11時刻(
p1 ):
p4完成,
p1上處理機
16時刻():
p1完成,所有程序均完成。
排程結果如下圖所示:
當然,優先順序可以不是固定的,作業系統可以靈活的調整優先順序讓等待時間長的程序優先得到服務。
多級反饋排程演算法實際上是對以上各種演算法的折中考慮,演算法規則如下:
多級反饋排程演算法只適用於程序排程,且也有搶占式和非搶占式兩種:搶占式
的演算法。在
k 級佇列的程序執行過程中,若更上級的佇列(1~k-1級)中進入了乙個新程序,則由於新程序處於優先順序更高的佇列中,因此新程序會搶占處理機,原來執行的程序放回 k 級佇列隊尾。
對於以下程序,我們採用搶占式的多級反饋程序排程演算法來進行程序排程:(這個過程實在是太難弄了.....我想弄成gif但失敗了)
排程的順序為p1(1) —> p2(1) —> p1(2)—> p2(1)—> p3(1)—> p2(2)—> p1(4) —> p1(1)(括號中為執行的時間片長度)。
演算法搶占?優點缺點飢餓?補充
時間片輪轉 搶占
公平,適用於分時系統
頻繁切換有開銷,不區分優先順序 不會
時間片大小設計的影響
優先順序排程
非搶占與搶占均可
區分優先順序,適用於實時系統
可能導致飢餓 會
動態優先順序設定
多級反饋佇列 搶占
都是優點
會
作業系統排程演算法
include include include include using namespace std const int maxnum 101 typedef struct information node struct node1 此結構體用於優先順序演算法的搶占式 int priority i...
作業系統排程演算法
在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演算法每次從後備作業佇列中選擇最先進入該...
作業系統 排程演算法
fcfs是最簡單的排程演算法,既可以用於作業排程,也可以用於程序排程,系統將按照作業到達的先後次序來進行排程。sjf演算法是以作業的長短來計算優先順序,作業越短,優先順序越高。作業的長短是以作業所要求的執行時間來衡量的。可以分別用於作業排程和程序排程。缺點 必須預知作業的執行時間 對長作業很不利,長...