操作系統調度算法解析

先來先服務調度算法

先來先服務(First Come First Served,FCFS),是一種簡單的調度算法,它既適用於作業調度,也適用於進程調度。先來先服務算法是按照作業或進程到達的先後次序來進行調度。當作業調度中採用該算法時,每次調度都是從後備隊列中選擇一個最先進入該隊列中作業,將它調入內存,爲其創建進程、分配相應的資源,將該作業的進程放入就緒隊列。在進程調度中採用該算法時,每次調度是從就緒隊列中選擇一個最新進入該隊列的進程,並給他分配處理機。

先來先服務調度算法

進程(作業)名 到達時間(開始時間) 運行時間 結束時間 週轉時間
P1 0 9 9 20
P2 0.4 4 13 5
P3 1 1 14 1
P4 5.5 4 18 6
P5 7 2 20 2

先來先服務調度算法分析

時間/s
0 P1到達,P1執行(期間執行9s)
0.4 P2到達,P2未執行,P1執行中(剩餘8.6s)
1 P3到達,P2未執行,P3未執行,P1(剩餘7.6s)
5.5 P4到達,P2未執行,P3未執行,P1(剩餘3.5s)
7 P5到達,P5未執行,P4未執行,P2未執行,P3未執行,P1(剩餘2s)
9 P1 結束 ,P2開始運行(期間執行4s)
13 P2 結束 ,P3開始運行(期間執行1s)
14 P3 結束 ,P4開始運行(期間執行4s)
18 P4 結束 ,P5開始運行(期間執行2s)
20 P4 結束

需要提出的一點,這個調度算法的調度過程是先找作業或者進程中最先到來的那一個,也就是說,這個是看`到達時間`的,到達時間越早,則最先進行調度,值得注意的是,此調度算法是`服務`完一個作業或進程後,再`服務`下一個作業或者進程。

短作業(進程)優先調度算法

短作業優先調度算法(Shortest Job First,SJF)或短進程調度算法(Shortest Process First,SPF)是指對短作業或短進程優先調度的算法 。這裏,作業或進程的長短是以作業或進程要求運行時間的長短來衡量的。

短作業(進程)優先調度算法

進程(作業)名 到達時間(開始時間) 運行時間 結束時間 週轉時間
P1 0 9 20 20
P2 0.4 4 5.4 5
P3 1 1 2 1
P4 5.5 4 11.5 6
P5 7 2 9 2

短作業(進程)優先調度算法分析

時間/s
0 P1到達,P1執行
0.4 P2到達,P2執行,P1停(剩餘8.6s)
1 P3到達,P2停(剩餘3.4s),P3執行
2 P3 結束 ,P2執行
5.4 P2 結束 ,P1執行
5.5 P4到達,P1停(剩餘8.5s),P4運行
7 P5到達,P5運行,P4停(剩餘2.5s)
9 P5 結束 ,P4運行
11.5 P4 結束 ,P1運行
20 P1 結束

值得注意的時,短作業作業(進程)優先調度算法的確是按照`運行時間的長短`來衡量的。也就是誰的運行時間短,就先調度哪一個`作業`或`進程`。但是,這並不意味着是先把最先調度的`那一個作業`或`進程`運行完畢後調度其他的`作業`或`進程`,真正的調度過程是交叉進行的。總的順序還是按照到達的時間開始從最先到達的作業或進程開始進行調度,例如在本例中,P1到達後,立即執行,在P1調度完成之前,P2開始到達,立即執行(此時,P1停止),依次類推。上述表-**短作業(進程)優先調度算法分析** 相信說的已經足夠清楚。

優先級調度算法

在優先級調度算法中,優先級用來表示作業或進程所享有的調度優先權。該算法的關鍵是確定進程或作業的優先級。優先級分爲兩類:靜態優先級動態優先級

靜態優先級

靜態方法根據作業或進程的靜態特性,在作業或進程開始執行前就確定它們的優先級,一旦開始執行後就不能改變。下表的按優先級數高的爲最優先

進程(作業)名 到達時間(開始時間) 運行時間 優先數(級) 結束時間 週轉時間
P1 0 10 3 24 24
P2 0 6 5 6 6
P3 0 2 2 26 26
P4 0 4 1 30 30
P5 0 8 4 14 14

執行過程:

    P2          P5                 P1           P3     P4
|—————————|——————————————|———————————————————|———|——————————|————>
0         6              14                   24  26         30

在這個算法中,爲了簡單的計算 假設5個作業是同時提交的的,都在0時刻提交。整個過程和`先來先服務算法`很相似的,都是先運行完一個作業後,再進行另一個作業的調度。只是調度順序衡量的標準換成了`優先數`。對於優先數的大小,不同題目中給出的標準不同,有的按最小小優先數優先,有的則按最大的優先,這裏不做討論。

時間片輪轉法

時間片輪轉法(Round-Robin,RR算法)主要用於分時系統中的進程調度。
輪轉調度的實現原理爲系統把所有就緒進程按先入先出的原則排成一個隊列,新來的進程就緒隊列末尾,每當執行進程調度時,就緒隊列的隊首進程總是先被調度程序選中,在CPU上運行一個時間片後,系統的計時器發出時鐘中斷,調度程序進行調度,停止該進程的運行,並把它放入就緒隊列的末尾;隨後,進行進程切換,把CPU分給就緒隊列隊首進程,同樣讓它運行一個時間片,如此往復。輪轉法的原理圖如下。

Snipaste1

以下表來說,其中時間片長度爲2ms。

進程(作業)名 到達時間 運行時間 開始時間 結束時間 週轉時間
A 0 10 0 30 30
B 0 6 2 22 20
C 0 2 4 6 2
D 0 4 6 16 10
E 0 8 8 28 20
   A   B     C   D    E    A     B   D    E    A     B   E    A     E   A
|————|————|————|————|————|————|————|————|————|————|————|————|————|————|————|————>
0    2    4    6    8   10    12   14   16   18   20   22   24   26   28   30

在這個算法中,可以把時間片輪轉法看作一個隊列,在隊列前面的先進行調度,但是和先來先服務算法不同是,各個進程是交叉進行的。而在先來先服務算法中則是 **在調度完成一整個作業(進程)** 後,再去調度其他的作業或者進程。從上面的時間軸可以看出,都在`一個時間片大小的時間裏(這裏是2ms)`進行調度,一直到一個進程調度完成,從上面的時間軸上還可以清楚的得出,每個進程的到達時間和開始時間也是不一樣的。這一點和前面的幾種算法也是稍微有區別。

說明

文章未完待續,後續算法持續更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章