進程調度算法(操作系統筆記)


(1)先來先服務(First Come First Service,FCFS)調度算法按照進程進入就緒隊列的先後順序選擇可以佔用處理器的進程。這是一種不可搶佔方式的調度算法,優點是實現簡單,缺點是後來的進程等待CPU的時間較長。它現今主要用作輔助調度法;例如結合在優先級調度算法中使用,當有兩個最高優先級的進程時,則誰先來,誰就先被調度。

(2)短執行進程優先算法(Shortest Process First,SPF)就是從就緒隊列中選擇一個CPU執行時間預期最短的進程,將處理器分配給它。雖然較公平,但實現難度較大,因爲要準確預定下一個進程的CPU執行週期是很困難的。

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

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

•對系統進程,也可以根據其所要完成的功能劃分爲不同的類型。例如,調度進程、I/O進程、中斷處理進程、存儲管理進程等。這些進程還可進一步劃分爲不同類型並賦予不同的優先級。例如,在操作系統中,對於鍵盤中斷的處理優先級和對於電源掉電中斷的處理優先級是不相同的。

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

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

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

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

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

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

(4) 時間片輪轉(Round Robin,RR)法的基本思路是讓每個進程在就緒隊列中的等待時間與享受服務的時間成比例。在時間片輪轉法中,需要將CPU的處理時間分成固定大小的時間片,例如,幾十毫秒至幾百毫秒。如果一個進程在被調度選中之後用完了系統規定的時間片,但又未完成要求的任務,則它自行釋放自己所佔有的CPU而排到就緒隊列的末尾,等待下一次調度。同時,進程調度程序又去調度當前就緒隊列中的第一個進程。

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

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

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