在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演算法每次從後備作業佇列中選擇最先進入該佇列的乙個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。
在程序排程中,fcfs排程演算法每次從就緒佇列中選擇最先進入該佇列的程序,將處理機分配給它,使之投入執行,直到完成或因某種原因而阻塞時才釋放處理機。
下面通過乙個例項來說明fcfs排程演算法的效能。假設系統中有4個作業,它們的提交時間分別是8、8.4、8.8、9,執行時間依次是2、1、0.5、0.2,系統釆用fcfs排程演算法,這組作業的平均等待時間、平均周轉時間和平均帶權周轉時間見表2-3。
表2-3 fcfs排程演算法的效能
作業號提交時間
執行時間
開始時間
等待時間
完成時間
周轉時間
帶權周轉時間18
28010
2128.4110
1.611
2.62.6
38.8
0.511
2.211.5
2.75.449
0.211.5
2.511.7
2.713.5
平均等待時間 t = (0+1.6+2.2+2.5)/4=1.575
平均周轉時間 t = (2+2.6+2.7+2.7)/4=2.5
平均帶權周轉時間 w = (1+2.6+5.牡13.5)/4=5.625
fcfs排程演算法屬於不可剝奪演算法。從表面上看,它對所有作業都是公平的,但若乙個長作業先到達系統,就會使後面許多短作業等待很長時間,因此它不能作為分時系統和實時系統的主要排程策略。但它常被結合在其他排程策略中使用。例如,在使用優先順序作為排程策略的系統中,往往對多個具有相同優先順序的程序按fcfs原則處理。
fcfs排程演算法的特點是演算法簡單,但效率低;對長作業比較有利,但對短作業不利(相對sjf和高響應比);有利於cpu繁忙型作業,而不利於i/o繁忙型作業。短作業(程序)優先排程演算法是指對短作業(程序)優先排程的演算法。短作業優先(sjf)排程演算法是從後備佇列中選擇乙個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(spf)排程演算法,則是從就緒佇列中選擇乙個估計執行時間最短的程序,將處理機分配給它,使之立即執行,直到完成或發生某事件而阻塞時,才釋放處理機。
例如,考慮表2-3中給出的一組作業,若系統釆用短作業優先排程演算法,其平均等待時間、平均周轉時間和平均帶權周轉時間見表2-4。
表2-4 sjf排程演算法的效能
作業號提交時間
執行時間
開始時間
等待時間
完成時間
周轉時間
帶權周轉時間18
28010
2128,4
110.7
2.311.7
3.33.3
38.8
0.510.2
1.410.7
1.93.849
0.210
110.2
1.26
平均等待時間 t = (0+2.3+1.4+1)/4=1.175
平均周轉時間 t = (2+3.3+1.9+1.2)/4=2.1
平均帶權周轉時間 w = (1+3.3+3.8+6)/4=3.525
sjf排程演算法也存在不容忽視的缺點:
注意,sjf排程演算法的平均等待時間、平均周轉時間最少。優先順序排程演算法又稱優先權排程演算法,該演算法既可以用於作業排程,也可以用於程序排程,該演算法中的優先順序用於描述作業執行的緊迫程度。
在作業排程中,優先順序排程演算法每次從後備作業佇列中選擇優先順序最髙的乙個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。在程序排程中,優先順序排程演算法每次從就緒佇列中選擇優先順序最高的程序,將處理機分配給它,使之投入執行。
根據新的更高優先順序程序能否搶占正在執行的程序,可將該排程演算法分為:
而根據程序建立後其優先順序是否可以改變,可以將程序優先順序分為以下兩種:高響應比優先排程演算法主要用於作業排程,該演算法是對fcfs排程演算法和sjf排程演算法的一種綜合平衡,同時考慮每個作業的等待時間和估計的執行時間。在每次進行作業排程時,先計算後備作業佇列中每個作業的響應比,從中選出響應比最高的作業投入執行。
響應比的變化規律可描述為:
根據公式可知:時間片輪轉排程演算法主要適用於分時系統。在這種演算法中,系統將所有就緒程序按到達時間的先後次序排成乙個佇列,程序排程程式總是選擇就緒佇列中第乙個程序執行,即先來先服務的原則,但僅能執行乙個時間片,如100ms。在使用完乙個時間片後,即使程序並未完成其執行,它也必須釋放出(被剝奪)處理機給下乙個就緒的程序,而被剝奪的程序返回到就緒佇列的末尾重新排隊,等候再次執行。
在時間片輪轉排程演算法中,時間片的大小對系統效能的影響很大。如果時間片足夠大,以至於所有程序都能在乙個時間片內執行完畢,則時間片輪轉排程演算法就退化為先來先服務排程演算法。如果時間片很小,那麼處理機將在程序間過於頻繁切換,使處理機的開銷增大,而真正用於執行使用者程序的時間將減少。因此時間片的大小應選擇適當。
時間片的長短通常由以下因素確定:系統的響應時間、就緒佇列中的程序數目和系統的處理能力。多級反饋佇列排程演算法是時間片輪轉排程演算法和優先順序排程演算法的綜合和發展,如圖2-5 所示。通過動態調整程序優先順序和時間片大小,多級反饋佇列排程演算法可以兼顧多方面的系統目標。例如,為提高系統吞吐量和縮短平均周轉時間而照顧短程序;為獲得較好的i/o裝置利用率和縮短響應時間而照顧i/o型程序;同時,也不必事先估計程序的執行時間。
圖2-5 多級反饋佇列排程演算法
多級反饋佇列排程演算法的實現思想如下:
應設定多個就緒佇列,並為各個佇列賦予不同的優先順序,第1級佇列的優先順序最高,第2級佇列次之,其餘佇列的優先順序逐次降低。
賦予各個佇列中程序執行時間片的大小也各不相同,在優先順序越高的佇列中,每個程序的執行時間片就越小。例如,第2級佇列的時間片要比第1級佇列的時間片長一倍, ……第i+1級佇列的時間片要比第i級佇列的時間片長一倍。
當乙個新程序進入記憶體後,首先將它放入第1級佇列的末尾,按fcfs原則排隊等待排程。當輪到該程序執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在乙個時間片結束時尚未完成,排程程式便將該程序轉入第2級佇列的末尾,再同樣地按fcfs 原則等待排程執行;如果它在第2級佇列中執行乙個時間片後仍未完成,再以同樣的方法放入第3級佇列……如此下去,當乙個長程序從第1級佇列依次降到第 n 級佇列後,在第 n 級佇列中便釆用時間片輪轉的方式執行。
僅當第1級隊列為空時,排程程式才排程第2級佇列中的程序執行;僅當第1 ~ (i-1)級佇列均為空時,才會排程第i級佇列中的程序執行。如果處理機正在執行第i級佇列中的某程序時,又有新程序進入優先順序較高的佇列(第 1 ~ (i-1)中的任何乙個佇列),則此時新程序將搶占正在執行程序的處理機,即由排程程式把正在執行的程序放回到第i級佇列的末尾,把處理機分配給新到的更高優先順序的程序。
多級反饋佇列的優勢有:
作業系統排程演算法
include include include include using namespace std const int maxnum 101 typedef struct information node struct node1 此結構體用於優先順序演算法的搶占式 int priority i...
作業系統 排程演算法
fcfs是最簡單的排程演算法,既可以用於作業排程,也可以用於程序排程,系統將按照作業到達的先後次序來進行排程。sjf演算法是以作業的長短來計算優先順序,作業越短,優先順序越高。作業的長短是以作業所要求的執行時間來衡量的。可以分別用於作業排程和程序排程。缺點 必須預知作業的執行時間 對長作業很不利,長...
作業系統 排程演算法
1 先來先服務排程演算法 fcfs 1 按照作業提交,或程序變為就緒狀態的先後次序分派cpu 2 新作業只有噹噹期那作業或程序執行完成或阻塞才獲得cpu執行 3 被喚醒的作業或程序不立即恢復執行,通常等到當前作業或程序讓出cpu 預設非搶占方式 4 有利於cpu繁忙型的作業,而不利於i o繁忙的作業...