常見的調度算法

1.先來先服務(FCFS)調度算法

     1.它可以用於作業調度,也可以用於進程調度。

     2.它是優先考慮在作在系統中等待時間最長的作業或者進程。

     3.不考慮該作業或進程執行時間的長短。

    原理:每次從進程就緒隊列中選擇一個等待時間最長(最先進來)的進程,爲其分配處理機,使其運行,一直運行完成或者發生阻塞,進程調度程序纔將處理機分配給其他進程。

    說明:FCFS算法在單處理機上已經很少作爲主調度算法,但經常把它與其他調度算法相結合使用,形成一種更爲有效的算法。列如,可以在系統中按優先級設置多個隊列,每一個優先級一個隊列,其中每個優先級的調度都用FCFS算法。這樣就比較高效。

2.最短優先調度算法

    1.它可以用於作業調度,也可以用於進程調度。

    2.它是優先考慮在系統中最短的作業或進程。

    3.作業或進程的長短是用時間來衡量的。

    原理:它是從外存作業或進程後備中選擇若干個估計運行時間最短的作業或進程,將他們調入內存運行。

    缺點:1.必須知道作業的運行時間。

              2.對長作業不利,長作業的週轉時間明顯增長。

              3.完全沒有考慮作業的緊迫程度。

3.輪轉(RR)調度算法

     1.用於分時系統。

     2.讓就緒隊列上的每個程序僅運行一個時間片。

     3.假如就緒隊列上有n個進程,每個進程大約可以獲得1/n的處理機時間。

     原理:系統根據FCFS策略,將所有進程排成一個隊列,設置一個時間間隔(如30ms)即產生一次中斷,激活進程中的進程調度程序,完成一次調度,將CPU分配給隊首進程,令其執行。當該進程的時間片耗盡或運行完成是時,系統在分配給新的隊首(或新到達的緊迫程序),可保證就緒隊列中的所有進程在一個確定的時間段內,能夠獲得一次CPU執行。

     進程切換時機:1.若一個時間片尚未運行完,正在運行的程序已經完成,就立即激活調度程序,將它從隊列中刪除,在調度隊列中隊首的進程運行,並啓動一個新的時間片。

                            2.在一個時間片段用完,計時器中斷處理程序被激活。如果進程尚未運行完,調度程序將把它送往就緒隊列的末尾。

       特別說明:時間片的大小對系統的性能有很大的影響。時間片過短,對短作業有利,因爲它能在該時間片內完成。但對於長作業,會頻繁的執行進程調用和進程上下文切換,增加了系統開銷。時間片過長的話,爲使每個進程能在一個時間片內完成,它會退化爲FCFS算法,無法滿足短作業和交互式用戶的需求。

4.優先級調度算法

  它分爲非搶佔式優先級調度算法和搶佔式優先級調度算法。

 (1)非搶佔式優先級調度算法

        原理:一旦把處理機分配給就緒隊列中最高的優先級進程後,該進程邊一直執行下去直至完成,或者該進程發生某事件而放棄處理機,系統才能將處理機分配給另一個優先級最高的進程。

 (2)搶佔式優先級調度算法

        原理:把處理機分配給最高優先級進程,使其執行,但在執行期間,出現一個優先級更高的的進程,調度進程就將處理機分配給新到的優先級更高的進程。

     優先級調度算法的關鍵在於:如何確定進程的優先級,以及確定是使用靜態優先級還是使用動態優先級。

     靜態優先級是在進程創建時確定的,在進程的運行期間保持不變。

     動態優先級是指在進程創建之初,先賦予其一個優先級,然後其值隨進程的推進或等待時間的增加而改變。

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

   目前公認的一種較好的進程調度算法。

   (1)設置多個就緒隊列。在系統中設置多個就緒隊列,併爲每個隊列賦予不同的優先級。

   (2)每個隊列都採用FCFS算法。當新的進程進入內存後,首先將它放入第一個對列的末尾,按FCFS算法原則等待調度。

   (3)按對列優先級調度。


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