先來先服務(First Come First Served,FCFS),是一種簡單的調度算法,它既適用於做業調度,也適用於進程調度。先來先服務算法是按照做業或進程到達的前後次序
來進行調度。看成業調度中採用該算法時,每次調度都是從後備隊列中選擇一個最早進入該隊列中做業,將它調入內存,爲其建立進程、分配相應的資源,將該做業的進程放入就緒隊列。在進程調度中採用該算法時,每次調度是從就緒隊列中選擇一個最新進入該隊列的進程,並給他分配處理機。算法
先來先服務調度算法code
進程(做業)名 | 到達時間(開始時間) | 運行時間 | 結束時間 | 週轉時間 |
---|---|---|---|---|
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)是指對短做業或短進程優先調度的算法 。這裏,做業或進程的長短是以做業或進程要求運行時間的長短
來衡量的。ip
短做業(進程)優先調度算法內存
進程(做業)名 | 到達時間(開始時間) | 運行時間 | 結束時間 | 週轉時間 |
---|---|---|---|---|
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中止),依次類推。上述表-**短做業(進程)優先調度算法分析** 相信說的已經足夠清楚。it
在優先級調度算法中,優先級用來表示做業或進程所享有的調度優先權。該算法的關鍵是肯定進程或做業的優先級。優先級分爲兩類:靜態優先級和 動態優先級 。io
靜態方法根據做業或進程的靜態特性,在做業或進程開始執行前就肯定它們的優先級,一旦開始執行後就不能改變。下表的按優先級數高的爲最優先table
進程(做業)名 | 到達時間(開始時間) | 運行時間 | 優先數(級) | 結束時間 | 週轉時間 |
---|---|---|---|---|---|
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分給就緒隊列隊首進程,一樣讓它運行一個時間片,如此往復。輪轉法的原理圖以下。
如下表來講,其中時間片長度爲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)`進行調度,一直到一個進程調度完成,從上面的時間軸上還能夠清楚的得出,每一個進程的到達時間和開始時間也是不同的。這一點和前面的幾種算法也是稍微有區別。
文章未完待續,後續算法持續更新。