挑戰408——操作系統(8)——典型的調度算法

通過前面的學習,我們明白了調度的時機,調度的原理及其方式,那麼問題來了,怎麼樣對程序進行調度才能提高CPU的利用率呢?對於不同的系統而言,他們的設計目標不一樣,所以調度的方式也不同,常見的調度算法有等會要介紹的幾個算法。不過在此之前,得先回顧一下這篇文章:挑戰408——操作系統(1)——介紹一下操作系統這個東西

先來先服務算法(FCFS)

顧名思義,也不需要那麼多專業術語,就是一句話,誰先到了就把處理機給誰運行。其方式類似於數據結構中隊列的原理。也是一種最簡單的調度方式。它可以用於作業調度(它屬於內存管理的內容,以後再說)和進程調度。
進程調度中,每次從就緒隊列中選擇一個最先進入該隊列的進程(隊頭),並把處理機分給它。直到程序運行完畢或者阻塞,才讓出處理機(顯然這是一種不可剝奪方式)。

特點

  1. 表面上公平,但是如果某一個長作業到達,就會使的短作業長期等待。
  2. 因此,常常作爲一種輔助的調度策略給其他調度策略配合使用
  3. 不利於I/O繁忙的作業。

(這裏注意,所謂的CPU繁忙,是指的這項作業的CPU計算部分的時間需要佔用大量的時間,很少請求I/O。對應於I/O繁忙,那就是這項作業很是頻繁的請求I/O,但是真正用於計算的時間卻是不多,因此可以認爲CPU繁忙的作業更接近於長作業的工作方式,因爲它長時間佔用了CPU,I/O繁忙更接近於短作業的工作方式

短作業優先(SJF或者是SPF)調度算法

SJF算法同樣可以分別用於作業調度跟進程調度。其設計目標爲,改進FCFS算法,減少作業或者進程的平均週轉時間。
同樣顧名思義,就是從就緒隊列中選擇一個估計運行時間最短的進程,並將處理機分配給它,後來的短作業不能剝奪正在運行的進程(因此,也是不可剝奪的方式)。

特點

  1. 該種方式的平均等待,週轉時間最短
  2. 不利於長作業,容易造成飢餓現象(不解釋了)
  3. 未曾考慮到作業的緊迫程度

高響應比優先算法(HRRN算法)

HRRN算法主要用於作業調度,是FCFS算法跟SJF算法的一種綜合平衡。它同時考慮每個作業的等待時間個估計的運行時間。我們定義一個名詞,響應比:
在這裏插入圖片描述
其實也可以寫爲,週轉時間 /運行時間。
因此,由公式我們可以知道

  • R(P)一定是> =1
  • 當作業等待時間相同的時候,要求服務的時間越短,響應比越高,此時有利於短作業。
  • 當服務時間相同,則等待時間越長,響應比越高
  • 對於長作業,當等待時間足夠大的時候,響應比也就升的很高,從而獲得處理機。因此它也兼顧了長作業,因此不存在飢餓現象
  • 不過這種方式的代價,就是增加了系統的開銷。

優先級調度算法(priority)

爲了兼顧進程的緊急程度,使得緊急的進程得以及時處理,我們可以採用 優先級調度算法他適用於作業調度和進程調度。
當採用進程調度的時候,把處理機分配給就緒隊列中的若干個遊俠權最高的進程,該算法對於處理機可以進行可剝奪和不可剝奪兩種方式
對於優先級算法,其關鍵在於如何確定進程的優先級,主要分爲靜態和動態兩種方式。
靜態優先是指在進程創建時就確定該進程的優先級,並且其優先級在整個運行期間都保持不變
動態優先是指進程的優先級可以根據進程的不斷推進而改變,以取得更好的性能。對於動態優先,其優先級的變化取決於進程的等待時間和佔有處理機時間的時間。即隨着進程等待時間的增加,該進程的優先級將以某種速率增加。這樣的目的是爲了讓優先級較低的進程在等待足夠多的時間後優先級提高,進而被調度。另一方面,當一個進程佔有處理機時間不斷增加時,優先級會以某種速率降低,目的在於在程序運行一段時間後,將處理機讓給其他進程,以防止進程長期壟斷CPU。(這裏考過大題

時間片輪轉算法(RR)

RR算法主要用於進程調度,且常用於分時系統(聯想到分時系統的特點)。通常,操作系統將所有的就緒進程按FCFS的原則,排成一個隊列,每次調度的時候,把CPU分給隊首的進程,並執行一個時間片的時間,若進程不能再規定的時間內完成運行,則系統時鐘發出一箇中斷,暫停當前程序的運行,並送到就緒隊列末尾,若時間片很長,長到幾乎所有進程都能完成,那麼這就退化成FCFS算法。若太短,那麼用戶的響應時間就會變長。

特點
顯然這對I/O頻繁的進程非常不利,因爲這些進程通常不到一個時間片就阻塞了,等好不容易等I/O完成,又要跟其他進程一樣排隊。

多級反饋隊列算法(MFQ,集合了前幾種算法的優點)

這種算法中設置了多個就緒隊列,每個隊列的優先級不一樣,第一個最高,第二個次之,依次類推。其中優先級越高的隊列,執行的時間片的時間就越短,
進程進入內存後,首先放入第一個隊列中,按FCFS算法執行,若該進程在某一個時間片內完成,那麼正常退出,否則調到下一個優先級較低的隊列的隊尾,依次類推。
操作系統在第一個隊列爲空的時候,纔會在第二個隊列中調度,(即當前面k - 1個隊列爲空時,才調用第k個隊列)。前一個隊列長期不爲空的話,那麼後面的隊列就會產生飢餓現象

各調度算法間的比較

借用教材上的圖,綜合對比各類調度算法:
在這裏插入圖片描述

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