調度算法
在操作系統中存在着多種調度算法,有的適於作業調度,有的適於進程調度,也有的調度算法對二者都可用。
先來先服務
FCFS(First Come First Serve)
- 規則
按照作業/進程到達的先後順序進行服務
用於作業調度時,考慮的是哪個作業先到達後備隊列;用 於進程調度時,考慮的是哪個進程先到達 就緒隊列
屬於非搶佔式算法
優點:公平、算法實現簡單
缺點:排在長作業(進程)後面的短作業需要等待很長時間,帶權週轉時間很大,對短作業來說用戶體驗不好。即, FCFS算法對長作業有利,對短作業不利
不會產生某進程/作業長期得不到服務(飢餓情況)
例題:各進程到達就緒隊列的時間、需要的運行時間如下表所示。使用先來先服務調度算法,計算各 進程的等待時間、平均等待時間、週轉時間、平均週轉時間、帶權週轉時間、平均帶權週轉時間。
進程 | 到達時間 | 運行時間 |
---|---|---|
A | 0 | 7 |
B | 2 | 4 |
C | 4 | 1 |
D | 5 | 4 |
根據先來先服務,按照先後順序調度。
調度順序:A -> B -> C -> D
週轉時間=完成時間-到達時間
A:7-0=7、B:11-2=9、C:12-4=8、D:16-5=11
帶權週轉時間=週轉時間/運行時間
A:7/7=1、B:9/4=2.25、C:8/1=8、D:11/4=2.75
等待時間=週轉時間–運行時間
A:7-7=0、B:9-4=5、C:8-1=7、D:11-4=7
平均週轉時間
(7+9+8+11)/4=8.75
平均帶權週轉時間
(1+2.25+8+2.75)/4=3.5
平均等待時間
(0+5+7+7)/4=4.75
短作業優先
SJF(Shortest Job First)
先來先服務算法非常公平,但是如果我們的服務時間很短,但由於到達較晚,等待時間非常的長,這對短作業來說用戶體驗不好。
來看看短作業優先算法
- 規則
最短的作業/進程優先得到服務(所謂“最短”,是指要求服務時間最短)
即可用於作業調度,也可用於進程調度。用於進程調度時 稱爲“短進程優先(SPF,ShortestProcessFirst)算法”
SJF和SPF是非搶佔式的算法。但是也有搶佔式的版本——最短剩餘時間優先算法(SRTN,ShortestRemainingTimeNext)
優點:“最短的”平均等待時間、平均週轉時間
缺點:不公平。對短作業有利,對長作業不利。如果源源不斷地有短作業/進程到來,可能使長作業/進 程長時間得不到服務,產生“飢餓”現象。如果一直得不 到服務,則稱爲“餓死”
我們使用非搶佔式的短作業優先調度算法
計算一下上面的題:
最短的作業優先得到服務
調度順序爲:A -> C -> B -> D
週轉時間=完成時間-到達時間
A:7-0=7、B:12-2=10、C:8-4=4、D:16-5=11
帶權週轉時間=週轉時間/運行時間
A:7/7=1、B:10/4=2.5、C:4/1=4、D:11/4=2.75
等待時間=週轉時間–運行時間
A:7-7=0、B:10-4=6、C:4-1=3、D:11-4=7
平均週轉時間
(7+4+10+11)/4=8
平均帶權週轉時間
(1+4+2.5+2.75)/4=2.56
平均等待時間
(0+3+6+7)/4=4
相比於先來先服務算法,平均週轉時間、平均帶權週轉時間、平均等待時間更低了。
我們使用搶佔式的短作業優先調度算法
(也稱:最短剩餘時間優先算法(SRTN,ShortestRemainingTimeNext))計算一下上面的題:
高響應比優先
HRRN(Highest Response Ratio Next)
時間片輪轉
RR(Round-Robin)