(一)
調(diào)度器:
觸發(fā)調(diào)度(輪轉(zhuǎn)):
① 非搶占式調(diào)度:進程自己發(fā)起
② 搶占式調(diào)度:操作系統(tǒng)內(nèi)核引起昏名。容易引起系統(tǒng)的不一致性,要考慮鎖、信號量息罗,但會改善系統(tǒng)的響應能力。
選擇獲得處理器的下一個進程 --才沧。 進程切換(保護老進程現(xiàn)場迈喉、恢復新進程運行) -->回收處理器資源
系統(tǒng)獲得CPU控制權(quán)(CPU再次運行系統(tǒng)內(nèi)核):
進程切換 --> 處理器現(xiàn)場的切換
將處理器當前現(xiàn)場保存在前一個進程的PCB中的context中。需要保存的大致是任務狀態(tài)段TSS温圆。
(二)挨摸、進程選擇算法
評價標準:公平性;策略強制執(zhí)行岁歉;均衡得运;響應時間、延遲锅移;滿意度(降低等待時間)熔掺;吞吐量、帶寬非剃;周轉(zhuǎn)時間
1置逻、批處理系統(tǒng)調(diào)度算法
(1)先來先服務(FCFS)
(2)短進程優(yōu)先(SPN)
平均等待時間最短、周轉(zhuǎn)時間最短备绽,但可能餓死長進程券坞。
(3)最短剩余時間優(yōu)先(SRTN)
SPN算法的搶占版本。當有進程就緒時疯坤,將他的下一次運行時間與當前進程的剩余時間报慕,如果小,就搶占當前進程压怠。
2眠冈、交互系統(tǒng)調(diào)度算法
(1)輪轉(zhuǎn)法(RR)
加了時間片限制的先入先出FCFS算法。
(2)可變時間片輪轉(zhuǎn)法
(3)優(yōu)先級
可能餓死優(yōu)先級低的進程:
(4)多級隊列法
不同種類的進程應有不同的優(yōu)先級和時間片菌瘫。根據(jù)實際情況將進程分組蜗顽,提供幾個就緒隊列,每個隊列有自己獨立的調(diào)度算法雨让,根據(jù)進程特性把進程鏈入某一隊列雇盖,隊列間可采用其他調(diào)度算法。
Linux用了140多個隊列栖忠,用了一個位圖崔挖,每位一個隊列贸街。
(5)多級反饋隊列法
(6)彩票調(diào)度法
優(yōu)先級算法的變形。
(7)公平分享法
每個用戶擁有的進程數(shù)不一樣狸相。
3薛匪、實時系統(tǒng)調(diào)度算法
實時系統(tǒng)是一種時間起主導作用的系統(tǒng)。
實時分為硬實時和軟實時脓鹃。硬實時有死線限制逸尖,軟實時可容忍偶爾的失誤。
(三)瘸右、進程調(diào)度-Ucore實現(xiàn)(略寫)
1娇跟、FCFS調(diào)度器
2、進程切換
如果選中的下一個進程不是當前進程太颤,則要進行進程切換苞俘,由函數(shù)proc_run完成。
這個過程:進程創(chuàng)建 --栋齿。 設堆棧 --> 設context --》 就緒態(tài) --> 插入隊列
查找時找到他 --> 調(diào)度第一次運行
3苗胀、調(diào)度器框架(略,詳見ppt)
(1)調(diào)度器類
進程管理的接口函數(shù):①入隊操作瓦堵;②出隊操作基协;③選出操作;④更新操作
(2)喚醒 --> 就緒狀態(tài)菇用,僵死的喚不醒澜驮。
(3)RR調(diào)度器
RR輪轉(zhuǎn)法——加了時間片的FCFS算法
(4)Stride調(diào)度算法
Stride調(diào)度算法是對彩票調(diào)度算法的改進。
左偏樹: