1. 程式人生 > >作業系統程序的排程演算法

作業系統程序的排程演算法

1. 先來先服務 (FCFS,first come first served)

先來先服務的排程演算法:最簡單的排程演算法,既可以用於作業排程 ,也可以用於程式排程,當作業排程中採用該演算法時,系統將按照作業到達的先後次序來進行排程,優先從後備佇列中,選擇一個或多個位於佇列頭部的作業,把他們調入記憶體,分配所需資源、建立程序,然後放入"就緒佇列",直到該程序執行到完成或發生某事件堵塞後,程序排程程式才將處理機分配給其他程序。

優缺點:

有利於長作業(程序)而不利於短作業(程序)

有利於CPU繁忙型作業(程序)而不利於I/O繁忙型作業(程序)

2.短作業優先(SJF, Shortest Job First) 

短作業優先是對先來先服務演算法的改進,其目標是減少平均週轉時間。

演算法思想:對預計執行時間短的作業(程序)優先分派處理機。通常後來的短作業不搶先正在執行的作業。

(1) 優點:

比FCFS改善平均週轉時間和平均帶權週轉時間,縮短作業的等待時間;

提高系統的吞吐量;

(2) 缺點:

對長作業非常不利,可能長時間得不到執行;

未能依據作業的緊迫程度來劃分執行的優先順序;

難以準確估計作業(程序)的執行時間,從而影響排程效能。

3.最高響應比優先法(HRRN,Highest Response Ratio Next) 

高響應比優先排程演算法(Highest Response Ratio Next)是一種對CPU中央控制器響應比的分配的一種演算法。HRRN是介於FCFS(先來先服務演算法)與SJF(短作業優先演算法)之間的折中演算法,既考慮作業等待時間又考慮作業執行時間,既照顧短作業又不使長作業等待時間過長,改進了排程效能。

基本思想:

短作業優先排程演算法 + 動態優先權機制

既考慮作業的執行時間也考慮作業的等待時間,綜合了先來先服務和最短作業優先兩種演算法的特點。

優缺點:

短作業與先後次序的兼顧,且不會使長作業長期得不到服務

響應比計算系統開銷,增加系統開銷

4.時間片輪轉演算法(RR,Round-Robin)

時間片輪轉排程是一種最古老,最簡單,最公平且使用最廣的演算法。每個程序被分配一時間段,稱作它的時間片,即該程序允許執行的時間。

基本思想:

在早期的時間片輪轉法中,系統將所有的就緒程序按先來先服務的原則,排成一個佇列,每次排程時,把CPU分配給隊首程序,並令其執行一個時間片.時間片的大小從幾ms到幾百ms.當執行的時間片用完時,由一個計時器發出時鐘中斷請求,排程程式便據此訊號來停止該程序的執行,並將它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新的隊首程序,同時也讓它執行一個時間片.這樣就可以保證就緒佇列中的所有程序,在一給定的時間內,均能獲得一時間片的處理機執行時間

時間片大小的確定

1.系統對響應時間的要求

2.就緒佇列中程序的數目

3.系統的處理能力

5.多級反饋佇列(Multilevel Feedback Queue) 

多級反饋佇列排程演算法既能使高優先順序的作業得到響應又能使短作業(程序)迅速完成。(對比一下FCFS與高優先響應比排程演算法的缺陷)。

多級(假設為N級)反饋佇列排程演算法可以如下原理:

1、設有N個佇列(Q1,Q2....QN),其中各個佇列對於處理機優先順序是不一樣的,也就是說位於各個佇列中的作業(程序)的優先順序也是不一樣的。一般來說,優先順序Priority(Q1) > Priority(Q2) > ... > Priority(QN)。怎麼講,位於Q1中的任何一個作業(程序)都要比Q2中的任何一個作業(程序)相對於CPU的優先順序要高(也就是說,Q1中的作業一定要比Q2中的作業先被處理機排程),依次類推其它的佇列。

2、對於優先順序最低的佇列來說,裡面是遵循時間片輪轉法。也就是說,位於佇列QN中有M個作業,它們的執行時間是通過QN這個佇列所設定的時間片來確定的;對於其他佇列,遵循的是先來先服務演算法,每一程序分配一定的時間片,若時間片執行完時程序未結束,則進入下一優先順序佇列的末尾。

3、各個佇列的時間片是一樣的嗎?不一樣,這就是該演算法設計的精妙之處。各個佇列的時間片是隨著優先順序的增加而減少的,也就是說,優先順序越高的佇列中它的時間片就越短。同時,為了便於那些超大作業的完成,最後一個佇列QN(優先順序最低的佇列)的時間片一般很大(不需要考慮這個問題)。

演算法描述:

1、程序在進入待排程的佇列等待時,首先進入優先順序最高的Q1等待。

2、首先排程優先順序高的佇列中的程序。若高優先順序中佇列中已沒有排程的程序,則排程次優先順序佇列中的程序。例如:Q1,Q2,Q3三個佇列,當且僅當在Q1中沒有程序等待時才去排程Q2,同理,只有Q1,Q2都為空時才會去排程Q3。

3、對於同一個佇列中的各個程序,按照FCFS分配時間片排程。比如Q1佇列的時間片為N,那麼Q1中的作業在經歷了N個時間片後若還沒有完成,則進入Q2佇列等待,若Q2的時間片用完後作業還不能完成,一直進入下一級佇列,直至完成。

4、在最後一個佇列QN中的各個程序,按照時間片輪轉分配時間片排程。

5、在低優先順序的佇列中的程序在執行時,又有新到達的作業,此時須立即把正在執行的程序放回當前佇列的隊尾,然後把處理機分給高優先順序程序。換而言之,任何時刻,只有當第1~i-1佇列全部為空時,才會去執行第i佇列的程序(搶佔式)。特別說明,當再度執行到當前佇列的該程序時,僅分配上次還未完成的時間片,不再分配該佇列對應的完整時間片。

演算法示例:

假設系統中有3個反饋佇列Q1,Q2,Q3,時間片分別為2,4,8。 [1] 

設有3個作業J1,J2,J3分別在時間 0 ,1,3時刻到達。而它們所需要的CPU時間分別是3,2,1個時間片。

1、時刻0 J1到達。於是進入到佇列1 , 執行1個時間片 , 時間片還未到,此時J2到達。

2、時刻1 J2到達。 由於同一佇列採用先來先服務,於是J2等待。 J1在運行了1個時間片後,已經完成了在Q1中的2個時間片的限制,於是J1置於Q2等待被排程。當前處理機分配給J2。

3、時刻2 J1進入Q2等待排程,J2獲得CPU開始執行。

4、時刻3 J3到達,由於同一佇列採用先來先服務,故J3在Q1等待排程,J1也在Q2等待排程。

5、時刻4 J2處理完成,由於J3,J1都在等待排程,但是J3所在的佇列比J1所在的佇列的優先順序要高,於是J3被排程,J1繼續在Q2等待。

6、時刻5 J3經過1個時間片,完成。

7、時刻6 由於Q1已經空閒,於是開始排程Q2中的作業,則J1得到處理器開始執行。 J1再經過一個時間片,完成了任務。於是整個排程過程結束。

從上面的例子看,在多級反饋佇列中,後進的作業不一定慢完成。