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

