無論是在批處理系統
還是分時系統
中,使用者程序數一般都多於
處理機數、這將導致它們互相爭奪處理機。另外,系統程序也同樣需要使用處理機。這就要求程序排程程式按一定的策略,動態地把處理機分配給處於就緒佇列中的某乙個程序,以使之執行。
1.多型性 從誕生、執行,直至消滅。
2.多個不同的程序可以包括相同的程式
3.三種基本狀態 它們之間可進行轉換
4.併發性
併發執行的程序輪流占用處理器
1.等待態:等待某個事件的完成;
2.就緒態:等待系統分配處理器以便執行;
3.執行態:占有處理器正在執行。
執行態→等待態 往往是由於等待外設,等待主存等資源分配或等待人工干預而引起的。
等待態→就緒態 則是等待的條件已滿足,只需分配到處理器後就能執行。
執行態→就緒態 不是由於自身原因,而是由外界原因使執行狀態的程序讓出處理器,這時候就變成就緒態。例如時間片用完,或有更高優先順序的程序來搶占處理器等。
就緒態→執行態 系統按某種策略選中就緒佇列中的乙個程序占用處理器,此時就變成了執行態
分派程式一旦把
處理機分配給某程序後便讓它一直執行下去,直到程序完成或發生
某事件而阻塞時,才把處理機分配給另乙個程序。
當乙個程序正在執行時,系統可以基於某種原則,剝奪已分配給它的
處理機,將之分配給其它程序。剝奪原則有:優先權原則、短程序優先原則、
時間片原則。
例如,有三個程序p1、p2、p3先後到達,它們分別需要20、4和2個單位時間執行完畢。
假如它們就按p1、p2、p3的
順序執行
,且不可剝奪,則三程序各自的
周轉時間
分別為20、24、
26個單位時間,平均周轉時間是23.33個時間單位。
假如用時間片原則的剝奪排程方式,可得到:
可見:p1、p2、p3的周轉時間分別為26、10、6個單位時間(假設時間片為2個單位時間),平均周轉時間為14個單位時間。
衡量程序排程效能的指標有:周轉時間、響應時間、cpu-i/o執行期。
演算法總是把
處理機分配給最先進入就緒佇列的程序,乙個程序一旦分得處理機,便一直執行下去,直到該程序完成或阻塞時,才釋放處理機。
例如,有三個程序p1、p2和p3先後進入就緒
佇列,它們的執行期分別是21、6和3個單位時間,
執**況如下圖:
對於p1、p2、p3的
周轉時間
為21、27、30,平均周轉時間為26。
可見,fifo演算法服務質量不佳,容易引起作業使用者不滿,常作為一種輔助
排程演算法。
該演算法從就緒佇列中選出下乙個「cpu執行期最短」的程序,為之分配處理機。
例如,在就緒佇列中有四個程序p1、p2、p3和p4,它們的下乙個執行
程序排程
期分別是16、12、4和3個單位時間,執**況如下圖:
p1、p2、p3和p4的周轉時間分別為35、19、7、3,平均周轉時間為16。
該演算法雖可獲得較好的排程效能,但難以準確地知道下乙個cpu執行期,而只能根據每乙個程序的執行歷史來**。
前幾種演算法主要用於批處理系統中,不能作為分時系統中的主排程演算法,在分時系統中,都採用時間片輪轉法。
簡單輪轉法:系統將所有就緒程序按fifo規則排隊,按一定的時間間隔把
處理機分配給佇列中的程序。這樣,就緒佇列中所有程序均可獲得乙個時間片的處理機而執行。
多級佇列
方法:將系統中所有程序分成若干類,每類為一級。
多級反饋
佇列方式是在系統中設定多個就緒佇列,並賦予各佇列以不同的優先權。
程序排程發生在什麼時機呢?這與引起程序排程的原因以及程序排程的方式有關。
(1)正在執行的程序執行完畢。這時,如果不選擇新的就緒程序執行,將浪費
處理機資源。
(2)執行中程序自己呼叫阻塞原語將自己阻塞起來進入睡眠等狀態。
(3)執行中程序呼叫了p
原語操作,從而因資源不足而被阻塞;或呼叫了v原語操作啟用了等待資源的程序佇列。
(4)執行中程序提出i/o請求後被阻塞。
(5)在
分時系統
中時間片已經用完。
(6)在執行完
系統呼叫
等系統程式後返回使用者程序時,這時可看作系統程序執行完畢,從而可排程選擇一新的使用者程序執行。
以上都是在不
可剝奪方式
下的引起程序排程的原因。在cpu執行方式是可剝奪時.還有
(7)就緒佇列中的某程序的優先順序變得高於當前執行程序的優先順序,從而也將引發程序排程。
unix作業系統採用
可剝奪的動態優先順序排程演算法
。程序的優先順序由賦給它的優先數確定,優先數越小,優先順序越高。在該演算法中,程序的優先數隨著它占用cpu的時間增加而增加。當程序占用cpu的時間減少時,其優先數也隨著減少。
補充:作為乙個
分時的、多工、多使用者作業系統,要保證公平地對待各個使用者的程序,使各終端使用者的響應時間不至太一長.所以unix作業系統採用了這種排程演算法。但這種演算法不能滿足關鍵任務的需求,從而使傳統的unixrk作業系統
缺乏實時性
。linux中的程序如果從排程策略劃分,可以分為兩類,
普通程序
和實時程序
。實時程序又可分為兩類,fifo,rr
。實時程序的優先順序遠遠大於普通程序。linux的處理策略是如果有實時程序處於可執行狀態,那麼優先執行實時程序,知道所有的實時程序或者結束,或者被殺掉,或者處於阻塞狀態。也就是說如果實時程序一直在執行,那麼普通的程序就會被活活餓死
每乙個普通程序都有乙個靜態優先順序。這個值會被排程器用來與作為參考來排程程序。在核心中排程的優先順序的區間為[100,139],數字越低,優先順序越高。
每乙個實時程序都會與乙個實時優先順序相關聯。實時優先順序在1到99之間。不同與普通程序,系統排程時,實時優先順序高的程序總是先於優先順序低的程序執行。知道實時優先順序高的實時程序無法執行。實時程序總是被認為處於活動狀態。
如果有數個 優先順序相同的實時程序,那麼系統就會按照程序出現在佇列上的順序選擇程序。假設當前cpu執行的實時程序a的優先順序為a,而此時有個優先順序為b的實時程序b進入可執行狀態,那麼只要b
1. 對於fifo的程序,意味著只有當前程序執行完畢才會輪到其他程序執行。由此可見相當霸道。
2. 對於rr的程序。一旦時間片消耗完畢,則會將該程序置於佇列的末尾,然後執行其他相同優先順序的程序,如果沒有其他相同優先順序的程序,則該程序會繼續執行。
總而言之,對於實時程序,高優先順序的程序就是大爺。它執行到沒法執行了,才輪到低優先順序的程序執行。等級制度相當森嚴啊。
詳細剖析Linux程序排程時機
linux在眾多程序中是怎麼進行排程的,這個牽涉到linux程序排程時機的概念,由linux核心中schedule 的函式來決定是否要進行程序的切換,如果要切換的話,切換到哪個程序等等。linux程序排程時機主要有 1 程序狀態轉換的時刻 程序終止 程序睡眠 2 當前程序的時間片用完時 curren...
程序排程演算法 總結參考
參考 排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短作業 程序 由此可知,本演算法適合於cpu繁忙型作業,而...
常見程序排程演算法總結
程序排程也稱為低階排程,它所排程的物件為程序 或者核心級執行緒 而程序排程演算法主要有以下幾種 先來先服務排程演算法是一種最簡單的排程演算法,可用於作業排程,也可用於程序排程。在程序排程中採用先來先服務演算法時候,每次排程就從就緒佇列中選乙個最先進入該佇列的程序,為之分配處理機。即誰第乙個排隊的誰就...