Linux(五) 程序排程演算法

2021-07-27 04:29:51 字數 3028 閱讀 6138

程序排程,使用者程序數程序排程一般都多於處理機數、這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。無論是在批處理系統還是分時系統中,使用者程序數程序排程一般都多於處理機數、這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。這就要求程序排程程式按一定的策略,動態地把處理機分配給處於就緒佇列中的某乙個程序,以使之執行。

程序排程的的分級 高階、中級和低階排程作業從提交開始直到完成,往往要經歷下述**排程: 高階排程:(high-level scheduling)又稱為作業排程,它決定把後備作業調入記憶體執行; 低階排程:(low-level scheduling)又稱為程序排程,它決定把就緒佇列的某程序獲得cpu; 中級排程:(intermediate-level scheduling)又稱為在虛擬儲存器中引入,在內、外存對換區進行程序對換。

本機使用centos6.5 核心:2.6.32-431.el6.i686

linux所採用的程序排程演算法:在2.6以前,採用的是核心非搶占排程演算法。在2.6之後,排程演算法可以簡單的歸為兩大類:cfs(公平排程類)和實時排程類,而實時排程類支援核心和使用者態搶占

。1.先來先服務演算法:如果早就緒的程序排在就緒佇列的前面,遲就緒的程序排在就緒佇列的後面,那麼先來先服務(fcfs

: first come first service)總是把當前處於就緒佇列之首的那個

程序排程

到執行狀態。也就說,它只考慮程序進入就緒佇列的先後,而不考慮它的下乙個

cpu週期

的長短及其他因素。fcfs演算法簡單易行,是一種非搶占式策略,但效能卻不大好。

按照程序進入就緒佇列的先後順序排程並分配處理機執行。先來先服務排程演算法是一種非搶占式的演算法,先進入就緒佇列的程序,先分配處理機執行。一旦乙個程序占有了處理機,它就一直執行下去,直到該程序完成工作或者因為等待某事件發生而不能繼續執行時才釋放處理機。

(1)系統只要有按fifo規則建立的後備作業佇列或就緒程序佇列即可,就是乙個作業控制塊jcb或程序控制塊pcb加入佇列時加在相應佇列末尾。

(2)排程退出佇列時從相應佇列首開始順序掃瞄,將相關的jcb或pcb排程移出相應佇列。

優缺點:

有利於長作業(程序)而不利於短作業(程序)

有利於cpu繁忙型作業(程序)而不利於i/o繁忙型作業(程序)

2.時間片輪轉排程演算法:是一種最古老,最簡單,最公平且使用最廣的演算法。每個程序被分配乙個時間段,稱作它的時間片,即該程序允許執行的時間。如果在時間片結束時程序還在執行,則cpu將被剝奪並分配給另乙個程序。如果程序在時間片結束前阻塞或結束,則cpu當即進行切換。排程程式所要做的就是維護一張就緒程序列表,當程序用完它的時間片後,它被移到佇列的末尾。

時間片輪轉排程中唯一有趣的一點是時間片的長度。從乙個程序切換到另乙個程序是需要一定時間的--儲存和裝入暫存器值及記憶體映像,更新各種**和佇列等。假如程序切換(process switch) - 有時稱為上下文切換(context switch),需要5毫秒,再假設時間片設為20毫秒,則在做完20毫秒有用的工作之後,cpu將花費5毫秒來進行程序切換。cpu時間的20%被浪費在了管理開銷上。

為了提高cpu效率,我們可以將時間片設為500毫秒。這時浪費的時間只有1%。但考慮在乙個分時系統中,如果有十個互動使用者幾乎同時按下回車鍵,將發生什麼情況?假設所有其他程序都用足它們的時間片的話,最後乙個不幸的程序不得不等待5秒鐘才獲得執行機會。多數使用者無法忍受一條簡短命令要5秒鐘才能做出響應。同樣的問題在一台支援多道程式的個人計算機上也會發生。結論可以歸結如下:時間片設得太短會導致過多的程序切換,降低了cpu效率;而設得太長又可能引起對短的互動請求的響應變差。將時間片設為100毫秒通常是乙個比較合理的折衷。

3.優先數排程演算法:優先數排程演算法常用於

批處理系統

中。在程序排程

中,每次排程時,系統把

處理機分配給就緒

佇列中優先數最高的程序。它又分為兩種:

非搶占式

優先數演算法和搶占式優先數演算法。

在非搶占式優先數演算法下,系統一旦把處理機分配給就緒佇列中優先數最高的程序後,這個程序就會一直執行,直到完成或發生某事件使它放棄處理機,這時系統才能重新將處理機分配給就緒佇列中的另乙個優先數最高的程序。

在搶占式優先數演算法下,系統先將處理機分配給就緒佇列中優先數最高的進程度讓它執行,但在執行的過程中,如果出現另乙個優先數比它高的程序,它就要立即停止,並將處理機分配給新的高優先數程序。

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

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

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

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

Linux 程序排程演算法

程序排程 無論是在批處理系統還是分時系統中,使用者程序數一般都多於處理機數 這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。這就要求程序排程程式按一定的策略,動態地把處理機分配給處於就緒佇列中的某乙個程序,以使之執行。程序排程具有四條基本屬性和三個基本狀態 基本屬性 1 多型性 從誕...

Linux 程序排程演算法

linux中的程序排程演算法分類如下 一 先來先服務和短作業 程序 優先排程演算法 1 先來先服務排程演算法 fcfs 先來先服務 first come first service fcfs 排程演算法是一種最簡單的 不可搶占式的 排程演算法,既可用於作業排程,也可用於程序排程。該演算法按照程序進入...

linux程序排程演算法

一 什麼是程序排程 都知道linux是一種多使用者多工的作業系統,而當多個程序同時執行去,搶占有限資源的時候,這時作業系統就會按照一定的原則將資源合理分配給請求資源的程序,這就是程序排程。二 在linux作業系統中都有哪些程序排程演算法 1.先進先出演算法 fifo 按照程序進入就緒佇列的先後次序來...