操做系統中進程調度算法

    調度算法是指根據系統的資源分配策略所規定的資源分配算法。算法

    調度算法要達到的目標:併發

(1)公平性考量: 讓每一個進程儘可能平均的佔用CPU;ide

(2)效率考量: 儘可能增大CPU的吞吐率,讓CPU在全部時間基本上處於忙碌狀態;性能

(3)響應時間考量: 讓交互用戶之間的響應時間達到最小;spa

(4)迴轉(TurnAround): 讓批處理用戶等待輸出的時間儘量的小;操作系統

(5)吞吐率(ThroughPut): 讓一段時間內CPU儘量多的處理任務;orm

  但在實際狀況下基本上沒法同時知足上述幾個條件,所作的只能在其中尋找平衡。進程調度中經常遇到的狀況是,每一個進程都有不一樣的特色,要想調和這些進程之間的矛盾糾葛,併發揮最大的效益,就要進行管理,而在計算機世界中這個管理者就是操做系統。如下介紹幾中調度算法。隊列

    經常使用調度算法:進程

1、先來先服務和短做業(進程)優先調度算法
    1. 先來先服務調度算法。先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於做業調度, 也可用於進程調度。FCFS算法比較有利於長做業(進程),而不利於短做業(進程)。由此可知,本算法適合於CPU繁忙型做業, 而不利於I/O繁忙型的做業(進程)。
    2. 短做業(進程)優先調度算法。短做業(進程)優先調度算法(SJ/PF)是指對短做業或短進程優先調度的算法,該算法既可用於做業調度, 也可用於進程調度。但其對長做業不利;不能保證緊迫性做業(進程)被及時處理;做業的長短只是被估算出來的。

2、高優先權優先調度算法
    1. 優先權調度算法的類型。爲了照顧緊迫性做業,使之進入系統後便得到優先處理,引入了最高優先權優先(FPF)調度算法。 此算法常被用在批處理系統中,做爲做業調度算法,也做爲多種操做系統中的進程調度,還能夠用於實時系統中。當其用於做業調度, 將後備隊列中若干個優先權最高的做業裝入內存。當其用於進程調度時,把處理機分配給就緒隊列中優先權最高的進程,此時, 又能夠進一步把該算法分紅如下兩種:
    (1)非搶佔式優先權算法
    (2)搶佔式優先權調度算法(高性能計算機操做系統)
事件

    2. 優先權類型 。對於最高優先權優先調度算法,其核心在於:它是使用靜態優先權仍是動態優先權,以及如何肯定進程的優先權。

    3. 高響應比優先調度算法
    爲了彌補短做業優先算法的不足,咱們引入動態優先權,使做業的優先等級隨着等待時間的增長而以速率a提升。 該優先權變化規律可描述爲:優先權=(等待時間+要求服務時間)/要求服務時間;即 =(響應時間)/要求服務時間。

3、基於時間片的輪轉調度算法
    1. 時間片輪轉法。時間片輪轉法通常用於進程調度,每次調度,把CPU分配隊首進程,並令其執行一個時間片。 當執行的時間片用完時,由一個記時器發出一個時鐘中斷請求,該進程被中止,並被送往就緒隊列末尾;依次循環。
  

    2. 多級反饋隊列調度算法。多級反饋隊列調度算法多級反饋隊列調度算法,沒必要事先知道各類進程所須要執行的時間,它是目前被公認的一種較好的進程調度算法。 其實施過程以下:
   1) 設置多個就緒隊列,併爲各個隊列賦予不一樣的優先級。在優先權越高的隊列中, 爲每一個進程所規定的執行時間片就越小。
   2) 當一個新進程進入內存後,首先放入第一隊列的末尾,按FCFS原則排隊等候調度。 若是他能在一個時間片中完成,即可撤離;若是未完成,就轉入第二隊列的末尾,在一樣等待調度…… 如此下去,當一個長做業(進程)從第一隊列依次將到第n隊列(最後隊列)後,便按第n隊列時間片輪轉運行。
   3) 僅當第一隊列空閒時,調度程序才調度第二隊列中的進程運行;僅當第1到第(i-1)隊列空時, 纔會調度第i隊列中的進程運行,並執行相應的時間片輪轉。
   4) 若是處理機正在處理第i隊列中某進程,又有新進程進入優先權較高的隊列, 則此新隊列搶佔正在運行的處理機,並把正在運行的進程放在第i隊列的隊尾。

       前面介紹的各類用做進程調度的算法都有必定的侷限性。如短進程優先的調度算法,僅照顧了短進程而忽略了長進程,並且若是並未指明進程的長度,則短進程優先和基於進程長度的搶佔式調度算法都將沒法使用。而多級反饋隊列調度算法則沒必要事先知道各類進程所需的執行時間,並且還能夠知足各類類型進程的須要,於是它是目前被公認的一種較好的進程調度算法。前面介紹的各類用做進程調度的算法都有必定的侷限性。如短進程優先的調度算法,僅照顧了短進程而忽略了長進程,並且若是並未指明進程的長度,則短進程優先和基於進程長度的搶佔式調度算法都將沒法使用。而多級反饋隊列調度算法則沒必要事先知道各類進程所需的執行時間,並且還能夠知足各類類型進程的須要,於是它是目前被公認的一種較好的進程調度算法。


    其餘調度算法:

1、 有保證的調度算法:

    在一個單用戶操做系統中,有n個進程在運行,那麼每一個進程只能得到CPU處理能力的1/n; 

   爲了進行這個保證,系統必須記錄每一個進程建立開始到如今使用CPU的時間數量Th,每一個進程被保證的佔用CPU的時間總數T。那麼Th/T就是當前進程佔用其保證時間的比例,選取當前比例最小的進程執行。

 

2、 Lottery Scheduling(×××調度):

  原理是爲系統中的進程發放×××,中獎後的獎勵就是某種系統資源,好比CPU時間,當調度程序運行的時候,某張×××被隨機選擇爲中獎,持有該×××的用戶佔用該種資源。某些更加劇要的進程會被給予更多的×××以增長其得到調度的機率。形式化的說法是: 當一個進程佔用×××總數的f(0<=f<=1)時,那麼進程久得到相應比例的CPU執行時間。

  ×××調度的一個有趣的原理是: 協做進程之間能夠互相贈與×××。


3、 實時調度:

   在許多場合下,獲得一個延遲的答案和獲得一個錯誤的答案的效果是同樣的,由於在這些場合中時間處於一個至關重要的位置。

    實時調度系統又分爲硬實時和軟實時,硬實時系統表示每一個進程都必須在截止時間以前執行完畢。軟實時指的是超過這個截止時間也是被允許的,這個截止時間只是一個標準,一個進程最好在這個截止時間以前完成,但沒有完成也不會出現什麼問題。

  週期性實時調度系統:

    假設系統中有m個週期性的時間,那麼就有m個週期性的進程來處理這m個事件,假設每一個事件i的週期是Pi,CPU的處理時間是Ci,那麼只有知足下面的條件時這個事件流纔會被處理:

                                       Ci / Pi 總和  < 1

相關文章
相關標籤/搜索