作業系統管理了系統的有限資源,當有多個程序(或多個程序發出的請求)要使用這些資源時,因為資源的有限性,必須按照一定的原則選擇程序(請求)來占用資源。這就是排程。目的是控制資源使用者的數量,選取資源使用者許可占用資源或占用資源。
1. 先來先服務(fcfs)排程演算法
fcfs排程演算法是一種最簡單的排程演算法,在程序排程中,fcfs排程演算法每次從就緒佇列中選擇最先進入該佇列的程序,將處理機分配給它,使之投入執行,直到完成或因某種原因而阻塞時才釋放處理機。
fcfs排程演算法屬於不可剝奪演算法。從表面上看,它對所有作業都是公平的,但若乙個長作業先到達系統,就會使後面許多短作業等待很長時間,因此它不能作為分時系統和實時系統的主要排程策略。但它常被結合在其他排程策略中使用。例如,在使用優先順序作為排程策略的系統中,往往對多個具有相同優先順序的程序按fcfs原則處理。
fcfs排程演算法的特點是演算法簡單,但效率低;對長作業比較有利,但對短作業不利(相對sjf和高響應比);有利於cpu繁忙型作業,而不利於i/o繁忙型作業。
2.短作業優先(sjf)排程演算法
sjf(程序)優先排程演算法是指對短作業(程序)優先排程的演算法。短作業優先(sjf)排程演算法是從後備佇列中選擇乙個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(spf)排程演算法,則是從就緒佇列中選擇乙個估計執行時間最短的程序,將處理機分配給它,使之立即執行,直到完成或發生某事件而阻塞時,才釋放處理機。
sjf排程演算法也存在不容忽視的缺點:
3.優先排程演算法
優先順序排程演算法又稱優先權排程演算法,該演算法中的優先順序用於描述作業執行的緊迫程度。在程序排程中,優先順序排程演算法每次從就緒佇列中選擇優先順序最高的程序,將處理機分配給它,使之投入執行。
根據新的更高優先順序程序能否搶占正在執行的程序,可將該排程演算法分為:
而根據程序建立後其優先順序是否可以改變,可以將程序優先順序分為以下兩種:
4.高響應比優先排程演算法
高響應比優先排程演算法主要用於作業排程,該演算法是對fcfs排程演算法和sjf排程演算法的一種綜合平衡,同時考慮每個作業的等待時間和估計的執行時間。在每次進行作業排程時,先計算後備作業佇列中每個作業的響應比,從中選出響應比最高的作業投入執行。
響應比的變化規律可描述為:響應比rpr_
rp=等待時
間+要求
服務時間
要求服務
時間
\frac
要求服務時間
等待時間
+要求服
務時間
根據公式可知:
(1)當作業的等待時間相同時,則要求服務時間越短,其響應比越高,有利於短作業。
(2)當要求服務時間相同時,作業的響應比由其等待時間決定,等待時間越長,其響應比越高,因而它實現的是先來先服務。
(3)對於長作業,作業的響應比可以隨等待時間的增加而提高,當其等待時間足夠長時,其響應比便可公升到很高,從而也可獲得處理機。克服了飢餓狀態,兼顧了長作業。
5.時間片輪轉排程演算法
時間片輪轉排程演算法主要適用於分時系統。在這種演算法中,系統將所有就緒程序按到達時間的先後次序排成乙個佇列,程序排程程式總是選擇就緒佇列中第乙個程序執行,即先來先服務的原則,但僅能執行乙個時間片,如100ms。在使用完乙個時間片後,即使程序並未完成其執行,它也必須釋放出(被剝奪)處理機給下乙個就緒的程序,而被剝奪的程序返回到就緒佇列的末尾重新排隊,等候再次執行。
在時間片輪轉排程演算法中,時間片的大小對系統效能的影響很大。如果時間片足夠大,以至於所有程序都能在乙個時間片內執行完畢,則時間片輪轉排程演算法就退化為先來先服務排程演算法。如果時間片很小,那麼處理機將在程序間過於頻繁切換,使處理機的開銷增大,而真正用於執行使用者程序的時間將減少。因此時間片的大小應選擇適當。
時間片的長短通常由以下因素確定:系統的響應時間、就緒佇列中的程序數目和系統的處理能力。
多級反饋佇列排程演算法是時間片輪轉排程演算法和優先順序排程演算法的綜合和發展,動態調整程序優先順序和時間片大小,多級反饋佇列排程演算法可以兼顧多方面的系統目標。
多級反饋佇列排程演算法的實現思想如下:
多級反饋佇列的優勢有:
Linux 程序排程演算法
程序排程 無論是在批處理系統還是分時系統中,使用者程序數一般都多於處理機數 這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。這就要求程序排程程式按一定的策略,動態地把處理機分配給處於就緒佇列中的某乙個程序,以使之執行。程序排程具有四條基本屬性和三個基本狀態 基本屬性 1 多型性 從誕...
Linux 程序排程演算法
linux中的程序排程演算法分類如下 一 先來先服務和短作業 程序 優先排程演算法 1 先來先服務排程演算法 fcfs 先來先服務 first come first service fcfs 排程演算法是一種最簡單的 不可搶占式的 排程演算法,既可用於作業排程,也可用於程序排程。該演算法按照程序進入...
linux程序排程演算法
一 什麼是程序排程 都知道linux是一種多使用者多工的作業系統,而當多個程序同時執行去,搶占有限資源的時候,這時作業系統就會按照一定的原則將資源合理分配給請求資源的程序,這就是程序排程。二 在linux作業系統中都有哪些程序排程演算法 1.先進先出演算法 fifo 按照程序進入就緒佇列的先後次序來...