在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。
一、先來先服務(fcfs)排程演算法
fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。
在作業排程中,演算法每次從後備作業佇列中選擇最先進入該佇列的乙個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。
在程序排程中,fcfs排程演算法每次從就緒佇列中選擇最先進入該佇列的程序,將處理機分配給它,使之投入執行,直到完成或因某種原因而阻塞時才釋放處理機。
下面通過乙個例項來說明fcfs排程演算法的效能。假設系統中有4個作業,它們的提交時間分別是8、8.4、8.8、9,執行時間依次是2、1、0.5、0.2,系統釆用fcfs排程演算法,這組作業的平均等待時間、平均周轉時間和平均帶權周轉時間見表2-3。
平均帶權周轉時間(權重分別為1,1,2,5)
表2-3 fcfs排程演算法的效能:
平均等待時間 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.4+13.5)/4=5.625
fcfs排程演算法屬於不可剝奪演算法。從表面上看,它對所有作業都是公平的,但若乙個長作業先到達系統,就會使後面許多短作業等待很長時間,因此它不能作為分時系統和實時系統的主要排程策略。
但它常被結合在其他排程策略中使用。
例如,在使用優先順序作為排程策略的系統中,往往對多個具有相同優先順序的程序按fcfs原則處理。
fcfs排程演算法的特點是演算法簡單,但效率低;對長作業比較有利,但對短作業不利(相對sjf和高響應比);有利於cpu繁忙型作業,而不利於i/o繁忙型作業。
二、短作業優先(sjf)排程演算法
短作業(程序)優先排程演算法是指對短作業(程序)優先排程的演算法。短作業優先(sjf)排程演算法是從後備佇列中選擇乙個或若干個估計執行時間最短的作業,將它們調入記憶體執行。
而短程序優先(spf)排程演算法,則是從就緒佇列中選擇乙個估計執行時間最短的程序,將處理機分配給它,使之立即執行,直到完成或發生某事件而阻塞時,才釋放處理機。
例如,考慮表2-3中給出的一組作業,若系統釆用短作業優先排程演算法,其平均等待時間、平均周轉時間和平均帶權周轉時間見表2-4。
平均等待時間 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排程演算法也存在不容忽視的缺點:
該演算法對長作業不利,由表2-3和表2-4可知,sjf排程演算法中長作業的周轉時間會增加。
更嚴重的是,如果有一長作業進入系統的後備佇列,由於排程程式總是優先排程那些 (即使是後進來的)短作業,將導致長作業長期不被排程(「飢餓」現象,注意區分「死鎖」。後者是系統環形等待,前者是排程策略問題)。
該演算法完全未考慮作業的緊迫程度,因而不能保證緊迫性作業會被及時處理。 由於作業的長短只是根據使用者所提供的估計執行時間而定的,而使用者又可能會有意或無意地縮短其作業的估計執行時間,致使該演算法不一定能真正做到短作業優先排程。
注意,sjf排程演算法的平均等待時間、平均周轉時間最少。
三、優先順序排程演算法:
優先順序排程演算法又稱優先權排程演算法,該演算法既可以用於作業排程,也可以用於程序排程,該演算法中的優先順序用於描述作業執行的緊迫程度。
在作業排程中,優先順序排程演算法每次從後備作業佇列中選擇優先順序最髙的乙個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。
在程序排程中,優先順序排程演算法每次從就緒佇列中選擇優先順序最高的程序,將處理機分配給它,使之投入執行。
根據新的更高優先順序程序能否搶占正在執行的程序,可將該排程演算法分為:
非剝奪式優先順序排程演算法:當某乙個程序正在處理機上執行時,即使有某個更為重要或緊迫的程序進入就緒佇列,仍然讓正在執行的程序繼續執行,直到由於其自身的原因而主動讓出處理機時(任務完成或等待事件),才把處理機分配給更為重要或緊迫的程序。
剝奪式優先順序排程演算法:當乙個程序正在處理機上執行時,若有某個更為重要或緊迫的程序進入就緒佇列,則立即暫停正在執行的程序,將處理機分配給更重要或緊迫的程序。
而根據程序建立後其優先順序是否可以改變,可以將程序優先順序分為以下兩種:
靜態優先順序:優先順序是在建立程序時確定的,且在程序的整個執行期間保持不變。確定靜態優先順序的主要依據有程序型別、程序對資源的要求、使用者要求。
動態優先順序:在程序執行過程中,根據程序情況的變化動態調整優先順序。動態調整優先順序的主要依據為程序占有cpu時間的長短、就緒程序等待cpu時間的長短。
四、高響應比優先排程演算法
高響應比優先排程演算法主要用於作業排程,該演算法是對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排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演算法每次從後備作業佇列中選擇最先進入該...
作業系統 排程演算法
fcfs是最簡單的排程演算法,既可以用於作業排程,也可以用於程序排程,系統將按照作業到達的先後次序來進行排程。sjf演算法是以作業的長短來計算優先順序,作業越短,優先順序越高。作業的長短是以作業所要求的執行時間來衡量的。可以分別用於作業排程和程序排程。缺點 必須預知作業的執行時間 對長作業很不利,長...