常見的幾種進程調度算法

操作系統進程的調度算法

先來先服務(FCFS)

  • 算法思想:主要從“公平”的角度考慮(類似於我們生活中排隊買東西的例子)
  • 算法規則:按照作業/進程到達的先後順序進行服務
  • 用於作業/進程調度: 是否可搶佔:非搶佔的算法
  • 優缺點:
    • 優點:公平、算法實現簡單;
    • 缺點:排在長作業後面的短作業需要等待很長時間,帶權週轉時間很大,對短作業來說體驗很不好。 是否會導致飢餓:不會

短作業優先(SJF)

  • 算法思想:追求最少的平均等待時間,最少的平均週轉時間、最少的平均帶權週轉時間
  • 算法規則:最短作業/進程優先得到服務(所謂“最短”,是指要求服務時間最短)
  • 是否可搶佔: SJF和SPF是非搶佔的算法。但是也有搶佔式的版本–最短剩餘時間優先算法
  • 優缺點:
    優點:“最短的”平均等待事件、平均週轉時間
    缺點:不公平。對短作業有利。可能產生飢餓喜愛你想。
  • 是否會導致飢餓:會。如果有不斷地短作業到來,可能使長作業長時間得不到服務,產生“飢餓”現象。如果一直得不到服務,則稱爲餓死。

高響應比優先(HRRN)

  • 算法思想:要綜合考慮作業/進程的等待時間和要被服務的時間
  • 算法規則:在每次調度時先計算各個作業或進程的響應比,高響應比的進程被優先服務
  • 響應比 =(進程等待時間+要求服務的時間)/ 要求服務的時間
  • 是否可搶佔:非搶佔的算法。因此只有當前運行的作業或者進程主動放棄處理機時,才需要調度,才需要計算響應比。
  • 優缺點:綜合考慮了等待時間和運行時間(要求服務時間);等待時間相同時,要求服務時間短的優先;服務時 間相等時,要求等待時間長的優先,對於長時間來說,隨着等待時間越來越久,其響應比也會越來越大,從而避免長作業飢餓的問題。
  • 是否會導致飢餓:否

以上這幾種算法主要關心對用戶的公平性、平均週轉時間、平均等待時間等評價系統整體性能的指標,但是不關心“響應時間”,也並不區分任務的緊急程度,因此對於用戶來說,交互性是很糟糕的。所示這些算法一般適用於早期的批處理系統,當然,FCFS算法也常結合其他的算法來使用,在現在也扮演着很重要角色。

時間片輪轉調度算法(RR)

  • 算法思想:公平地、輪流地爲各個進程服務,讓每個進程在一定時間內都可以得到響應(進程間調度)
  • 算法規則:按照各進程到達就緒隊列的順序,輪流讓各個進程執行一個時間片。若進程未在一個時間片內執行完。則剝奪處理機,將進程重新放到就緒隊列隊尾重新排隊。
  • 用於作業/進程:用於進程調度(只有作業放入內存建立相對應的進程後,才能被分配處理機時間片)
  • 是否可搶佔:可搶佔(時鐘裝置發出時鐘中斷來通知CPU時間片已到)
  • 優點:公平;響應快,適用於分時操作系統;
  • 缺點:由於高頻的進程切換,因此有一定開銷;不區分任務的緊急程度。
  • 是否會導致飢餓:不會
  • 時間片太大或者太小造成的影響:
    • 如果時間片太大,使得每個進程都會在一個時間片內完成,時間片調度算法就會退化爲先來先服務算法,並且會增大進程響應時間。因此時間片不能太大。
    • 如果時間片太小,進程調度、切換是有時間代價的,它會導致進程切換過於頻繁,系統會花費大量的時間來處理進程間的切換,從而導致實際用於進程執行的時間比例減少。可見時間片也不能太小。
      一般來說,設計時間片的時候要讓切換進程的開銷佔比不超過1%。

優先級調度算法

  • 算法思想:隨着計算機的發展,特別是實時操作系統的出現,越來越多的應用場景需要根據任務的緊急程度來決定處理進程的順序、
  • 算法規則:調度時選擇優先級最高的進程
  • 用於作業/進程:既可用於作業調度,也可用於進程調度。甚至還會用於在之後學習的IO調度
  • 是否是可搶佔的:搶佔式和非搶佔式都有。非搶佔式只需要在進程主動放棄處理機時進程調度即可,而搶佔式還需在就緒隊列變化時,檢查是否會發生搶佔。
  • 優點:有優先級區分緊急程度,適用於實時操作系統。可靈活地調整對各個作業/進程的編號程度。
  • 缺點:若有源源不斷的高優先級進程到來,低優先級進程可能會導致飢餓。
  • 是否會導致飢餓:會

就緒隊列未必只有一個,可以按照不同的優先級來組織。另外,也可以把優先級高的進程排在更靠近隊頭的位置。

根據優先級是否可以動態改變,可將優先級分爲靜態優先級和動態優先級兩種。

  1. 靜態優先級:創建進程時就確定,之後一直不變
  2. 動態優先級:創建進程的時候有個初始值,之後會根據情況動態地調整優先級。

通常:系統進程優先級高於用戶進程;前臺進程優先級高於後臺進程,操作系統更偏好IO型進程(或IO繁忙型進程)
注:與IO進程相對的是計算型進程(或稱CPU繁忙型進程)

多級反饋隊列調度算法

  • 算法思想:對其他調度算法的綜合
  • 算法規則:
    1、設置多級就緒隊列,各級隊列優先級從高到低,時間片從小到大
    2、新進程到達時先進入1級隊列,按照先來先服務原則排隊等待被分配時間片,若用完時間片還未結束,則進程進入下一級隊列,則重新放回該隊列隊尾。
    3、只有第k級隊列爲空時,纔會爲k+1級隊頭的進程分配時間片
    用於進程調度
  • 是否可搶佔:搶佔式算法,在K級隊列的進程運行過程中,如果更上級別的隊列中新進入了一個進程,則由於新進程處於優先級更高的隊列中,因此新進程先在處理機運行,原來運行的進程放回k級隊列隊尾。
  • 優點:對各類型進程相對公平(FCFS的優點);每個新到達的進程都可以很快就得到響應(RR的優點);短進程只用較少的時間就可完成。(SPF的優點);不必實現估計進程的運行時間(避免用戶作假);可靈活地調整對各類進程的偏好程度,比如CpU密集型進程、I/O密集型進程(拓展:可以將因I/O而阻塞的進程重新放回原隊列,這樣I/O型進程就可以保持較高優先級)
  • 是否會導致飢餓: 會

多級反饋隊列調度算法

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