1. 程式人生 > >作業系統之排程演算法的六種實現

作業系統之排程演算法的六種實現

排程演算法

程序排程就是選擇程序佔用處理機

在描述程序排程演算法之前,先了解幾個概念

  1. 週轉時間 : 程序從建立到結束執行所經歷的時間
  2. 平均週轉時間 : n個程序週轉時間的平均值。一般來說,如果排程演算法使得平均週轉時間減少,則使用者滿意度和系統效率會提高。
  3. 等待時間 :指程序處於等處理機狀態時間之和,等待時間越長,使用者滿意度越低
  4. 平靜等待時間。n個程序的等待時間的平均值。如果一個排程演算法使得平均等待時間降低,意味著減少了平均週轉時間。

++不同的排程演算法可滿足不同的要求 , 要想得到一個滿足所有使用者和系統的演算法幾乎不可能。++

  1. 先來先到服務 (fcfs) first comming first service
    這是最基本的排程方法,基本原則就是先來先執行。很好理解這個演算法的優點和缺點就不一一概述 。雖然先來先服務演算法很少用作主要的排程演算法**,尤其是不能再分時和實時系統中作為主要演算法**,但是還是可以集合其他排程演算法使用。例如在使用優先順序作為排程的系統中, 往往對許多具有相同優先順序的程序使用先來先服務的原則。
    在這裡插入圖片描述

  2. 優先順序排程演算法:
    按照程序的優先順序大小來排程 , 使得優先順序高的程序優先得到處理及的排程稱為優先順序排程演算法。建立優先順序可以由系統按一定原則賦予,也可以作業系統外部安排,也可以使用者支付購買優先順序。
    但是在許多優先順序排程系統中,往往是動態優先順序。一個程序的優先順序不是固定的。往往隨著許多因素變化而變化尤其是隨著程序的等待時間。已使用的處理機時間或其他資源使用情況而定。

優先順序演算法又可以分為下面兩種。

  • 非剝奪的優先順序排程演算法。 一旦佔用就一直執行下次,知道自身推出。
    在這裡插入圖片描述
  • 可剝奪的優先順序排程演算法。任何時候都是最高優先順序程序執行 , 一旦出現比當前優先順序高的程序優先執行該程序。==在unix
  • 在這裡插入圖片描述
    系統中就是 可剝奪的優先順序排程演算法 每個程序的優先順序都是動態的,由系統每隔一段時間計算一次優先順序。==
  1. 時間片輪轉演算法 : 採用該演算法的系統其程序就緒佇列按照先來先服務排程原則,但是佔用處理機只要一個時間片,在完成一個時間片後如果還沒有完成就必須釋放給下一個就緒的程序,而被剝奪的程序排到隊尾 此演算法最核心的便是時間片 具體可以參考時間片輪轉演算法 ‘多級反饋佇列排程演算法’.
    在這裡插入圖片描述

    在這裡插入圖片描述
  2. 短程序優先排程演算法(spf) short p first 短程序優先是從就緒佇列中選擇那些所需執行時間最短的程序進入主存執行,是一個非剝奪演算法雖然減少了就緒佇列的等待程序數單數也降低了平均等待時間,這是一個不公平的演算法尤其是對於需要時間較長的程序 。可能導致餓死狀態並且相對於先來先服務演算法而言,短程序優先需要事先正確的瞭解每一個程序將執行多少時間。而這個只能估計因此不適用於分時系統。在這裡插入圖片描述
  3. 最短剩餘時間優先排程演算法 : 這是將短程序優先演算法用於分時環境的變型。其基本思想是:‘讓程序雲心到完成時所需執行時間最短’的程序優先得到處理,且此演算法執行剝奪。優點是:可以用於分時系統,保證及時響應使用者要求,缺點,開銷大。毫無疑問,這個演算法使程序一進入系統就立即得到服務,從而降低程序的平均等待時間
  4. 最高響應比優先排程演算法 : Hasen爭對短程序優先排程的缺點提出了這個演算法。這是一個可剝奪的演算法,按照此演算法每個程序都有一個優先順序,== 優先順序 = (等待時間+要求服務的時間)/要求服務的時間 ==稱為響應比。
  5. 在這裡插入圖片描述