0 前言
接上一篇文章:進程調度(1):FIFO(先進先出)算法 原理與實踐
1 前提鋪墊
請參考上一篇文章的前提鋪墊部分,本文與之完全一致。
2 SJF 原理
SJF(Shortest Job First)短任務優先,也就說,對于Ready的多個進程,先執行最短的內一個。
2.1 算法
這種算法在我們的《算法與數據結構》中也是常見的,對于多個即將執行的任務,每一次都選擇最短的先執行,執行完之后再執行次短的,以此類推,這樣一來,每個任務的周轉時間都是最小的,平均周轉時間也就是最小的。
單純從平均周轉時間這個性能指標來說,這個算法還是不錯的!
2.1.1 實例1
我們先來看一個實例,例如有4個任務(放寬每個任務時間都一樣的假設)
- A:10
- B:1
- C:4
- D:100
假定4個任務同時到達,根據SJF的原則,我們的執行順序應該是
B
C
A
D
對應的Average Turnaround Time = (1 + 5 + 15 + 115) / 4 = 34 (平均周轉時間是34s)
2.1.2 實例1的模擬
我們直接將后面部分要將的實踐搬到這里一部分,讓你有一個直觀的感受:
ARG policy SJF
ARG jlist 10,1,4,100Here is the job list, with the run time of each job: Job 0 ( length = 10.0 )Job 1 ( length = 1.0 )Job 2 ( length = 4.0 )Job 3 ( length = 100.0 )** Solutions **Execution trace:[ time 0 ] Run job 1 for 1.00 secs ( DONE at 1.00 )[ time 1 ] Run job 2 for 4.00 secs ( DONE at 5.00 )[ time 5 ] Run job 0 for 10.00 secs ( DONE at 15.00 )[ time 15 ] Run job 3 for 100.00 secs ( DONE at 115.00 )Final statistics:Job 1 -- Response: 0.00 Turnaround 1.00 Wait 0.00Job 2 -- Response: 1.00 Turnaround 5.00 Wait 1.00Job 0 -- Response: 5.00 Turnaround 15.00 Wait 5.00Job 3 -- Response: 15.00 Turnaround 115.00 Wait 15.00Average -- Response: 5.25 Turnaround 34.00 Wait 5.25
具體含義在上一篇文章已經解釋過了,不再細說。
這樣來看,SJF在這種情況下,的確是最優的,從數學角度來說也是最優的!
但是,如果我們放寬任務同時到達的條件,事情可能又比較糟糕了……
2.2 缺點:非搶占式調度
什么是非搶占式調度呢?我們先來看一個假設:
假設任務A在CPU執行,任務B到達了,并且B的運行時間比A小,但是A在B到達之前已經在執行了,B就只能等著A執行完再執行,盡管B比A的運行時間少。
這就是非搶占式調度,后來者即便比正在運行的進程時間短,也不能搶占它的位置來運行自己。
這樣的話,會造成什么問題呢?我們來看一個實例
- A:100
- B:10
- C:20
三個進程,A先到達(0時刻到達),隨后B、C到達(B、C同時在時刻10到達)。
程序的執行情況
A
B
C
對于后來的B和C,雖然遠比A運行時間小,但是由于SJF的非搶占,它們只能等著A執行完,然后再執行B,再執行C(因為B比C時間少)。
這顯然是糟糕的,此時,Average Turnaround Time = (100 + 110 + 120) / 3 = 110。看起來,又退化到了FIFO算法……
顯然,非搶占式調度也不是很好。所以人們又提出了新的算法……是的,當舊算法出現問題,自然會催生新算法誕生,人類的科技就是這樣一步步變得越來越強大和復雜。
3 SJF 實踐
你可以充分閱讀README.md文檔,然后自己嘗試一些數字并計算,之后再參考答案。
值得說明的是,模擬程序并不是很完美,默認是多任務同時到達,并且沒有提供修改選項。
4 重要思想
對于同時到達的任務,采取花費時間少的優先執行,這能夠讓我們的Average Turnaround Time這一性能指標達到最優。但是不同時到達的任務,可能不太好用,因為它“不會搶地盤”,只會“傻等著”,后續我們也會介紹解決方案。
后續我們會介紹更多的性能指標,你就會發現,僅僅只有平均周轉時間最優,是遠遠不夠的。
5 預告:進程調度(2b):STCF(最短完成時間優先) 算法 原理與實踐
基于SJF的非搶占式調度的缺點,STCF做了改進,實現了搶占式調度。
下一篇鏈接:進程調度(2b):STCF(最短完成時間優先) 算法 原理與實踐