程序排程演算法

2021-07-27 04:31:58 字數 3814 閱讀 6430

排程演算法是指:根據系統的資源分配策略所規定的資源分配演算法。

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

1. 先來先服務排程演算法。

先來先服務(fcfs)排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程, 也可用於程序排程。fcfs演算法比較有利於長作業(程序),而不利於短作業(程序)。由此可知,本演算法適合於cpu繁忙型作業, 而不利於i/o繁忙型的作業(程序)。

2. 短作業(程序)優先排程演算法。

短作業(程序)優先排程演算法(sj/pf)是指對短作業或短程序優先排程的演算法,該演算法既可用於作業排程, 也可用於程序排程。但其對長作業不利;不能保證緊迫性作業(程序)被及時處理;作業的長短只是被估算出來的。

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

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

為了照顧緊迫性作業,使之進入系統後便獲得優先處理,引入了最高優先權優先(fpf)排程演算法。 此演算法常被用在批處理系統中,作為作業排程演算法,也作為多種作業系統中的程序排程,還可以用於實時系統中。當其用於作業排程, 將後備佇列中若干個優先權最高的作業裝入記憶體。當其用於程序排程時,把處理機分配給就緒佇列中優先權最高的程序,此時, 又可以進一步把該演算法分成以下兩種:

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

2)搶占式優先權排程演算法(高效能計算機作業系統)

2. 優先權型別 。對於最高優先權優先排程演算法,其核心在於:它是使用靜態優先權還是動態優先權, 以及如何確定程序的優先權。

3. 高響應比優先排程演算法

為了彌補短作業優先演算法的不足,我們引入動態優先權,使作業的優先等級隨著等待時間的增加而以速率a提高。 該優先權變化規律可描述為:優先權=(等待時間+要求服務時間)/要求服務時間;即 =(響應時間)/要求服務時間

由上式可以看出:

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

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

(3) 對於長作業,作業的優先順序可以隨等待時間的增加而提高,當其等待時間足夠長時,其優先順序便可公升到很高,從而也可獲得處理機。簡言之,該演算法既照顧了短作業,又考慮了作業到達的先後次序,不會使長作業長期得不到服務。因此,該演算法實現了一種較好的折衷。當然,在利用該演算法時,每要進行排程之前,都須先做響應比的計算,這會增加系統開銷。

三、基於時間片的輪轉排程演算法

1. 時間片輪轉法。

時間片輪轉法一般用於程序排程,每次排程,把cpu分配隊首程序,並令其執行乙個時間片。 當執行的時間片用完時,由乙個記時器發出乙個時鐘中斷請求,該程序被停止,並被送往就緒佇列末尾;依次迴圈。   2. 多級反饋佇列排程演算法 多級反饋佇列排程演算法多級反饋佇列排程演算法,不必事先知道各種程序所需要執行的時間,它是目前被公認的一種較好的程序排程演算法。 其實施過程如下:

1) 設定多個就緒佇列,並為各個佇列賦予不同的優先順序。在優先權越高的佇列中, 為每個程序所規定的執行時間片就越小。

2) 當乙個新程序進入記憶體後,首先放入第一佇列的末尾,按fcfs原則排隊等候排程。 如果他能在乙個時間片中完成,便可撤離;如果未完成,就轉入第二佇列的末尾,在同樣等待排程…… 如此下去,當乙個長作業(程序)從第一佇列依次將到第n佇列(最後佇列)後,便按第n佇列時間片輪轉執行。

3) 僅當第一佇列空閒時,排程程式才排程第二佇列中的程序執行;僅當第1到第(i-1)佇列空時, 才會排程第i佇列中的程序執行,並執行相應的時間片輪轉。

4) 如果處理機正在處理第i佇列中某程序,又有新程序進入優先權較高的佇列, 則此新佇列搶占正在執行的處理機,並把正在執行的程序放在第i佇列的隊尾。

前面介紹的各種用作程序排程的演算法都有一定的侷限性。如短程序優先的排程演算法,僅照顧了短程序而忽略了長程序,而且如果並未指明程序的長度,則短程序優先和基於程序長度的搶占式排程演算法都將無法使用。而多級反饋佇列排程演算法則不必事先知道各種程序所需的執行時間,而且還可以滿足各種型別程序的需要,因而它是目前被公認的一種較好的程序排程演算法。在採用多級反饋佇列排程演算法的系統中,排程演算法的實施過程如下所述。

(1) 應設定多個就緒佇列,並為各個佇列賦予不同的優先順序。第乙個佇列的優先順序最高,第二個佇列次之,其餘各佇列的優先權逐個降低。該演算法賦予各個佇列中程序執行時間片的大小也各不相同,在優先權愈高的佇列中,為每個程序所規定的執行時間片就愈小。例如,第二個佇列的時間片要比第乙個佇列的時間片長一倍,……,第i+1個佇列的時間片要比第i個佇列的時間片長一倍。

(2) 當乙個新程序進入記憶體後,首先將它放入第一佇列的末尾,按fcfs原則排隊等待排程。當輪到該程序執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在乙個時間片結束時尚未完成,排程程式便將該程序轉入第二佇列的末尾,再同樣地按fcfs原則等待排程執行;如果它在第二佇列中執行乙個時間片後仍未完成,再依次將它放入第三佇列,……,如此下去,當乙個長作業(程序)從第一佇列依次降到第

n佇列後,在第

n佇列便採取按時間片輪轉的方式執行。

(3) 僅當第一佇列空閒時,排程程式才排程第二佇列中的程序執行;僅當第1~(i-1)佇列均空時,才會排程第i佇列中的程序執行。如果處理機正在第i佇列中為某程序服務時,又有新程序進入優先權較高的佇列(第1~(i-1)中的任何乙個佇列),則此時新程序將搶占正在執行程序的處理機,即由排程程式把正在執行的程序放回到第i佇列的末尾,把處理機分配給新到的高優先權程序。

二 本機排程演算法

程序的排程時機與引起程序排程的原因和程序排程的方式有關。在 2.6 中,除核心應用

主動呼叫排程器之外, 核心還在應用不完全感知的情況下在以下三種時機中啟動排程器工作:

1>從中斷或系統呼叫返回到使用者態;

2>某個程序允許被搶占 cpu;

3>主動進入休眠狀態;

排程策略:

在 linux2.6 中,仍有三種排程策略: sched_other、sched_fifo 和 sched_rr。

sched_orher:普通程序,基於優先順序進行排程。

sched_fifo:實時程序,實現一種簡單的先進先出的排程演算法。

sched_rr:實時程序,基於時間片的sched_fifo,實時輪流排程演算法。

前者是普通程序排程策略,後兩者都是實時程序排程策略。

sched_fifo 與 sched_rr 的區別是:

當程序的排程策略為前者時,當前實時程序將一直占用 cpu 直至自動退出,除非有更緊迫的、

優先順序更高的實時程序需要執行時,它才會被搶占 cpu;當程序的排程策略

為後者時,它與其它實時程序以實時輪流演算法去共同使用 cpu,用完時間片放到執行佇列尾部。

注:實時程序的優先順序高於普通程序,後面介紹。

o(1)排程器是以程序的動態優先順序 prio為排程依據的,它總是選擇目前就緒佇列中優先

級最高的程序作為候選程序 next。由於實時程序的優先順序總是比普通程序的優先順序高,故能

保證實時程序總是比普通程序先被排程。

linux2.6 中,優先順序 prio 的計算不再集中在排程器選擇 next 程序時,而是分散在程序

狀態改變的任何時候,這些時機有:

1>程序被建立時;

2>休眠程序被喚醒時;

3>從task_interruptible 狀態中被喚醒的程序被排程時;

4>因時間片耗盡或時間片過長而分段被剝奪 cpu 時;

在這些情況下,核心都會呼叫 effective_prio()重新計算程序的動態優先順序 prio並根據計算結果調整它在就緒佇列中的位置。

程序排程演算法(程序排程策略)

程序排程演算法 排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。一 先來先服務和短作業 程序 優先排程演算法 1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短...

程序排程演算法

排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。一 先來先服務和短作業 程序 優先排程演算法 1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短作業 程序 由此...

程序排程演算法

先來先服務 first come first service,fcfs 排程演算法按照程序進入就緒佇列的先後順序選擇可以占用處理器的程序。這是一種不可搶占方式的排程演算法,優點是實現簡單,缺點是後來的程序等待cpu的時間較長。它現今主要用作輔助排程法 例如結合在優先順序排程演算法中使用,當有兩個最高...