以下是幾個調度策略:
FCFS
A周轉時間:20-0=20 帶權周轉時間 20/20=1
B周轉時間:23-1=22(t=1時便到了,但一直在等着A) 帶權周轉時間 22/3=7.33
C周轉時間:28-2=26 帶權周轉時間 26/5=5.2
以下兩個圖是對比,一個是長進程先到,讓短進程等着。
(如果沒有其它策略的話,短進程和長進程老老實實都去排隊的話,短進程肯定不願意呀。我去食堂排隊,我就買自己的飯,前面那個人帶一個寢室的飯,為啥我要和他排在一個隊里。)
SPN
(短進程肯定喜歡這個呀,對短進程來說,只要我時間短,我就能排前面,而且這個算法是對FCFS的優化,你也看見上面的了,短進程在長進程之前執行確實是可以高山平均周轉時間,還有拿個帶權的周轉時間。)
但是就不把長進程當人看了。誰讓你那么浪費時間呢,你就等着吧,可能這一等,就再也不可能執行了。
但這個呢,還是老老實實排隊的。
他和FCFS是一類的。
下面的
SPT(shortest process next)
最短剩余時間優先算法則是搶了(開始插隊了!!)
看個例題
在t=0時刻,只有p1到了,所以p1開始了。(雖然p1是長進程)
但是不能搶啊,這可是由FCFS優化而來的SPN算法,非搶占。
p2到了等着,p3到了等着,p4到了等着。
p1執行完了,在排隊的人里看,誰的運行時間是最短的,不就是p3嘛,才1s,那他就續着p1的繼續執行了,下面就以此類推。p2和p4運行時間相同,那就按先來先服務吧,p2上,最后是p4.
等待時間 p1:0 p2:8-2=6 p3:7-4=3 p4:12-5=7
SRT(shortest remaining time)可是SPN的優化版本。可以搶了,不用死板的排隊了。
p1到了,就執行了。p2到了,p1才執行了兩秒(剩余時間7-2=5,和前來搶占的p2比較,p2才4秒,按照SRT的規矩,時間短的先執行),所以p2就搶了p1的位置開始執行。p2執行了兩秒,剩了兩秒,p3來了,p3表示自己才1秒,泥奏凱。p3執行,p3執行完,p4來了,現在的隊伍里是p1:5s p2:2s p4:4s,按這個順序,就是p2 p4 p5
等待時間:p1:2s---11s都在等待 p2:4s--5s等了1s p3:沒有等待 p4:5s來的,7s才執行。等了兩秒。
時間片輪轉算法
一個一個的排隊(不過排的時間都是定量的,一個時間片的時長,不會因為你是長進程就占到便宜。)執行完時間片就到隊尾繼續排隊。
分了兩種情況:
時間片過大
看上面的圖,發現就是和FCFS差不多了。
時間片過小
交換頻繁,開銷過大
排隊在規定時間做自己的事,做完了就走,做不完,排隊去!
(時間片輪換,要考也沒啥可考的吧。)
接下來還有
高優先權優先調度算法,又稱最短(高)響應比優先(HRRN)
可能會疑惑,為什么這兩個名字指的是同一個算法。
前面的算法以運行時間作為優先級的標准,那樣太片面了,所以這個算法就是給每個p1p2p3按照其緊急程度編個優先級,這樣就很完美。(同樣分為非搶占式和搶占式,就跟SPN和SRT一樣,多重復幾遍就能記得更清晰喲)
那么接下來咱們就看看按照怎么樣的標准來編優先級才會完美。
例題:
開始A 運行,這個是非搶占的。A運行完B到了,那就B運行,B運行完已經是6s了,CDE都到了,現在才需要算優先級(響應比),前面的算響應比的公式還記得嗎,
w是等待時間,s是運行時間。(在這里t=9是時間節點,算等待時間就拿9減就好了)
C:9-4=5 等了5s (5+4)/4=2.25
D:9-6=3 (3+5)/5=1.6
E:9-8=1 (1+2)/2=1.5
高響應比的優先,選C執行。
咱們現在算的都是動態優先級,所以在c執行完后,DE的優先級已經改變了。要再算一次。在這里t=13是時間節點,算等待時間就拿13減就好了)
D:13-6=7 (7+5)/5=2.4
E:13-8=5 (5+2)/2=3.5
高響應比的優先,選E執行。
E之后只剩下D,D執行,結束。
(從上面兩步你就可以清楚的認識到:等待的越久,優先級就越高;運行的時間越短,優先級越高。)
再看這個,平均歸一化周轉時間。
就是各個進程執行時的響應比的平均值。
我們確定的有兩個C2.25 E3.5
其余三個都是動態的,要計算一下。
A等待時間0 (0+3)/3=1
B等待時間3-2=1 (1+6)/6=1.17
D最后一個執行的,等待時間 20-6=14 (14+5)/5=2.8
再都加起來除以5就得到了。
多級反饋隊列算法
最短響應比優先是非搶占的動態優先級調度策略
多級反饋隊列算法則是搶占的動態優先級調度策略