操作系统CPU调度算法
前言
什么是調(diào)度算法
在操作系統(tǒng)中調(diào)度是指一種資源分配的過程,因而調(diào)度算法是指:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。對于不同的的系統(tǒng)和系統(tǒng)目標(biāo),通常采用不同的調(diào)度算法
為什么需要調(diào)度算法
計算機(jī)系統(tǒng)中的CPU資源非常寶貴,為了充分利用其資源,讓多線程或者多進(jìn)程系統(tǒng)能夠多快好省地完成我們讓它做的各種任務(wù),就需要指定一定的規(guī)則去使用CPU。為此,可在內(nèi)存中可存放數(shù)目遠(yuǎn)大于計算機(jī)系統(tǒng)內(nèi)CPU個數(shù)的進(jìn)程,讓這些進(jìn)程在操作系統(tǒng)的進(jìn)程調(diào)度器的調(diào)度下,能夠讓進(jìn)程高效(高的吞吐量–throughput)、及時(低延遲–latency)、公平(fairness)地使用CPU。為此調(diào)度器可設(shè)計不同的調(diào)度算法來選擇進(jìn)程,這體現(xiàn)了進(jìn)程調(diào)度的策略,同時還需并進(jìn)一步通過進(jìn)程的上下文切換(context switch)來完成進(jìn)程切換,這體現(xiàn)了進(jìn)程調(diào)度的機(jī)制。
我們需要何時調(diào)度(調(diào)度的時機(jī))、是否能夠在內(nèi)核執(zhí)行的任意位置進(jìn)行調(diào)度(調(diào)度的方式)、如果完成進(jìn)程切換(上下文切換)、如果選擇“合適”的進(jìn)程執(zhí)行(調(diào)度策略/調(diào)度算法)、如果評價選擇的合理性(進(jìn)程調(diào)度的指標(biāo))。
調(diào)度算法要達(dá)成的目標(biāo)
調(diào)度算法的類別
主要分為以下幾類:
- 先來先服務(wù)調(diào)度算法
- 短進(jìn)程優(yōu)先調(diào)度算法
- 優(yōu)先權(quán)調(diào)度算法
- 時間片輪轉(zhuǎn)調(diào)度算法
- 多級隊列調(diào)度**、**多級反饋隊列調(diào)度
進(jìn)程調(diào)度的原理
這里需要注意,存在兩種進(jìn)程搶占處理器的調(diào)度方式:
-
可搶占式(可剝奪式,preemptive):就緒隊列中一旦有某進(jìn)程的優(yōu)先級高于當(dāng)前正在執(zhí)行的進(jìn)程的優(yōu)先級時,操作系統(tǒng)便立即進(jìn)行進(jìn)程調(diào)度,完成進(jìn)程切換。
-
不可搶占式(不可剝奪式non_preemptive):即使在就緒隊列存在有某進(jìn)程優(yōu)先級高于當(dāng)前正在執(zhí)行的進(jìn)程的優(yōu)先級時,當(dāng)前進(jìn)程仍將占用處理機(jī)執(zhí)行,直到該進(jìn)程自己進(jìn)入阻塞狀態(tài),或時間片用完,或在執(zhí)行完系統(tǒng)調(diào)用后準(zhǔn)備返回用戶進(jìn)程前的時刻,才重新發(fā)生調(diào)度讓出處理機(jī)。
常見的調(diào)度算法
FCFS 先來先服務(wù)優(yōu)先調(diào)度算法(FCFS, First Come First Serve)
先來先服務(wù)(FCFS)調(diào)度算法是一種最簡單的調(diào)度算法,該算法既可用于作業(yè)調(diào)度,
也可用于進(jìn)程調(diào)度。FCFS算法比較有利于長作業(yè)(進(jìn)程),而不利于短作業(yè)(進(jìn)程)。由此可知,本算法適合于CPU繁忙型作業(yè),
而不利于I/O繁忙型的作業(yè)(進(jìn)程)。這里和python的全局解釋器進(jìn)程鎖的用法一樣,適合I/O密集型。
短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法(SJF, Shortest Job First)
短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法是指對短作業(yè)或短進(jìn)程優(yōu)先調(diào)度的算法,該算法既可用于作業(yè)調(diào)度,
也可用于進(jìn)程調(diào)度。但其對長作業(yè)不利;不能保證緊迫性作業(yè)(進(jìn)程)被及時處理;作業(yè)的長短只是被估算出來的。
最高優(yōu)先權(quán)調(diào)度算法(Priority Scheduling)
為了照顧緊迫性作業(yè),使之進(jìn)入系統(tǒng)后便獲得優(yōu)先處理,引入了最高優(yōu)先權(quán)優(yōu)先(FPF)調(diào)度算法。
此算法常被用在批處理系統(tǒng)中,作為作業(yè)調(diào)度算法,也作為多種操作系統(tǒng)中的進(jìn)程調(diào)度,還可以用于實(shí)時系統(tǒng)中。當(dāng)其用于作業(yè)調(diào)度,
將后備隊列中若干個優(yōu)先權(quán)最高的作業(yè)裝入內(nèi)存。當(dāng)其用于進(jìn)程調(diào)度時,把處理機(jī)分配給就緒隊列中優(yōu)先權(quán)最高的進(jìn)程,此時, 又可以進(jìn)一步把該算法分成以下兩種:
(1)非搶占式優(yōu)先權(quán)算法;
(2)搶占式優(yōu)先權(quán)調(diào)度算法(高性能計算機(jī)操作系統(tǒng));
對于最高優(yōu)先權(quán)優(yōu)先調(diào)度算法,其核心在于:它是使用靜態(tài)優(yōu)先權(quán)還是動態(tài)優(yōu)先權(quán), 以及如何確定進(jìn)程的優(yōu)先權(quán)。
動態(tài)優(yōu)先權(quán):高響應(yīng)比優(yōu)先調(diào)度算法為了彌補(bǔ)短作業(yè)優(yōu)先算法的不足,我們引入動態(tài)優(yōu)先權(quán),使作業(yè)的優(yōu)先等級隨著等待時間的增加而以速率a提高。
該優(yōu)先權(quán)變化規(guī)律可描述為:優(yōu)先權(quán)=(等待時間+要求服務(wù)時間)/要求服務(wù)時間;即 =(響應(yīng)時間)/要求服務(wù)時間。
時間片輪轉(zhuǎn)法(RR, Round Robin)
時間片輪轉(zhuǎn)法一般用于進(jìn)程調(diào)度,每次調(diào)度,把CPU分配隊首進(jìn)程,并令其執(zhí)行一個時間片。
當(dāng)執(zhí)行的時間片用完時,由一個記時器發(fā)出一個時鐘中斷請求,該進(jìn)程被停止,并被送往就緒隊列末尾;依次循環(huán)。
多級反饋隊列調(diào)度算法(multilevel feedback queue scheduling)
多級反饋隊列調(diào)度算法,不必事先知道各種進(jìn)程所需要執(zhí)行的時間,它是目前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法。 其實(shí)施過程如下:
如果他能在一個時間片中完成,便可撤離;如果未完成,就轉(zhuǎn)入第二隊列的末尾,再同樣等待調(diào)度……
如此下去,當(dāng)一個長作業(yè)(進(jìn)程)從第一隊列依次將到第n隊列(最后隊列)后,便按第n隊列時間片輪轉(zhuǎn)運(yùn)行。
才會調(diào)度第i隊列中的進(jìn)程運(yùn)行,并執(zhí)行相應(yīng)的時間片輪轉(zhuǎn)。
則此新隊列搶占正在運(yùn)行的處理機(jī),并把正在運(yùn)行的進(jìn)程放在第i隊列的隊尾。
總結(jié)
以上是生活随笔為你收集整理的操作系统CPU调度算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: owlBus 的uwp版本上架了
- 下一篇: java信息管理系统总结_java实现科