操作系統中的幾種常見進程調度算法

首先來看下集中常見的進程調度算法:

1.先來先服務調度算法

2.短作業優先調度算法

3.優先級調度算法

4.高響應比優先調度算法

5.輪轉調度算法

6.多級反饋隊列



一、先來先服務和短作業(進程)優先調度算法

  1.先來先服務調度算法。

先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於作業調度,也可用於進程調度。FCFS算法比較有利於長作業(進

程),而不利於短作業(進程)。由此可知,本算法適合於CPU繁忙型作業,而不利於I/O繁忙型的作業(進程)。

 
  2. 短作業(進程)優先調度算法。

短作業(進程)優先調度算法(SJ/PF)是指對短作業或短進程優先調度的算法,該算法既可用於作業調度,也可用於進程調度。但其對

作業不利;不能保證緊迫性作業(進程)被及時處理;作業的長短只是被估算出來的。


二、優先級調度算法

爲了照顧緊迫型作業,使之在進入系統後便獲得優先處理,引入了最高優先權優先(FPF)調度算法。此算法常被用於批處理系統中,作爲作業調度算法,也作爲多種操作系

的進程調度算法,還可用於實時系統中。當把該算法用於作業調度時,系統將從後備隊列中選擇若干個優先權最高的作業裝入內存。當用於進程調度時,該算法是把處理機

分配給就緒隊列中優先權最高的進程,這時,又可進一步把該算法分成如下兩種。


1) 非搶佔式優先權算法

在這種方式下,系統一旦把處理機分配給就緒隊列中優先權最高的進程後,該進程便一直執行下去,直至完成;或因發生某事件使該進程放棄處理機時,系統方可再將處理

機重新分配給另一優先權最高的進程。這種調度算法主要用於批處理系統中;也可用於某些對實時性要求不嚴的實時系統中。


2) 搶佔式優先權調度算法

在這種方式下,系統同樣是把處理機分配給優先權最高的進程,使之執行。但在其執行期間,只要又出現了另一個其優先權更高的進程,進程調度程序就立即停止當前進

(優先權最高的進程)的執行,重新將處理機分配給新到的優先權最高的進程。因此,在採用這種調度算法時,是每當系統中出現一個新的就緒進程時,就將其優先權Pi與正

在執行的進程的優先權Pj進行比較。如果Pi≤Pj,原進程Pj便繼續執行;但如果是Pi>Pj,則立即停止Pj的執行,做進程切換,使進程投入執行。顯然,這種搶佔式的優先權調

度算法能更好地滿足緊迫作業的要求,故而常用於要求比較嚴格的實時系統中,以及對性能要求較高的批處理和分時系統中。


三、高響應比優先調度算法

在批處理系統中,短作業優先算法是一種比較好的算法,其主要的不足之處是長作業的運行得不到保證。如果我們能爲每個作業引入前面所述的動態優先權,並使作業的優

先級隨着等待時間的增加而以速率提高,則長作業在等待一定的時間後,必然有機會分配到處理機。該優先權的變化規律可描述爲:



由於等待時間與服務時間之和就是系統對該作業的響應時間,故該優先權又相當於響應比RP。據此,又可表示爲:



由上式可以看出:

(1) 如果作業的等待時間相同,則要求服務的時間愈短,其優先權愈高,因而該算法有利於短作業。

(2) 當要求服務的時間相同時,作業的優先權決定於其等待時間,等待時間愈長,其優先權愈高,因而它實現的是先來先服務。

(3) 對於長作業,作業的優先級可以隨等待時間的增加而提高,當其等待時間足夠長時,其優先級便可升到很高,從而也可獲得處理機。簡言之,該算法既照顧了短作業,

又考慮了作業到達的先後次序,不會使長作業長期得不到服務。因此,該算法實現了一種較好的折衷。當然,在利用該算法時,每要進行調度之前,都須先做響應比的計算,這

會增加系統開銷。


四、輪轉調度算法

時間片輪轉(Round RobinRR)法的基本思路是讓每個進程在就緒隊列中的等待時間與享受服務的時間成比例。在時間片輪轉法中,需要將CPU的處理時間分成固定大小

的時間片,例如,幾十毫秒至幾百毫秒。如果一個進程在被調度選中之後用完了系統規定的時間片,但又未完成要求的任務,則它自行釋放自己所佔有的CPU而排到就緒隊列

的末尾,等待下一次調度。同時,進程調度程序又去調度當前就緒隊列中的第一個進程。


顯然,輪轉法只能用來調度分配一些可以搶佔的資源。這些可以搶佔的資源可以隨時被剝奪,而且可以將它們再分配給別的進程。CPU是可搶佔資源的一種。但打印機等

資源是不可搶佔的。由於作業調度是對除了CPU之外的所有系統硬件資源的分配,其中包含有不可搶佔資源,所以作業調度不使用輪轉法。在輪轉法中,時間片長度的選取非

常重要。首先,時間片長度的選擇會直接影響到系統的開銷和響應時間。如果時間片長度過短,則調度程序搶佔處理機的次數增多。這將使進程上下文切換次數也大大增加,從

而加重系統開銷。反過來,如果時間片長度選擇過長,例如,一個時間片能保證就緒隊列中所需執行時間最長的進程能執行完畢,則輪轉法變成了先來先服務法。時間片長度的

選擇是根據系統對響應時間的要求和就緒隊列中所允許最大的進程數來確定的。


  在輪轉法中,加入到就緒隊列的進程有3種情況,一種是分給它的時間片用完,但進程還未完成,回到就緒隊列的末尾等待下次調度去繼續執行。另一種情況是分給該進程

時間片並未用完,只是因爲請求I/O或由於進程的互斥與同步關係而被阻塞。當阻塞解除之後再回到就緒隊列。第三種情況就是新創建進程進入就緒隊列。如果對這些進程區

對待,給予不同的優先級和時間片,從直觀上看,可以進一步改善系統服務質量和效率。例如,我們可把就緒隊列按照進程到達就緒隊列的類型和進程被阻塞時的阻塞原因分

不同的就緒隊列,每個隊列按FCFS原則排列,各隊列之間的進程享有不同的優先級,但同一隊列內優先級相同。這樣,當一個進程在執行完它的時間片之後,或從睡眠中被

醒以及被創建之後,將進入不同的就緒隊列。


五、多級反饋隊列

前面介紹的各種用作進程調度的算法都有一定的侷限性。如短進程優先的調度算法,僅照顧了短進程而忽略了長進程,而且如果並未指明進程的長度,則短進程優先和基於

進程長度的搶佔式調度算法都將無法使用。而多級反饋隊列調度算法則不必事先知道各種進程所需的執行時間,而且還可以滿足各種類型進程的需要,因而它是目前被公認的一

種較好的進程調度算法。在採用多級反饋隊列調度算法的系統中,調度算法的實施過程如下所述。


(1) 應設置多個就緒隊列,併爲各個隊列賦予不同的優先級。第一個隊列的優先級最高,第二個隊列次之,其餘各隊列的優先權逐個降低。該算法賦予各個隊列中進程執行

時間片的大小也各不相同,在優先權愈高的隊列中,爲每個進程所規定的執行時間片就愈小。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍,……,第i+1個隊列

的時間片要比第i個隊列的時間片長一倍。


(2) 當一個新進程進入內存後,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在

一個時間片結束時尚未完成,調度程序便將該進程轉入第二隊列的末尾,再同樣地按FCFS原則等待調度執行;如果它在第二隊列中運行一個時間片後仍未完成,再依次將它放

入第三隊列,……,如此下去,當一個長作業(進程)從第一隊列依次降到第n隊列後,在第隊列便採取按時間片輪轉的方式運行。


(3) 僅當第一隊列空閒時,調度程序才調度第二隊列中的進程運行;僅當第1(i-1)隊列均空時,纔會調度第i隊列中的進程運行。如果處理機正在第i隊列中爲某進程服務

時,又有新進程進入優先權較高的隊列(1(i-1)中的任何一個隊列),則此時新進程將搶佔正在運行進程的處理機,即由調度程序把正在運行的進程放回到第i隊列的末尾,把

處理機分配給新到的高優先權進程。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章