進程調度算法

一、進程調度的任務

(1)保存處理機的現場信息。在進行調度時首先要保存當前的處理機的現場信息。

(2)按某種算法選取進程。調度程序按某種算法選取進程,將其狀態改爲運行狀態,並準備把處理機分配給它。

(3)把處理機分配給進程。由分派程序把處理機分派給該進程,此時需要將選中的進程的進程控制塊內有關處理機現場的信息裝入處理機相應的各個寄存器中,把處理機的控制權予於該進程,讓它在上次的斷電出恢復。

二、進程調度算法

  1. 輪轉調度算法

該算法採用剝奪策略。讓就緒進程以FCFS 的方式按時間片輪流使用CPU 的調度方式,即將系統中所有的就緒進程按照FCFS 原則,排成一個隊列,每次調度時將CPU 分派給隊首進程,讓其執行一個時間片,時間片的長度從幾個ms 到幾百ms。在一個時間片結束時,發生時鐘中斷,調度程序據此暫停當前進程的執行,將其送到就緒隊列的末尾,並通過上下文切換執行當前的隊首進程,進程可 以未使用完一個時間片,就出讓CPU(如阻塞)。時間片輪轉調度算法的特點是簡單易行、平均響應時間短,但不利於處理緊急作業。

顯然,輪轉法只能用來調度分配一些可以搶佔的資源。這些可以搶佔的資源可以隨時被剝奪,而且可以將它們再分配給別的進程。CPU是可搶佔資源的一種。但 打印機等資源是不可搶佔的。由於作業調度是對除了CPU之外的所有系統硬件資源的分配,其中包含有不可搶佔資源,所以作業調度不使用輪轉法。在輪轉法中, 時間片長度的選取非常重要。首先,時間片長度的選擇會直接影響到系統的開銷和響應時間。如果時間片長度過短,則調度程序搶佔處理機的次數增多。這將使進程 上下文切換次數也大大增加,從而加重系統開銷。反過來,如果時間片長度選擇過長,例如,一個時間片能保證就緒隊列中所需執行時間最長的進程能執行完畢,則 輪轉法變成了先來先服務法。時間片長度的選擇是根據系統對響應時間的要求和就緒隊列中所允許最大的進程數來確定的。

 在輪轉法中,加入到就緒隊列的進程有3種情況,一種是分給它的時間片用完,但進程還未完成,回到就緒隊列的末尾等待下次調度去繼續執行。另一 種情況是分給該進程的時間片並未用完,只是因爲請求I/O或由於進程的互斥與同步關係而被阻塞。當阻塞解除之後再回到就緒隊列。第三種情況就是新創建進程 進入就緒隊列。如果對這些進程區別對待,給予不同的優先級和時間片,從直觀上看,可以進一步改善系統服務質量和效率。例如,我們可把就緒隊列按照進程到達 就緒隊列的類型和進程被阻塞時的阻塞原因分成不同的就緒隊列,每個隊列按FCFS原則排列,各隊列之間的進程享有不同的優先級,但同一隊列內優先級相同。 這樣,當一個進程在執行完它的時間片之後,或從睡眠中被喚醒以及被創建之後,將進入不同的就緒隊列。


2. 優先級調度算法

在時間片輪轉調度算法中,做了一個隱含的假設,即系統中所有的進程時間緊迫性是相同的。但實際並非如此,爲了滿足實際的需求,在進程調度算法中引入優先級,而形成優先級調度算法。

優先級調度算法核心是確定進程的優先級。首先,系統或用戶按某種原則爲進程指定一個優先級來表示該進程所享有的調度優先權。確定優先級的方法較多,一般可分爲 兩類,即靜態法和動態法。靜態法根據進程的靜態特性,在進程開始執行之前就確定它們的優先級,一旦開始執行之後就不能改變。動態法則不然,它把進程的靜態 特性和動態特性結合起來確定進程的優先級,隨着進程的執行過程,其優先級不斷變化。  

<1>進程的靜態優先級確定最基本的方法是按照進程的類型給予不同的優先級。例如,在有些系統中,進程被劃分爲系統進程和用戶進程。系統進程享有比用戶進程高 的優先級;對於用戶進程來說,則可以分爲:I/O繁忙的進程、CPU繁忙的進程、I/O與CPU均衡的進程和其他進程等。

基於靜態優先級的調度算法實現簡單,系統開銷小,但由於靜態優先級一旦確定之後,直到執行結束爲止始終保持不變,從而系統效率較低,調度性能不高。現在的操作系統中,如果使用優先級調度的話,則大多采用動態優先級的調度策略。

<2>進程的動態優先級一般可以根據以下兩個方面來確定:

 (1)根據進程佔有CPU時間的長短來決定。一個進程佔有處理機的時間愈長,則在被阻塞之後再次獲得調度的優先級就越低。反之,其獲得調度的可能性就會越大。

 (2)根據就緒進程等待CPU的時間長短來決定。一個就緒進程在就緒隊列中等待的時間越長,則它獲得調度選中的優先級就越高。

由於動態優先級隨時間的推移而變化,系統要經常計算各個進程的優先級,因此,系統要爲此付出一定的開銷。

優先級優先調度算法用於多道批處理系統中較好,但它使得優先級較低的進程等待時間較長,這對於分時系統中要想獲得較好的響應時間是不允許的,所以在分時系統中多采用時間片輪轉法來進行進程調度。

 

3.多隊列調度算法

在進程調度時,由於系統設置一個進程的就緒隊列,即低級調度算法是固定的,單一的,無法滿足系統中不同用戶對進程調度策略的不同要求,在多處理機系統中,這種單一的調度策略實現機制的缺點更突出,多隊列調度算法能夠在一定的程度上彌補這一缺點。

該算法將系統中的進程就緒隊列一個拆分成若干個。將不同類型或性質的進程固定分配在不同在不同的就緒隊列,不同的就緒隊列採用不同的調度算法,就緒隊列中的進程可設不同的優先級。因此,系統針對不同用戶進程的需求,很容易提供多種調度策略。

4.多級反饋隊列調度算法

多級反饋隊列調度算法則不必事先知道各種進程所需的執行時間,而且還可以滿足各種類型進程的需要,因而它是目前被公認的一種較好的進程調度算法。

(1) 設置多個就緒隊列。在系統中設置多個就緒隊列,併爲各個隊列賦予不同的優先級。第一個隊列的優先級最高,第二個隊列次之,其餘各隊列的優先權逐個降低。該算法賦予各個隊列中進程執 行時間片的大小也各不相同,在優先權愈高的隊列中,爲每個進程所規定的執行時間片就愈小。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍,……, 第i+1個隊列的時間片要比第i個隊列的時間片長一倍。

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

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

wKioL1daYZuBiNREAAA4zrnu89c703.png-wh_50



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章