1. 程式人生 > >處理器排程(作業系統)

處理器排程(作業系統)

2.7 處理機排程:排程的概念、時機、切換、過程以及排程方式和基本準則

排程的概念

1. 排程的基本概念

在多道程式系統中,程序的數量往往多於處理機的個數,程序爭用處理機的情況就在所難免。處理機排程是對處理機進行分配,就是從就緒佇列中,按照一定的演算法(公平、髙效)選擇一個程序並將處理機分配給它執行,以實現程序併發地執行。

處理機排程是多道程式作業系統的基礎,它是作業系統設計的核心問題

2. 排程的層次

一個作業從提交開始直到完成,往往要經歷以下三級排程,如圖2-4所示。

1) 作業排程。又稱高階排程,.其主要任務是按一定的原則從外存上處於後備狀態的作業中挑選一個(或多個)作業,給它(們)分配記憶體、輸入/輸出裝置等必要的資源,並建立相應的程序,以使它(們)獲得競爭處理機的權利。簡言之,就是記憶體與輔存之間的排程。對於每個作業只調入一次、調出一次


多道批處理系統中大多配有作業排程,而其他系統中通常不需要配置作業排程。作業排程的執行頻率較低,通常為幾分鐘一次。

2) 中級排程。又稱記憶體排程。引入中級排程是為了提高記憶體利用率和系統吞吐量。為此,應使那些暫時不能執行的程序,調至外存等待,把此時的程序狀態稱為掛起狀態。當它們已具備執行條件且記憶體又稍有空閒時,由中級排程來決定,把外存上的那些已具備執行條件的就緒程序,再重新調入記憶體,並修改其狀態為就緒狀態,掛在就緒佇列上等待。

3) 程序排程。又稱為低階排程,其主要任務是按照某種方法和策略從就緒佇列中選取一個程序,將處理機分配給它。程序排程是作業系統中最基本的一種排程,在一般作業系統中都必須配置程序排程。程序排程的頻率很高,一般幾十毫秒一次



圖2-4  處理機的三級排程

3. 三級排程的聯絡

作業排程從外存的後備佇列中選擇一批作業進入記憶體,為它們建立程序,這些程序被送入就緒佇列,程序排程從就緒佇列中選出一個程序,並把其狀態改為執行狀態,把CPU分配給它。中級排程是為了提高記憶體的利用率,系統將那些暫時不能執行的程序掛起來。當記憶體空間寬鬆時,通過中級排程選擇具備執行條件的程序,將其喚醒。

1) 作業排程為程序活動做準備,程序排程使程序正常活動起來,中級排程將暫時不能執行的程序掛起,中級排程處於作業排程和程序排程之間。

2) 作業排程次數少,中級排程次數略多,程序排程頻率最高。

3) 程序排程是最基本的,不可或缺。

排程的時機、切換與過程

程序排程和切換程式是作業系統核心程式。當請求排程的事件發生後,才可能會執行程序排程程式,當排程了新的就緒程序後,才會去進行程序間的切換。理論上這三件事情應該順序執行,但在實際設計中,在作業系統核心程式執行時,如果某時發生了引起程序排程的因素,並不一定能夠馬上進行排程與切換。

現代作業系統中,不能進行程序的排程與切換的情況有以下幾種情況。

1) 在處理中斷的過程中:中斷處理過程複雜,在實現上很難做到程序切換,而且中斷處理是系統工作的一部分,邏輯上不屬於某一程序,不應被剝奪處理機資源

2) 程序在作業系統核心程式臨界區中:進入臨界區後,需要獨佔式地訪問共享資料,理論上必須加鎖,以防止其他並行程式進入,在解鎖前不應切換到其他程序執行,以加快該共享資料的釋放。

3) 其他需要完全遮蔽中斷的原子操作過程中:如加鎖、解鎖、中斷現場保護、恢復等原子操作。在原子過程中,連中斷都要遮蔽,更不應該進行程序排程與切換。

如果在上述過程中發生了引起排程的條件,並不能馬上進行排程和切換,應置系統的請求排程標誌,直到上述過程結束後才進行相應的排程與切換。

應該進行程序排程與切換的情況有:

1) 當發生引起排程條件,且當前程序無法繼續執行下去時,可以馬上進行排程與切換。如果作業系統只在這種情況下進行程序排程,就是非剝奪排程。 

2) 當中斷處理結束或自陷處理結束後,返回被中斷程序的使用者態程式執行現場前,若置上請求排程標誌,即可馬上進行程序排程與切換。如果作業系統支援這種情況下的執行排程程式,就實現了剝奪方式的排程。

程序切換往往在排程完成後立刻發生,它要求儲存原程序當前切換點的現場資訊,恢復被排程程序的現場資訊。現場切換時,作業系統核心將原程序的現場資訊推入到當前程序的核心堆疊來儲存它們,並更新堆疊指標。核心完成從新程序的核心棧中裝入新程序的現場資訊、更新當前執行程序空間指標、重設PC暫存器等相關工作之後,開始執行新的程序。

程序排程方式

所謂程序排程方式是指當某一個程序正在處理機上執行時,若有某個更為重要或緊迫的程序需要處理,即有優先權更髙的程序進入就緒佇列,此時應如何分配處理機

通常有以下兩種程序排程方式:

1) 非剝奪排程方式,又稱非搶佔方式。是指當一個程序正在處理機上執行時,即使有某個更為重要或緊迫的程序進入就緒佇列,仍然讓正在執行的程序繼續執行,直到該程序完成或發生某種事件而進入阻塞狀態時,才把處理機分配給更為重要或緊迫的程序。

在非剝奪排程方式下,一旦把CPU分配給一個程序,那麼該程序就會保持CPU直到終止或轉換到等待狀態。這種方式的優點是實現簡單、系統開銷小,適用於大多數的批處理系統,但它不能用於分時系統和大多數的實時系統

2) 剝奪排程方式,又稱搶佔方式。是指當一個程序正在處理機上執行時,若有某個更為重要或緊迫的程序需要使用處理機,則立即暫停正在執行的程序,將處理機分配給這個更為重要或緊迫的程序。.

釆用剝奪式的排程,對提高系統吞吐率和響應效率都有明顯的好處。但“剝奪”不是一種任意性行為,必須遵循一定的原則,主要有:優先權、短程序優先和時間片原則等

排程的基本準則

不同的排程演算法具有不同的特性,在選擇排程演算法時,必須考慮演算法所具有的特性。為了比較處理機排程演算法的效能,人們提出很多評價準則,下面介紹主要的幾種:

1) CPU利用率。CPU是計算機系統中最重要和昂貴的資源之一,所以應儘可能使CPU 保持“忙”狀態,使這一資源利用率最髙

2) 系統吞吐量。表示單位時間內CPU完成作業的數量。長作業需要消耗較長的處理機時間,因此會降低系統的吞吐量。而對於短作業,它們所需要消耗的處理機時間較短,因此能提高系統的吞吐量。排程演算法和方式的不同,也會對系統的吞吐量產生較大的影響。

3) 週轉時間。是指從作業提交到作業完成所經歷的時間,包括作業等待、在就緒佇列中排隊、在處迤機上執行以及進行輸入/輸出操作所花費時間的總和。

作業的週轉時間可用公式表示如下:
週轉時間 = 作業完成時間 - 作業提交時間

平均週轉時間是指多個作業週轉時間的平均值:
平均週轉時間 = (作業1的週轉時間 + … + 作業 n 的週轉時間) / n

帶權週轉時間是指作業週轉時間與作業實際執行時間的比值


平均帶權週轉時間是指多個作業帶權週轉時間的平均值:
平均帶權週轉時間 = (作業1的帶權週轉時間 + … + 作業 n 的帶權週轉時間) / n
  
4) 等待時間。=開始時間—提交時間。
是指程序處於等處理機狀態時間之和,等待時間越長,使用者滿意度越低。處理機排程演算法實際上並不影響作業執行或輸入/輸出操作的時間,隻影響作業在就緒佇列中等待所花的時間。因此,衡量一個排程演算法優劣常常只需簡單地考察等待時間

5) 響應時間。是指從使用者提交請求到系統首次產生響應所用的時間。在互動式系統中,週轉時間不可能是最好的評價準則,一般釆用響應時間作為衡量排程演算法的重要準則之一。從使用者角度看,排程策略應儘量降低響應時間,使響應時間處在使用者能接受的範圍之內。

要想得到一個滿足所有使用者和系統要求的演算法幾乎是不可能的。設計排程程式,一方面要滿足特定系統使用者的要求(如某些實時和互動程序快速響應要求),另一方面要考慮系統整體效率(如減少整個系統程序平均週轉時間),同時還要考慮排程演算法的開銷。

2.8 作業系統典型排程演算法

在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。

先來先服務(FCFS)排程演算法

FCFS排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。 在作業排程中,演算法每次從後備作業佇列中選擇最先進入該佇列的一個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。

在程序排程中,FCFS排程演算法每次從就緒佇列中選擇最先進入該佇列的程序,將處理機分配給它,使之投入執行,直到完成或因某種原因而阻塞時才釋放處理機。

下面通過一個例項來說明FCFS排程演算法的效能。假設系統中有4個作業,它們的提交時間分別是8、8.4、8.8、9,執行時間依次是2、1、0.5、0.2,系統釆用FCFS排程演算法,這組作業的平均等待時間、平均週轉時間和平均帶權週轉時間見表2-3。

表2-3 FCFS排程演算法的效能
作業號 提交時間 執行時間 開始時間 等待時間 完成時間 週轉時間 帶權週轉時間
1 8 2 8 0 10 2 1
2 8.4 1 10 1.6 11 2.6 2.6
3 8.8 0.5 11 2.2 11.5 2.7 5.4
4 9 0.2 11.5 2.5 11.7 2.7 13.5
平均等待時間 t = (0+1.6+2.2+2.5)/4=1.575
平均週轉時間 T = (2+2.6+2.7+2.7)/4=2.5
平均帶權週轉時間 W = (1+2.6+5.牡13.5)/4=5.625

FCFS排程演算法屬於不可剝奪演算法。從表面上看,它對所有作業都是公平的,但若一個長作業先到達系統,就會使後面許多短作業等待很長時間,因此它不能作為分時系統和實時系統的主要排程策略。但它常被結合在其他排程策略中使用。例如,在使用優先順序作為排程策略的系統中,往往對多個具有相同優先順序的程序按FCFS原則處理。

FCFS排程演算法的特點是演算法簡單,但效率低;對長作業比較有利,但對短作業不利(相對SJF和高響應比);有利於CPU繁忙型作業,而不利於I/O繁忙型作業。

短作業優先(SJF)排程演算法

短作業(程序)優先排程演算法(Shortest Job First )是指對短作業(程序)優先排程的演算法。短作業優先(SJF)排程演算法是從後備佇列中選擇一個或若干個估計執行時間最短的作業,將它們調入記憶體執行。而短程序優先(SPF)排程演算法,則是從就緒佇列中選擇一個估計執行時間最短的程序,將處理機分配給它,使之立即執行,直到完成或發生某事件而阻塞時,才釋放處理機。

例如,考慮表2-3中給出的一組作業,若系統釆用短作業優先排程演算法,其平均等待時間、平均週轉時間和平均帶權週轉時間見表2-4。

表2-4 SJF排程演算法的效能
作業號 提交時間 執行時間 開始時間 等待時間 完成時間 週轉時間 帶權週轉時間
1 8 2 8 0 10 2 1
2 8,4 1 10.7 2.3 11.7 3.3 3.3
3 8.8 0.5 10.2 1.4 10.7 1.9 3.8
4 9 0.2 10 1 10.2 1.2 6
平均等待時間 t = (0+2.3+1.4+1)/4=1.175
平均週轉時間 T = (2+3.3+1.9+1.2)/4=2.1
平均帶權週轉時間 W = (1+3.3+3.8+6)/4=3.525

SJF排程演算法也存在不容忽視的缺點:
  • 該演算法對長作業不利,由表2-3和表2-4可知,SJF排程演算法中長作業的週轉時間會增加。更嚴重的是,如果有一長作業進入系統的後備佇列,由於排程程式總是優先排程那些 (即使是後進來的)短作業,將導致長作業長期不被排程(“飢餓”現象,注意區分“死鎖”。後者是系統環形等待,前者是排程策略問題)。
  • 該演算法完全未考慮作業的緊迫程度,因而不能保證緊迫性作業會被及時處理。
  • 由於作業的長短只是根據使用者所提供的估計執行時間而定的,而使用者又可能會有意或無意地縮短其作業的估計執行時間,致使該演算法不一定能真正做到短作業優先排程。

注意,SJF排程演算法的平均等待時間、平均週轉時間最少

優先順序排程演算法

優先順序排程演算法又稱優先權排程演算法,該演算法既可以用於作業排程,也可以用於程序排程,該演算法中的優先順序用於描述作業執行的緊迫程度

在作業排程中,優先順序排程演算法每次從後備作業佇列中選擇優先順序最髙的一個或幾個作業,將它們調入記憶體,分配必要的資源,建立程序並放入就緒佇列。在程序排程中,優先順序排程演算法每次從就緒佇列中選擇優先順序最高的程序,將處理機分配給它,使之投入執行。

根據新的更高優先順序程序能否搶佔正在執行的程序,可將該排程演算法分為
  • 非剝奪式優先順序排程演算法。當某一個程序正在處理機上執行時,即使有某個更為重要或緊迫的程序進入就緒佇列,仍然讓正在執行的程序繼續執行,直到由於其自身的原因而主動讓出處理機時(任務完成或等待事件),才把處理機分配給更為重要或緊迫的程序。
  • 剝奪式優先順序排程演算法。當一個程序正在處理機上執行時,若有某個更為重要或緊迫的程序進入就緒佇列,則立即暫停正在執行的程序,將處理機分配給更重要或緊迫的程序。

而根據程序建立後其優先順序是否可以改變,可以將程序優先順序分為以下兩種
  • 靜態優先順序。優先順序是在建立程序時確定的,且在程序的整個執行期間保持不變。確定靜態優先順序的主要依據有程序型別、程序對資源的要求、使用者要求。
  • 動態優先順序。在程序執行過程中,根據程序情況的變化動態調整優先順序。動態調整優先順序的主要依據為程序佔有CPU時間的長短、就緒程序等待CPU時間的長短。

高響應比優先排程演算法

高響應比優先排程演算法主要用於作業排程,該演算法是對FCFS排程演算法和SJF排程演算法的一種綜合平衡,同時考慮每個作業的等待時間和估計的執行時間。在每次進行作業排程時,先計算後備作業佇列中每個作業的響應比,從中選出響應比最高的作業投入執行。

響應比的變化規律可描述為:


根據公式可知:
  • 當作業的等待時間相同時,則要求服務時間越短,其響應比越高,有利於短作業。
  • 當要求服務時間相同時,作業的響應比由其等待時間決定,等待時間越長,其響應比越高,因而它實現的是先來先服務。
  • 對於長作業,作業的響應比可以隨等待時間的增加而提高,當其等待時間足夠長時,其響應比便可升到很高,從而也可獲得處理機。克服了飢餓狀態,兼顧了長作業。

時間片輪轉排程演算法

時間片輪轉排程演算法主要適用於分時系統。在這種演算法中,系統將所有就緒程序按到達時間的先後次序排成一個佇列,程序排程程式總是選擇就緒佇列中第一個程序執行,即先來先服務的原則,但僅能執行一個時間片,如100ms。在使用完一個時間片後,即使程序並未完成其執行,它也必須釋放出(被剝奪)處理機給下一個就緒的程序,而被剝奪的程序返回到就緒佇列的末尾重新排隊,等候再次執行。

在時間片輪轉排程演算法中,時間片的大小對系統性能的影響很大。如果時間片足夠大,以至於所有程序都能在一個時間片內執行完畢,則時間片輪轉排程演算法就退化為先來先服務排程演算法。如果時間片很小,那麼處理機將在程序間過於頻繁切換,使處理機的開銷增大,而真正用於執行使用者程序的時間將減少。因此時間片的大小應選擇適當。

時間片的長短通常由以下因素確定:系統的響應時間、就緒佇列中的程序數目和系統的處理能力。

多級反饋佇列排程演算法(集合了前幾種演算法的優點)

多級反饋佇列排程演算法是時間片輪轉排程演算法和優先順序排程演算法的綜合和發展,如圖2-5 所示。通過動態調整程序優先順序和時間片大小,多級反饋佇列排程演算法可以兼顧多方面的系統目標。例如,為提高系統吞吐量和縮短平均週轉時間而照顧短程序;為獲得較好的I/O裝置利用率和縮短響應時間而照顧I/O型程序;同時,也不必事先估計程序的執行時間。


圖2-5  多級反饋佇列排程演算法
多級反饋佇列排程演算法的實現思想如下:
  1. 應設定多個就緒佇列,併為各個佇列賦予不同的優先順序,第1級佇列的優先順序最高,第2級佇列次之,其餘佇列的優先順序逐次降低。
  2. 賦予各個佇列中程序執行時間片的大小也各不相同,在優先順序越高的佇列中,每個程序的執行時間片就越小。例如,第2級佇列的時間片要比第1級佇列的時間片長一倍, ……第i+1級佇列的時間片要比第i級佇列的時間片長一倍。
  3. 當一個新程序進入記憶體後,首先將它放入第1級佇列的末尾,按FCFS原則排隊等待排程。當輪到該程序執行時,如它能在該時間片內完成,便可準備撤離系統;如果它在一個時間片結束時尚未完成,排程程式便將該程序轉入第2級佇列的末尾,再同樣地按FCFS 原則等待排程執行;如果它在第2級佇列中執行一個時間片後仍未完成,再以同樣的方法放入第3級佇列……如此下去,當一個長程序從第1級佇列依次降到第 n 級佇列後,在第 n 級佇列中便釆用時間片輪轉的方式執行。
  4. 僅當第1級佇列為空時,排程程式才排程第2級佇列中的程序執行;僅當第1 ~ (i-1)級佇列均為空時,才會排程第i級佇列中的程序執行。如果處理機正在執行第i級佇列中的某程序時,又有新程序進入優先順序較高的佇列(第 1 ~ (i-1)中的任何一個佇列),則此時新程序將搶佔正在執行程序的處理機,即由排程程式把正在執行的程序放回到第i級佇列的末尾,把處理機分配給新到的更高優先順序的程序。

多級反饋佇列的優勢有:
  • 終端型作業使用者:短作業優先。
  • 短批處理作業使用者:週轉時間較短。
  • 長批處理作業使用者:經過前面幾個佇列得到部分執行,不會長期得不到處理。