程序排程詳細總結

2021-06-10 05:52:23 字數 3339 閱讀 4336

無論是在批處理系統

還是分時系統

中,使用者程序數一般都多於

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

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繁忙型作業,而...

常見程序排程演算法總結

程序排程也稱為低階排程,它所排程的物件為程序 或者核心級執行緒 而程序排程演算法主要有以下幾種 先來先服務排程演算法是一種最簡單的排程演算法,可用於作業排程,也可用於程序排程。在程序排程中採用先來先服務演算法時候,每次排程就從就緒佇列中選乙個最先進入該佇列的程序,為之分配處理機。即誰第乙個排隊的誰就...