1. 程式人生 > >作業系統中的幾種常見程序排程演算法

作業系統中的幾種常見程序排程演算法

首先來看下集中常見的程序排程演算法:

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佇列的末尾,把

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