批作業調度算法
首先理清概念:
作業周轉時間 = 完成時間 - 提交時間
作業的帶權周轉時間 = 作業的周轉時間 / 運行時間
平均周轉時間 = 各作業的帶權周轉時間之和 / 作業數目
常用的作業調度算法:
-
先來先服務算法(First Come Serve , FCFS)
是按作業進入系統的先后次序進行調度,即每次調度都在后被作業中選擇一個最先進入隊列的作業
特點:實現簡單,有利於長作業,不利於短作業**
示例:
起始:
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | ||||
| J2 | 8:50 | 30 | ||||
| J3 | 9:00 | 12 | ||||
| J4 | 9:10 | 6 |
第一輪:
-
先選擇先來的,即先提交的 J1 :8:00 ,將其作為第一個開始的,由於他前面沒有等待隊列,所以它的開始時間為:
8:00。 -
結束時間為開始時間加上運行時間:
8:00 + 60min = 9:00 -
周轉時間為:完成時間(結束時間) - 提交時間 =
9:00-8:00= 60min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
60/60= 1
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 60 | 1 |
| J2 | 8:50 | 30 | ||||
| J3 | 9:00 | 12 | ||||
| J4 | 9:10 | 6 |
第二輪:
-
由於按照先來先選擇的算法,選l擇第二的, J1 :8:50 ,將其作為第二,由於他還需要等待他前面的完成了才到他,所以它的開始時間為:
9:00。 -
結束時間為:開始時間 + 運行時間 =
9:00 + 30min = 9:30 -
周轉時間為:完成時間(結束時間) - 提交時間 =
9:30-8:50= 40min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
40/30= 4/3
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 60 | 1 |
| J2 | 8:50 | 30 | 9:00 | 9:30 | 40 | 4/3 |
| J3 | 9:00 | 12 | ||||
| J4 | 9:10 | 6 |
剩下的以此類推。。。
最終為:
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 60 | 1 |
| J2 | 8:50 | 30 | 9:00 | 9:30 | 40 | 4/3 |
| J3 | 9:00 | 12 | 9:30 | 9:42 | 42 | 21/6 |
| J4 | 9:10 | 6 | 9:42 | 9:48 | 38 | 19/3 |
平均周轉時間 = 各作業的帶權周轉時間之和 / 作業數目
= (1+4/3+21/6+19/)/4 ≈ 3.0417
-
最短作業優先(Shortest Job First SJF)
總是選擇估計計算時間最短的作業投入運行
特點:克服了FCFS 偏愛長作業的缺點,易於實現,會使系統平局周轉時間最短,系統吞吐量大;缺點是:1)需要預先知道作業所需的CPU時間 2)護士了作業等待時間,容易出現飢餓想象
示例:
起始:
作業 提交時間 運行時間(min) 開始時間 結束時間 周轉時間 Ti /min 帶權周轉時間 Wi /min J1 8:00 60 J2 8:50 30 J3 9:00 12 J4 9:10 6
第一輪:
-
由於J1是最先來的,此時沒有別的等待隊列,故先進行J1 ,所以它的開始時間為:
8:00。 -
結束時間為:開始時間 + 運行時間 =
8:00 + 60min = 9:00 -
周轉時間為:完成時間(結束時間) - 提交時間 =
9:00-8:00= 60min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
60/60= 1
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 60 | 1 |
| J2 | 8:50 | 30 | ||||
| J3 | 9:00 | 12 | ||||
| J4 | 9:10 | 6 |
第二輪:
-
選取在第一輪執行結束之后的時間之前
9:00提前的作業中運行時間最低段的作為第二輪作業,即:在J2:8:50與J3:9:00中選取運行時間最短的,即J3.所以第二輪的開始時間為:9:00。 -
結束時間為:開始時間 + 運行時間 =
9:00 + 12min = 9:12 -
周轉時間為:完成時間(結束時間) - 提交時間 =
9:12-9:00= 12min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
12/12= 1
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 60 | 1 |
| J2 | 8:50 | 30 | 9:00 | 9:12 | 12 | 1 |
| J3 | 9:00 | 12 | ||||
| J4 | 9:10 | 6 |
第三輪:
-
選取在第二輪執行結束之后的時間之前
9:12提前的作業中運行時間最低段的作為第二輪作業,即:在J2:8:50與J4:9:10中選取運行時間最短的,即J4.所以第二輪的開始時間為:9:12。 -
結束時間為:開始時間 + 運行時間 =
9:12 + 6min = 9:18 -
周轉時間為:完成時間(結束時間) - 提交時間 =
9:18-9:10= 8min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
8/6= 4/3
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 60 | 1 |
| J2 | 8:50 | 30 | ||||
| J3 | 9:00 | 12 | 9:00 | 9:12 | 12 | 1 |
| J4 | 9:10 | 6 | 9:12 | 9:18 | 8 | 4/3 |
同理可得第四輪結果為:
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 60 | 1 |
| J2 | 8:50 | 30 | 9:18 | 9:48 | 58 | 29/15 |
| J3 | 9:00 | 12 | 9:00 | 9:12 | 12 | 1 |
| J4 | 9:10 | 6 | 9:12 | 9:18 | 8 | 4/3 |
平均周轉時間 = 各作業的帶權周轉時間之和 / 作業數目
= (1+29/15+1+4/3)/4 ≈ 1.3167
-
響應比高者優先算法(Highest Response Ratio First ,HRRF)
計算后備作業隊列中每個作業的響應比,然后挑選響應比最高者。
其中響應比計算公式為:\(\frac {作業的響應時間}{作業的運行時間}\) = \(\frac {作業的等待時間+作業的運行時間}{作業的運行時間}\)= 1+ \(\frac {作業的等待時間}{作業的運行時間}\)
特點:即考慮作業的等待時間,有考慮作業的運行時間,是介於上述兩種算法的折中算法。缺點是每次都要計算各道的作業響應比,有一定的時間開銷。
示例:
起始:
作業 提交時間 運行時間(min) 開始時間 結束時間 周轉時間 Ti /min 帶權周轉時間 Wi /min J1 8:00 60 J2 8:50 30 J3 9:00 12 J4 9:10 6 第一輪:
-
首先還是一樣的先執行第一個提交的作業J1,所以提交時間時間即為運行時間:
8:00, -
結束時間為:開始時間 + 運行時間 =
8:00 + 60min = 9:00
-
周轉時間為:完成時間(結束時間) - 提交時間 =
9:00-8:00= 60min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
60/60= 1 -
更新第一輪結束時間之前提交的作業的等待時間。
顯然,滿足條件(在結束時間9:00之前提交作業的)有J2,J3
等待時間為:
上個作業結束時間-該作業提交時間 顯然,J1 = 0
J2 = 9:00 - 8:50 = 10
J3 = 9:00 - 9:00 = 0
-
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 等待時間/min | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 0 | 60 | 1 |
| J2 | 8:50 | 30 | 10 | ||||
| J3 | 9:00 | 12 | 0 | ||||
| J4 | 9:10 | 6 |
第二輪:
-
首先在滿足條件(在第一輪完成時間之前提交的作業)中選取響應比最大的作為第二輪作業任務
- J2 = 1 + 10/30
- J3 = 1 + 0/12
顯然,響應比:J2 > J3
因此選取J2作為第二輪的任務,其開始時間為
第一輪結束時間:9:00 -
結束時間為:開始時間 + 運行時間 =
9:00 + 30min = 9:30
-
周轉時間為:完成時間(結束時間) - 提交時間 =
8:50-9:30= 40min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
40/30= 4/3 -
更新第二輪結束時間之前提交的作業的等待時間。
顯然,滿足條件(在結束時間9:30之前提交作業的)有J3,J4
等待時間為:
上個作業結束時間-該作業提交時間 J3 = 9:30 - 9:00 = 30
J4 = 9:30 - 9:10 = 20
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 等待時間/min | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 0 | 60 | 1 |
| J2 | 8:50 | 30 | 9:00 | 9:30 | 10 | 40 | 4/3 |
| J3 | 9:00 | 12 | 30 | ||||
| J4 | 9:10 | 6 | 20 |
第三輪:
-
首先在滿足條件(在第二輪完成時間之前提交的作業)中選取響應比最大的作為第二輪作業任務
- J3 = 1 + 30/12
- J4 = 1 + 20/6
顯然,響應比:J4 > J3
因此選取J4作為第三輪的任務,其開始時間為
第二輪結束時間:9:30 -
結束時間為:開始時間 + 運行時間 =
9:30 + 6min = 9:36
-
周轉時間為:完成時間(結束時間) - 提交時間 =
9:36-9:10= 26min -
帶權周轉時間 : 作業的周轉時間 / 運行時間 =
26/6= 13/3 -
更新第二輪結束時間之前提交的作業的等待時間。
顯然,滿足條件(在結束時間9:36之前提交作業的)有J3
等待時間為:
上個作業結束時間-該作業提交時間 J3 = 9:36 - 9:00 = 36
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 等待時間/min | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 0 | 60 | 1 |
| J2 | 8:50 | 30 | 9:00 | 9:30 | 10 | 40 | 4/3 |
| J3 | 9:00 | 12 | 36 | ||||
| J4 | 9:10 | 6 | 9:30 | 9:36 | 20 | 26 | 13/3 |
同理可得第四輪結果:
| 作業 | 提交時間 | 運行時間(min) | 開始時間 | 結束時間 | 等待時間/min | 周轉時間 Ti /min | 帶權周轉時間 Wi /min |
|---|---|---|---|---|---|---|---|
| J1 | 8:00 | 60 | 8:00 | 9:00 | 0 | 60 | 1 |
| J2 | 8:50 | 30 | 9:00 | 9:30 | 10 | 40 | 4/3 |
| J3 | 9:00 | 12 | 9:36 | 9:48 | 36 | 48 | 4 |
| J4 | 9:10 | 6 | 9:30 | 9:36 | 20 | 26 | 13/3 |
平均周轉時間 = 各作業的帶權周轉時間之和 / 作業數目
= (1+4/3+4+13/3)/4 ≈ 2.6667
並且不難看出,響應比高者優先算法的效率是介於最短作業優先,來先服務算法
