1. 程式人生 > >第3章 處理機排程與死鎖 ---- 2、常用排程演算法

第3章 處理機排程與死鎖 ---- 2、常用排程演算法

2、常用排程演算法

排程實質就是一種資源分配。不同的系統和系統目標,通常採用不同的排程演算法——適合自己的才是最好的。

   如批處理系統為照顧為數眾多的短作業,應採用短作業優先的排程演算法;

   如分時系統為保證系統具有合理的響應時間,應採用輪轉法進行排程。

目前存在的多種排程演算法中,有的演算法適用於作業排程,有的演算法適用於程序排程;但有些演算法作業排程和程序排程都可以採用。

1、先來先服務排程演算法FCFS  (First Come First Service)

一種最簡單的排程演算法,按先後順序進行排程。既可用於作業排程,也可用於程序排程。

按照作業提交,或程序變為就緒狀態的

先後次序分派CPU;

新作業只有噹噹前作業或程序執行完或阻塞才獲得CPU執行

喚醒的作業或程序不立即恢復執行,通常等到當前作業或程序出讓CPU。 (所以,預設即是非搶佔方式)

* 不利於短作業(程序)時間分析舉例:

不足:短作業C的帶權週轉時間竟高達100,這是不能容忍的;而長作業D的帶權週轉時間僅為1.99。

關於應用:有利於CPU繁忙型的作業,而不利於I/O繁忙的作業(程序)。

從程式規模上看,一般I/O繁忙型作業CPU進行處理的用時相對比較短,CPU繁忙型的作業相對較長。而FCFS不利於短作業,I/O繁忙型作業一旦排隊靠後就會處於劣勢。

另一方面,I/O繁忙型作業需頻繁的請求I/O,即使排隊靠前,但由於I/O請求阻塞,重新排隊可能就會排到隊尾(這一情況在其他演算法下也是普遍的,但不同的演算法,排隊情況不同,相對的在照顧公平性上也會有所不同)。

目前大多數事務處理都屬於I/O繁忙型作業。

2. 短作業(程序)優先排程演算法SJF/SPF (Shortest Job First) OR (Shortest Process First)

優點:

通過上表可見採用SJF/SPF演算法,平均週轉時間、平均帶權週轉時間都有明顯改善。SJF/SPF排程演算法能有效的降低作業的平均等待時間提高系統吞吐量

方式:

分搶佔和非搶佔兩種方式,上例為簡單的非搶佔式。

程序排程描述工具

Gantt(甘特)圖:常用水平線段來描述每個程序的進度。可以表示每個程序的開始時間和完成時間,線段的長度表示程序完成所需要的時間。

Gantt chart:

SJF/SPF的不足:

1. 對短作業有利,但同時造成了對長作業的不利。

2.由於作業(程序)的長短含主觀因素,不一定能真正做到短作業優先。

3.未考慮作業的緊迫程度,因而不能保證緊迫性作業(程序)的及時處理。

3. 高優先權優先排程演算法HPF   Highest Priority First

照顧緊迫性作業,使其獲得優先處理而引入排程演算法。常用於批處理系統中的作業排程演算法,以及多種作業系統中的程序排程演算法

1) 分兩種方式:   非搶佔式優先權演算法             搶佔式優先權演算法    關鍵點:新作業產生時

2)優先權的型別

靜態優先權建立程序時確定,整個執行期間保持不變。一般利用某一範圍的一個整數來表示,又稱為優先數。

動態優先權建立程序時賦予的優先權可隨程序的推進或隨其等待時間的增加而改變。

關於程序優先權的確定?依據如下:

1)程序型別:一般來,系統程序高於使用者程序。

2)程序對資源的需求:如程序的估計時間及記憶體需要量的多少,對要求少的程序賦予較高優先權。

3)使用者要求:由使用者程序的緊迫程度及使用者所付費用的多少來確定優先權的。

3+   高響應比優先排程演算法HRRN    Highest Response Raito Next

短作業優先演算法是一種比較好的演算法(相當於根據作業長度設定的靜態優先權演算法),適用於短作業較多的批處理系統中,其主要不足是長作業的執行得不到保證。

HRRN為每個作業引入動態優先權,使作業的優先順序隨著等待時間的增加而以速率a提高:

 優先權 =(等待時間+要求服務時間)/要求服務時間= 響應時間 / 要求服務時間

* 對不同作業都有照顧 *

1.同時到達的作業優先權相同。

初始t=0,隨著時間增長,如果等待時間 t 相同,執行時間愈短的優先權愈高,利於短作業

對於長作業,作業的優先順序可以隨等待時間的增加而提高,當其等待時間足夠長也可獲得處理機。長作業有照顧

2.當執行時間相同的作業,優先權的高低決定於其等待時間的長短,也就是先來先服務

什麼時候計算各程序的響應比優先權?

需要進行排程選擇的時候比較各自優先權

作業完成時

新作業產生時(搶佔、非搶佔)

   時間片完成時

程序阻塞時

3. 基於時間片的輪轉排程演算法RR  (Round Robin)

分時系統新需求及時響應使用者的請求;採用基於時間片的輪轉式程序排程演算法。

早期分時系統採用的是簡單的時間片輪轉法,進入90年代後廣泛採用多級反饋佇列排程演算法

下面分開介紹這兩種方法並比較效能。

(1)時間片輪轉演算法

1.將系統中所有的就緒程序按照FCFS原則,排成一個佇列

2.每次排程時將CPU分派給隊首程序,讓其執行一個時間片。時間片的長度從幾個ms到幾百ms。

3.在一個時間片結束時,發生時鐘中斷

4.排程程式據此暫停當前程序的執行,將其送到就緒佇列的末尾,並通過上下文切換執行當前就緒的隊首程序

程序阻塞情況發生時,未用完時間片也要出讓CPU,能夠及時響應,但沒有考慮作業長短等問題。

關於時間片長度

時間片長度的選擇要與完成一個基本的互動過程所需的時間相當,保證一個基本的互動過程可在一個時間片內完成。

設定不合適反而都會導致響應時間長。

過長會怎樣?——FCFS                          過短會怎樣?——頻繁切換

影響時間片長度的主要因素

系統的處理能力和系統的負載狀態。(依據系統的處理能力確定時間片長度,使使用者輸人通常在一個時間片內能處理完,否則使響應時間、平均週轉時間和平均帶權週轉時間延長。為了保證不同負載狀態下使用者互動的響應時間,需要對時間片長度進行適當調整。

爭議:若同時有時間片到放棄CPU的A程序、新就緒的程序B,二者在就緒佇列中如何排序。

做題時給出統一的假設,若設新程序就緒比較快,就統一按BA的順序排入就緒佇列。

                                        若設舊程序該為就緒比較快,則統一按AB排序

(2)多級反饋佇列演算法FB   (Multiple-level Feed Back Queue)

特點:多個就緒佇列,迴圈反饋    動態優先順序、時間片輪轉

1)設定多個就緒佇列,各佇列有不同的優先順序,優先順序從第一個佇列依次降低。

2) 賦予各佇列程序執行時間片大小不同, 優先權越高,時間片越短

3)當一個新程序進入記憶體,引發的排程過程

1.準備排程:先將它放入第一個佇列的末尾,按FCFS原則排隊等待排程。

2.IF時間片內完成,便可準備撤離系統;

3.IF時間片內未能完成,排程程式便將該程序轉入第二佇列的末尾等待再次被排程執行。

4.當第一佇列中的程序都執行完,系統再按FCFS原則排程第二佇列。在第二佇列的稍放長些的時間片內仍未完成,再依次將它放入第三佇列。

5.依次降到第n佇列後,在第n佇列中便採取按時間片輪轉的方式執行。

注意:

各佇列的時間片逐漸增大。優先順序逐漸降低

僅當優先權高的佇列(如第一佇列)空閒時,排程程式才排程第二佇列中的程序執行;僅當1~i-1)佇列均空時,才會排程第i佇列中的程序執行。

高優先順序搶佔問題:

i佇列中為某程序正佔有CPU,又有新程序進入優先權較高的佇列(第1~i-1隊中);

被搶佔的程序放回原就緒佇列末尾;

* 多級反饋佇列排程演算法的效能 *

多級反饋佇列排程演算法具有較好的效能,能較好的滿足各種型別使用者的需要。

終端型作業使用者。大多屬於較小的互動性作業,只要能使作業在第一佇列的時間片內完成,便可令使用者滿意。

短批處理作業使用者。週轉時間仍然較短,至多在第二到三佇列即可完成。

長批處理作業使用者。將依次在1~n級佇列中輪轉執行,不必擔心作業長期得不到處理。