Linux 程序排程演算法

2021-07-13 09:17:20 字數 4556 閱讀 8911



程序排程

無論是在批處理系統還是分時系統中,使用者程序數一般都多於處理機數、這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。

這就要求程序排程程式按一定的策略,動態地把處理機分配給處於就緒佇列中的某乙個程序,以使之執行。

程序排程具有四條基本屬性和三個基本狀態:

基本屬性:

1、多型性 從誕生、執行,直至消滅;

2、多個不同的程序可以包括相同的程式;

3、三種基本狀態 它們之間可進行轉換;

4、併發性併發執行的程序輪流占用處理器。 

基本狀態:

1、等待態:等待某個事件的完成;

2、就緒態:等待系統分配處理器以便執行;

3、執行態:占有處理器正在執行。

一、先來先服務和短作業(程序)優先排程演算法

1、先來先服務fcfs(first come first served)

演算法思想:

先來先服務(fcfs)排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。當在作業排程中採用該演算法時,每次排程都

是從後備作業佇列中選擇乙個或多個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源、建立程序,然後放入就緒佇列。在程序排程中採用

fcfs演算法時,則每次排程是從就緒佇列中選擇乙個最先進入該佇列的程序,為之分配處理機,使之投入執行。該程序一直執行到完成或發生某事件而

阻塞後才放棄處理機。

優缺點:

(1)有利於長作業程序,而不利於短作業程序。因為若乙個長作業先到達系統,就會使許多短作業等待很長的時間,引起許多短作業使用者的不滿。

(2)有利於cpu繁忙型作業,不利於i/o,忙的作業。現在作業系統中,已很少用該演算法作為主要排程策略,尤其是在分時系統和實時系統中。但它

常被結合在其它排程策略中使用。

先來先服務演算法的特點是:演算法比較簡單,可以實現基本上的公平。

2、短作業(程序)優先sjf(short job first)

演算法思想:

短作業(程序)優先排程演算法sj(p)f,是指對短作業或短程序優先排程的演算法。它們可以分別用於作業排程和程序排程。短作業優先(sjf)的排程演算法是從後

備佇列中選擇乙個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(spf)排程演算法則是從就緒佇列中選出乙個估計執行時間最短的進

程,將處理機分配給它,使它立即執行並一直執行到完成,或發生某事件而被阻塞放棄處理機時再重新排程。

優缺點:

優點:能有效地降低平均周轉時間,提高系統的吞吐量。

缺點:1)要預先知道每個作業的執行時間。

2)對於長作業不利,周轉時間明顯變長。

3)不考慮作業的緊迫程度,故不能保證緊迫性作業能夠得到及時處理。

4)在採用sjf演算法時,人機無法實現互動。

在採用這種演算法時,要先知道每個作業執行時間。即使是程式設計師也很難估計作業的執行時間,如果估計過低,系統就可能按照估計的時間終止作業

的執行,但此時作業並沒有完成,故一般都會偏長估計。

二、高優先權優先排程演算法

為了照顧緊迫型作業,使之在進入系統後便獲得優先處理,引入了最高優先權優先(fpf)排程演算法。此演算法常被用於批處理系統中,作為作業排程

演算法,也作為多種作業系統中的程序排程演算法,還可用於實時系統中。當把該演算法用於作業排程時,系統將從後備佇列中選擇若干個優先權最高的作業

裝入記憶體。當用於程序排程時,該演算法是把處理機分配給就緒佇列中優先權最高的程序,這時,又可進一步把該演算法分成如下兩種。

1、優先權排程演算法的型別

1) 非搶占式優先權演算法

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

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

2) 搶占式優先權排程演算法

在這種方式下,系統同樣是把處理機分配給優先權最高的程序,使之執行。但在其執行期間,只要又出現了另乙個其優先權更高的程序,程序排程

程式就立即停止當前程序(原優先權最高的程序)的執行,重新將處理機分配給新到的優先權最高的程序。因此,在採用這種排程演算法時,是每當系統中

出現乙個新的就緒程序i 時,就將其優先權pi與正在執行的程序j 的優先權pj進行比較。如果pi≤pj,原程序pj便繼續執行;但如果是pi>pj,則立即停止

pj的執行,做程序切換,使i 程序投入執行。顯然,這種搶占式的優先權排程演算法能更好地滿足緊迫作業的要求,故而常用於要求比較嚴格的實時系統

中,以及對效能要求較高的批處理和分時系統中。

2、高響應比優先排程演算法

演算法思想:

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

態優先權,並使作業的優先順序隨著等待時間的增加而以速率a 提高,則長作業在等待一定的時間後,必然有機會分配到處理機。該優先權的變化規律可

描述為:

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

優缺點:

由上式可以看出:

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

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

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

法既照顧了短作業,又考慮了作業到達的先後次序,不會使長作業長期得不到服務。因此,該演算法實現了一種較好的折衷。當然,在利用該演算法時,每

要進行排程之前,都須先做響應比的計算,這會增加系統開銷。

1、時間片輪轉法

在早期的時間片輪轉法中,系統將所有的就緒程序按先來先服務的原則排成乙個佇列,每次排程時,把cpu 分配給隊首程序,並令其執行乙個時

間片。時間片的大小從幾ms 到幾百ms。當執行的時間片用完時,由乙個計時器發出時鐘中斷請求,排程程式便據此訊號來停止該程序的執行,並將

它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新的隊首程序,同時也讓它執行乙個時間片。這樣就可以保證就緒佇列中的所有程序在一

給定的時間內均能獲得一時間片的處理機執行時間。換言之,系統能在給定的時間內響應所有使用者的請求。

2、多級反饋佇列排程演算法

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

則短程序優先和基於程序長度的搶占式排程演算法都將無法使用。而多級反饋佇列排程演算法則不必事先知道各種程序所需的執行時間,而且還可以滿足各

種型別程序的需要,因而它是目前被公認的一種較好的程序排程演算法。在採用多級反饋佇列排程演算法的系統中,排程演算法的實施過程如下所述。 1)

應設定多個就緒佇列,並為各個佇列賦予不同的優先順序。

第乙個佇列的優先順序最高,第二個佇列次之,其餘各佇列的優先權逐個降低。該演算法賦予

各個佇列中程序執行時間片的大小也各不相同,在優先權愈高的佇列中,為每個程序所規定的執行時間片就愈小。例如,第二個佇列的時間片要比第一

個佇列的時間片長一倍,……,第i+1個佇列的時間片要比第i個佇列的時間片長一倍。

2)當乙個新程序進入記憶體後,首先將它放入第一佇列的末尾,按fcfs原則排隊等待排程。

當輪到該程序執行時,如它能在該時間片內完成,便可準備

撤離系統;如果它在乙個時間片結束時尚未完成,排程程式便將該程序轉入第二佇列的末尾,再同樣地按fcfs原則等待排程執行;如果它在第二佇列

中執行乙個時間片後仍未完成,再依次將它放入第三佇列,……,如此下去,當乙個長作業(程序)從第一佇列依次降到第n佇列後,在第n佇列便採取按

時間片輪轉的方式執行。

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

如果處理機正在第i隊

列中為某程序服務時,又有新程序進入優先權較高的佇列(第1~(i-1)中的任何乙個佇列),則此時新程序將搶占正在執行程序的處理機,即由排程程式

把正在執行的程序放回到第i佇列的末尾,把處理機分配給新到的高優先權程序。

在多級反饋佇列排程演算法中,如果規定第乙個佇列的時間片略大於多數人機互動所需之處理時間時,便能夠較好的滿足各種型別使用者的需要。

分析多種演算法的適用情況

1) 如等待時間相同,則要求服務時間愈短,其優先權愈高—spf。就是短作業優先演算法。

2) 如要求服務時間相同,優先權決定於等待時間----fcfs。就是先來先服務演算法。

3) 對長作業,若等待時間足夠長,優先權也高,也能獲得cpu。是本演算法的優點,解決了短作業優先演算法中,長作業的執行得不到保證的情況。也就是引入該演算法的原因。

衡量程序排程效能的指標有:周轉時間、響應時間、cpu-i/o執行期。

Linux 程序排程演算法

linux中的程序排程演算法分類如下 一 先來先服務和短作業 程序 優先排程演算法 1 先來先服務排程演算法 fcfs 先來先服務 first come first service fcfs 排程演算法是一種最簡單的 不可搶占式的 排程演算法,既可用於作業排程,也可用於程序排程。該演算法按照程序進入...

linux程序排程演算法

一 什麼是程序排程 都知道linux是一種多使用者多工的作業系統,而當多個程序同時執行去,搶占有限資源的時候,這時作業系統就會按照一定的原則將資源合理分配給請求資源的程序,這就是程序排程。二 在linux作業系統中都有哪些程序排程演算法 1.先進先出演算法 fifo 按照程序進入就緒佇列的先後次序來...

linux程序 程序排程演算法(十三)

先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。當在作業排程中採用該演算法時,每次排程都是從後備作業佇列中選擇乙個或多個最先進入該佇列的作業,將它們調入記憶體,為它們分配資源 建立程序,然後放入就緒佇列。在程序排程中採用fcfs演算法時,則每次排...