1.程序排程的常見演算法
1)先來先服務排程演算法(fcfs,first come first server)
處於就緒態的程序按先後順序鏈入到就緒佇列中,而fcfs排程演算法按就緒程序進入就緒佇列的先後次序選擇當前最先進入就緒佇列的程序來執行,直到此程序阻塞或結束,才進行下一次的程序選擇排程。fcfs排程演算法採用的是不可搶占的排程方式,一旦乙個程序占有處理機,就一直執行下去,直到該程序完成其工作,或因等待某一事件而不能繼續執行時,才釋放處理機。
fcfs排程演算法的特點是演算法簡單,但效率低;對長作業比較有利,但對短作業不利(相對sjf和高響應比);有利於cpu繁忙型作業,而不利於i/o繁忙型作業。
2)短作業優先排程演算法(sjf,short job first)
短作業(程序)優先排程演算法是指對短作業(程序)優先排程的演算法。短作業優先(sjf)排程演算法是從後備佇列中選擇乙個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(spf)排程演算法,則是從就緒佇列中選擇乙個估計執行時間最短的程序,將處理機分配給它,使之立即執行,直到完成或發生某事件而阻塞時,才釋放處理機。
sjf又分為兩種:
(1)srtf搶占式:又稱最短剩餘優先,當新進來的程序的cpu區間比當前執行的程序所剩的cpu區間短,則搶占。
(2)非搶占:稱為下乙個最短優先,因為在就緒佇列中選擇最短cpu區間的程序放在隊頭。
sjf排程演算法的特點是吞吐率高,平均等待時間、平均周轉時間最少;但演算法對長作業十分不利,也完全未考慮作業的緊迫程度。
3)時間片輪轉法(rr,round robin)
時間片輪轉排程演算法主要適用於分時系統。在這種演算法中,系統將所有就緒程序按到達時間的先後次序排成乙個佇列,程序排程程式總是選擇就緒佇列中第乙個程序執行,即先來先服務的原則,但僅能執行乙個時間片,如100ms。在使用完乙個時間片後,即使程序並未完成其執行,它也必須釋放出(被剝奪)處理機給下乙個就緒的程序,而被剝奪的程序返回到就緒佇列的末尾重新排隊,等候再次執行。
在時間片輪轉排程演算法中,時間片的大小對系統效能的影響很大。如果時間片足夠大,以至於所有程序都能在乙個時間片內執行完畢,則時間片輪轉排程演算法就退化為先來先服務排程演算法。如果時間片很小,那麼處理機將在程序間過於頻繁切換,使處理機的開銷增大,而真正用於執行使用者程序的時間將減少。因此時間片的大小應選擇適當。
時間片的長短通常由以下因素確定:系統的響應時間、就緒佇列中的程序數目和系統的處理能力。
時間片q = 系統對相應時間的要求rt / 最大程序數n
(經驗表明,時間片的取值,應該使得80%的程序在時間內完成所需的一次cpu執行活動。)
4)多級反饋佇列排程演算法(mlfq,multi-level feedback queue)
設定多個就緒佇列,並為各個佇列賦予不同的優先順序。第乙個佇列的優先順序最高,第二隊次之,其餘佇列優先順序依次降低。僅當第1~i-1個佇列均為空時,作業系統排程器才會排程第i個佇列中的程序執行。賦予各個佇列中程序執行時間片的大小也各不相同。在優先順序越高的佇列中,每個程序的執行時間片就越小或越大(linux-2.4核心就是採用這種方式)。
當乙個就緒程序需要鏈入就緒佇列時,作業系統首先將它放入第一佇列的末尾,按fcfs的原則排隊等待排程。若輪到該程序執行且在乙個時間片結束時尚未完成,則作業系統排程器便將該程序轉入第二佇列的末尾,再同樣按先來先服務原則等待排程執行。如此下去,當乙個長程序從第一佇列降到最後乙個佇列後,在最後乙個佇列中,可使用fcfs或rr排程演算法來執行處於此佇列中的程序。
如果處理機正在第i(i>1)佇列中為某程序服務時,又有新程序進入第k(k
5)高響應比優先排程演算法(hrrf,highest response ratio first)
高響應比優先排程演算法主要用於作業排程,該演算法是對fcfs排程演算法和sjf排程演算法的一種綜合平衡,同時考慮每個作業的等待時間和估計的執行時間。在每次進行作業排程時,先計算後備作業佇列中每個作業的響應比,從中選出響應比最高的作業投入執行。
響應比 = (等待時間+要求服務時間) / 要求服務時間 = 響應時間 / 執行時間
6)最高優先順序優先排程演算法(pr,priority first)
在作業排程中,優先順序排程演算法每次從後備作業佇列中選擇優先順序最髙的乙個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。在程序排程中,優先順序排程演算法每次從就緒佇列中選擇優先順序最高的程序,將處理機分配給它,使之投入執行。
根據新的更高優先順序程序能否搶占正在執行的程序,可將該排程演算法分為:
(1)非剝奪式優先順序排程演算法。
當某乙個程序正在處理機上執行時,即使有某個更為重要或緊迫的程序進入就緒佇列,仍然讓正在執行的程序繼續執行,直到由於其自身的原因而主動讓出處理機時(任務完成或等待事件),才把處理機分配給更為重要或緊迫的程序。
(2)剝奪式優先順序排程演算法。
當乙個程序正在處理機上執行時,若有某個更為重要或緊迫的程序進入就緒佇列,則立即暫停正在執行的程序,將處理機分配給更重要或緊迫的程序。
而根據程序建立後其優先順序是否可以改變,可以將程序優先順序分為以下兩種:
(1)靜態優先順序。
優先順序是在建立程序時確定的,且在程序的整個執行期間保持不變。確定靜態優先順序的主要依據有程序型別、程序對資源的要求、使用者要求。
(2)動態優先順序。
在程序執行過程中,根據程序情況的變化動態調整優先順序。動態調整優先順序的主要依據為程序占有cpu時間的長短、就緒程序等待cpu時間的長短。
常見程序排程演算法
程序排程 實質是一種資源分配。決定將cpu分配給就緒佇列中的某個程序。發生程序排程原因 1 正在執行的程序執行完畢 2 執行中的程序因發生i o請求或等事件而暫停執行 3 時間片用完 4 在程序通訊或同步過程中執行了某項原語操作,如p操作 wait操作 5 高優先順序進入。作業排程 簡單來說就是決定...
常見的程序排程演算法
程序排程程式按一定的策略,動態地把處理機 分配給處於就緒佇列中的某乙個程序 以使之執行。1.先來先服務 fcfs 排程演算法 原理 系統將按照作業到達的先後次序來進行作業排程,或者說它是優先考慮在系統中等待時間最長的作業,而不管該作業所需執行時間的長短,從後備作業佇列中優先選擇幾個最先進入該佇列的作...
常見的程序排程演算法
適用場景 分時系統 基本原理 根據先來先服務策略,形成就緒佇列。分配時間片。關鍵時間片的分配長度是關鍵,如果分配太短則切換頻繁。如果太長,就退化成了先來先服務演算法。前言相對於輪轉片演算法,輪轉片是預設了所有程序的優先順序一樣,而優先順序演算法根據程序的優先順序進行 cpu 的分配 優先順序型別 靜...