網(wǎng)絡工程師第一章輔導:進程調度算法綜述

字號:

調度也稱dispatcher 這是內核的主要職責之一就是決定該輪到哪個任務運行了多數(shù)實時內核是基于優(yōu)先級調度算法的每個任務根據(jù)其重要程度的不同被賦予一定的優(yōu)先級基于優(yōu)先級的調度法指CPU 總是讓處在就緒態(tài)的優(yōu)先級的任務先運行然而究竟何時讓高優(yōu)先級任務掌握CPU 的使用權有兩種不同的情況這要看用的是什么類型的內核是非占先式還是占先式的內核一個良好的任務調度算法應該主要體現(xiàn)在以下幾個方面
    公平保證每個進程得到合理的CPU 時間
    高效使CPU 保持忙碌狀態(tài)即總是有進程在CPU 上運行
    響應時間使交互用戶的響應時間盡可能短
    周轉時間使批處理用戶等待輸出的時間盡可能短
    吞吐量使單位時間內處理的進程盡可能多
    很顯然在任何操作系統(tǒng)中這幾個目標不可能同時達到所以不同的
    操作系統(tǒng)會在這幾個方面中做出相應的取舍從而確定自己的調度算法,常用的處理機調度算法有:
    先來先服務FCFS
    短作業(yè)優(yōu)先SJF
    優(yōu)先級
    時間片輪轉法
    多級隊列法
    多級反饋隊列法
    先來先服務:FCFS 是最簡單的CPU 調度算法,即按進程到來的先后次序進行調度,這樣在系統(tǒng)中等待時間最長的進程被優(yōu)先調度,而不管其所需運行時間的長短。
    作業(yè)優(yōu)先SJF 算法是指當CPU 可供使用時SJF 算法把CPU 分給需要運行時間最短的進程。
    多級隊列調度算法:把就緒隊列劃分成幾個單獨的隊列一般根據(jù)進程的某些特性如內存大小和進程類型永久性地把各個進程分別鏈入其中某一個隊列中,每個隊列都有自己的調度算法,此外在各個隊列之間也要進行調度。通常采用固定優(yōu)先級的搶占式調度,例如某系統(tǒng)中有5 個隊列,各個隊列的優(yōu)先級自上而下降低,只有當前3 個隊列中都為空的時候隊列4 中的進程才可以運行,而當隊列4 中的進程在運行時,如果隊列1 中進入了一個就緒進程,則隊列4 中的進程要立刻讓出CPU 使用權。多級反饋隊列法允許進程在各隊列間移動,其基本思想是把具有不同CPU工作時間這一特性的進程區(qū)分開來,如果一個進程要使用很長的CPU 時間,則應把它移至較低級的隊列中,這種方式把I/O 繁忙型和交互式進程放在較高優(yōu)先級的隊列中同樣在低優(yōu)先級隊列中長時間等待的進程可以移到較高優(yōu)先級隊列中UNIX 系統(tǒng)采用的是多級反饋隊列輪轉法。
    時間片輪轉調度法:round-robin scheduling
    當兩個或兩個以上任務有同樣優(yōu)先級,內核允許一個任務運行事先確定的一段時間叫做時間額度quantum ,然后切換給另一個任務也叫做時間片調度time slicing ,內核在滿足以下條件時把CPU 控制權交給下一個任務就緒態(tài)的任務, 當前任務已無事可做,當前任務在時間片還沒結束時已經(jīng)完成了。輪轉法主要是為分時系統(tǒng)設計的,其中時間片是一個重要的參數(shù)不能取的過大或過小,通常為10 至100ms 數(shù)量級,就緒隊列可以看成是一個環(huán)形隊列,CPU 調度程序輪流地把CPU 分給就緒隊列中地每個進程,時間長度為一個時間片Linux 操作系統(tǒng)就是采用時間片輪轉的調度算法。