處理機調度算法詳解----作業調度
在之前的理論篇中,我們也介紹了處理機調度的層次,不同的操作系統也會根據自己的設計目標來配置不同層次的調度算法,並且因爲調度算法衆多,如果全部糅雜在一起來講,會讓人比較困惑,因此將調度算法按照層次來講解,本文會先講作業調度算法。下文涉及到的一些名詞,如果不明白,可以參考上一篇博文。
作業調度調度的對象是作業,作業在概念上和程序還是有些區別的,作業是處於外存中的,也就是在後備隊列上的,作業調度的任務就是從外存的後備對列選取某些作業調入內存,併爲他們創建進程、分配必要的資源,也只有作業被調入到內存中,併爲之分配資源,才能完成進程的創建工作,OS纔可以進行其他的調度。
作業調度其執行週期較長,大約幾分鐘一次,因此也稱爲長程調度。下面我們一起來看下作業調度的幾種調度算法。
1.先來先服務(FCFS)調度算法
FCFS是最早期、最簡單的調度算法,是一種非搶佔式的調度算法,該算法既可用於作業調度也可用於進程調度。
在用於作業調度時,系統按照作業到達的先後次序來進行調度,從後備作業隊列中選擇幾個最先進入該隊列的作業,將他們調入內存,爲他們創建進程和分配資源,並將進程插入到就緒隊列中。
在用於進程調度時,把處理機分配給最先進入就緒隊列的進程,一個進程一旦分得處理機,便執行下去,直到該進程完成或阻塞時,才釋放處理機。(非搶佔式)
缺點:沒考慮優先級。
FCFS有利於長作業而不利於短作業,因爲短作業必須一直等待前面的長作業執行完畢才能執行,而長作業又需要執行很長時間,造成了短作業等待時間過長。
FCFS有利於CPU繁忙型作業而不利於I/O繁忙型作業,因爲對於I/O繁忙型作業,處理機需要等待I/O完成,這樣會導致CPU的利用率降低。
2.短作業優先(SJF)調度算法
由於在實際情況中,短作業所佔的比重較大,爲了能使它們能比長作業優先執行,短作業優先算法由此產生。SJF以作業的長短來計算優先級,作業越短,其優先級越高。作業的長短是以作業所要求的運行時間來衡量的。SJF也是非搶佔式的,同樣可以分別用於作業調度和進程調度。
缺點:
- 必須預知作業的運行時間;
- 對長作業非常不利,長作業的週轉時間會明顯增長,長作業甚至會發生飢餓現象;
- 在採用SJF算法時,人-機無法實現交互;
- 該調度算法完全未考慮作業的緊迫程度。
對於上面的3、4兩點,不只是SJF,FCFS同樣存在類似的問題。
3.高響應比優先(HRRN)調度算法
綜合上述兩種調度算法的缺點,也就是綜合考慮作業運行的時間和等待時間,產生了高響應比優先調度算法。因爲HRRN既考慮了作業的等待時間,又考慮了作業運行時間的調度算法,因此既照顧了短作業,又不使長作業的等待時間過長,從而改善調度的性能。
HRRN因爲綜合考慮了作業運行的時間和等待時間,因此就需要爲每個作業引入一個動態優先級,即優先級是可以改變的,令它隨作業等待的時間延長而增加,這將使長作業的優先級在等待期間不斷增加,當等待時間足夠長時,必然有機會被作業調度算法選中,並將改作業調入內存中。
優先級的定義描述如下:
由上式可以看出:1.如果作業的等待時間相同,則要求服務時間越短,其優先級越高,類似於SJF算法,有利於短作業。2.當要求服務時間相同時,作業的優先權有決定於其等待時間,因爲有類似於FCFS算法。3.對於場作業的優先級,可以隨等待的時間增加而增加,當等待時間足夠長時,也可被選中。
不過該算法實現了FCFS與SJF兩者的較好折中,但是因爲增加的動態優先級,每次在進行調度之前,都需要先做響應比的計算,顯然會增加系統開銷。
4.例子
爲了加深大家的理解,我給出一道例題,同樣,爲了簡單起見,我們規定OS是單道批處理系統,即OS一次只能執行一個作業,被作業調度算法選中後,即可獲得處理機並執行,無須等待進行調度程序爲之分配處理機。
例題:假設一個系統中有5個作業,它們的到達時間和服務時間如下表所示,忽略I/O以及其他開銷,若分別按先來先服務,短進程優先,高響應比優先進行CPU調度,請給出各進程的開始執行時間,完成時間,週轉時間,帶權週轉時間,平均週轉時間和平均帶權週轉時間。
作業名 | 到達時間/h | 服務時間/h |
---|---|---|
A | 0 | 3 |
B | 2 | 6 |
C | 4 | 4 |
D | 6 | 5 |
E | 8 | 2 |
答案如下:
先來先服務調度算法:
進程名 | A | B | C | D | E |
---|---|---|---|---|---|
開始時間 | 0 | 3 | 9 | 13 | 18 |
完成時間 | 3 | 9 | 13 | 18 | 20 |
週轉時間 | 3 | 7 | 9 | 12 | 12 |
帶權週轉時間 | 1 | 7/6 | 2.25 | 2.4 | 6 |
平均週轉時間爲:T = (3+7+9+12+12)/5=8.6
平均帶權週轉時間爲:W=(1+7/6+2.25+2.4+6)/5≈2.56
短作業優先調度算法:
進程名 | A | B | C | D | E |
---|---|---|---|---|---|
開始時間 | 0 | 3 | 11 | 15 | 9 |
完成時間 | 3 | 9 | 15 | 20 | 11 |
週轉時間 | 3 | 7 | 11 | 14 | 3 |
帶權週轉時間 | 1 | 7/6 | 2.75 | 2.8 | 1.5 |
平均週轉時間爲:T = (3+7+11+14+3)/5=7.6
平均帶權週轉時間爲:W=(1+7/6+2.75+2.8+1.5)/5≈1.84
高響應比優先調度算法:
進程名 | A | B | C | D | E |
---|---|---|---|---|---|
開始時間 | 0 | 3 | 9 | 15 | 13 |
完成時間 | 3 | 9 | 13 | 20 | 15 |
週轉時間 | 3 | 7 | 9 | 14 | 7 |
帶權週轉時間 | 1 | 7/6 | 2.25 | 2.8 | 1.4 |
平均週轉時間爲:T = (3+7+9+14+7)/5=8
平均帶權週轉時間爲:W=(1+7/6+2.25+2.8+1.4)/5≈1.72
注:在每次執行調度時,需要計算動態優先級,本題中省略計算過程。
又到了分隔線以下,本文到此就結束了,本文內容全部都是由博主自己進行整理並結合自身的理解進行總結,如果有什麼錯誤,還請批評指正。
如有興趣,還可以查看我的其他幾篇博客,都是OS的乾貨,喜歡的話還請點贊、評論加關注_。