先來先服務(wù)(FCFS)調(diào)度算法
短作業(yè)優(yōu)先(SJF)調(diào)度算法
優(yōu)先級調(diào)度算法
高響應(yīng)比優(yōu)先調(diào)度算法
時間片輪轉(zhuǎn)調(diào)度算法
多級反饋隊列調(diào)度算法(集合了前幾種算法的優(yōu)點)
先來先服務(wù)(FCFS)調(diào)度算法
這個算法是操作系統(tǒng)中最簡單的調(diào)度算法捆探,顧名思義,就是誰先來誰先用處理機辞嗡,就和我們食堂排隊打飯一樣∠哿疲可以看的出來糜颠,這種算法是講究公平的,不管你是什么進程瑞凑,都得按照先來后到的順序來用處理機会喝。它適用于進程調(diào)度和作業(yè)調(diào)度陡叠。
雖然說這個算法體現(xiàn)了公平性玩郊,但是萬一先到達的進程或者是作業(yè)需要的用時很長,那么就會使得后面的作業(yè)或進程(特別是后面的作業(yè)是短作業(yè)或短進程的時候)等待很久枉阵,這樣就會大大的降低處理機調(diào)度以及處理機運行的效率译红。
所以說,這個算法雖然簡單并且公平兴溜,但是總體來講侦厚,對長作業(yè)或者長進程有利,而且效率比較低拙徽,特別是當(dāng)一個進程需要多次請求I/O的時候刨沦,會對后面排隊的進程造成很大的影響。
FCFS
短作業(yè)優(yōu)先(SJF)調(diào)度算法
雖然它叫短作業(yè)優(yōu)先算法斋攀,但它同樣適用于進程調(diào)度已卷。而且,從名字上來看淳蔼,這個調(diào)度算法是為短作業(yè)量身定做的,當(dāng)進行作業(yè)調(diào)度的時候裁眯,該調(diào)度算法選擇一個估計運行時間最短的作業(yè)進入內(nèi)存鹉梨,當(dāng)進行進程調(diào)度的時候,該算法從就緒隊列里面穿稳,挑一個估計運行時間最短的進程存皂,并將處理機分配給它。
當(dāng)然逢艘,這個名字我們也可以看出旦袋,這個算法,對長作業(yè)是很不利的它改,當(dāng)我們的就緒隊列里面有很多短作業(yè)的時候疤孕,我們的長作業(yè)就會很長時間都得不到調(diào)度(俗稱饑餓現(xiàn)象),同時不知道大家注意到?jīng)]有央拖,短不等于重要祭阀,如果說重要的作業(yè)正是那些長作業(yè),那么我們這個調(diào)度算法也就沒有那么重要了鲜戒。最后一點专控,就是我上面所說的,是估計運行時間遏餐,這個估計其實是用戶提供的估計時間伦腐,實際的運行時間,其實大家都不知道失都,所以說其實這個算法也不能真的保證可以實現(xiàn)短作業(yè)優(yōu)先柏蘑。
SJF
優(yōu)先級調(diào)度算法
在上一個算法中颖系,我提到重要性這一個詞,我們肯定是希望我們的處理機優(yōu)先處理比較重要的事情辩越,就像我們的人一樣嘁扼,肯定先處理重要的事情。
所以我們就有了優(yōu)先級調(diào)度的算法黔攒,這個算法可以優(yōu)先調(diào)度重要的進程或者作業(yè)趁啸。
如果說我們更仔細的考慮的話,我們可以將這個調(diào)度算法更細化督惰。
\1. 如果說考慮高優(yōu)先級能否搶占正在運行的進程不傅,我們可以將調(diào)度算法分為:
非剝奪式優(yōu)先級調(diào)度算法:它的思想就是,就算有個更高優(yōu)先級的進程出現(xiàn)赏胚,我也會先運行完當(dāng)前的進程
剝奪式優(yōu)先級調(diào)度算法:它的就相反访娶,當(dāng)有個更高優(yōu)先級的進程出現(xiàn),就暫停當(dāng)前運行的進程觉阅。
\2. 如果說根據(jù)進程創(chuàng)建后進程的優(yōu)先級是否可以改變崖疤,可以將優(yōu)先級分為兩種:
靜態(tài)優(yōu)先級: 優(yōu)先級在創(chuàng)建進程的時候就確定了,直到進程結(jié)束典勇,這個優(yōu)先級都不會改變
動態(tài)優(yōu)先級: 在進程運行的過程中劫哼,根據(jù)進程運行的情況來調(diào)整優(yōu)先級,比如說某個進程等待了很久割笙,就可以考慮把這個進程的優(yōu)先級調(diào)高权烧,也可以根據(jù)進程占有cpu時間的長短,等待cpu的長短等伤溉。
一般來說般码,我們設(shè)置優(yōu)先級可以根據(jù)以下原則:
(1)系統(tǒng)進程高于用戶進程。
(2)交互型進程高于非交互型進程乱顾,因為交互型進程需要被快速的響應(yīng)板祝,比如說我們的游戲。
(3)I/O型進程高于計算型進程糯耍,因為I/O設(shè)備的處理速度比cpu慢的多扔字,所以說我們?nèi)绻孖/O設(shè)備盡快開始工作,我們的系統(tǒng)的運行效率會大大提高温技。
優(yōu)先級調(diào)度算法
真題試做
某系統(tǒng)正在執(zhí)行三個進程P1革为,P2,和P3舵鳞,各個進程的計算(CPU)時間和I/O時間比例如下表所示震檩。
[圖片上傳失敗...(image-32af6-1664535201668)]
為了提高系統(tǒng)資源利用率,合理的進程優(yōu)先級設(shè)置應(yīng)該為()
A. P1>P2>P3
B. P3>P2>P1
C. P2>P1=P3
D. P1>P2=P3
解析:根據(jù)進程優(yōu)先級設(shè)置的規(guī)則,I/O型進程的優(yōu)先級大于計算型進程抛虏,所以博其,正確的優(yōu)先級設(shè)置應(yīng)為P3>P2>P1,所以選B迂猴。
高響應(yīng)比優(yōu)先調(diào)度算法
這個調(diào)度算法慕淡,只用于作業(yè)調(diào)度,它考慮了每個作業(yè)的等待時間和估計的運行時間沸毁,構(gòu)成我們的相應(yīng)比峰髓。響應(yīng)比如下:
響應(yīng)比計算公式
可以看到當(dāng)?shù)却龝r間都相同的時候,我們的要求服務(wù)時間越短息尺,我們的響應(yīng)比越高携兵,這個時候,就有點像我們的短作業(yè)優(yōu)先調(diào)度算法搂誉。
當(dāng)要求服務(wù)的時間都相同的時候徐紧,等待時間越長,那我們的響應(yīng)比就越高炭懊,此時就像我們的先來先服務(wù)算法一樣并级。
同時,可以注意到的是凛虽,如果說我們某個作業(yè)的等待時間很長(長作業(yè))死遭,那么這個作業(yè)的響應(yīng)比就會提高,也就說凯旋,不會出現(xiàn)長作業(yè)饑餓的現(xiàn)象。
所以才有人說钉迷,高相應(yīng)比優(yōu)先調(diào)度算法是先來先服務(wù)和短作業(yè)優(yōu)先兩種算法的融合。
高響應(yīng)比優(yōu)先調(diào)度算法
時間片輪轉(zhuǎn)調(diào)度算法
這個算法是在之前介紹分時系統(tǒng)的時候提到過。
簡單的介紹一下這個算法的流程:進程按照到達時間進行排隊魂毁,然后調(diào)度程序每次都選隊列的第一個進程執(zhí)行声旺,但是每次每個運行的進程僅僅只能運行一個時間片,當(dāng)時間片完了后舰蟆,當(dāng)前進程釋放處理機趣惠,如果說當(dāng)前進程沒有完成的話,那么這個進程就會到等待隊列的末尾身害,繼續(xù)等待下一次時間片
可以看到的是味悄,時間片的大小對我們的系統(tǒng)性能影響很大。如果時間片足夠大到恰好所有進程都可以在一個時間片內(nèi)執(zhí)行完塌鸯,那么這個算法就和我們之前說的先來先服務(wù)調(diào)度算法沒有什么區(qū)別了侍瑟。
如果說時間片很小,那么處理機就會頻繁的在進程之間切換。這樣真正留給進程運行的時間就會變少涨颜。
但時間片的長度也不是固定的费韭,通常我們都是按照:系統(tǒng)響應(yīng)時間,就緒隊列中的進程數(shù)庭瑰,系統(tǒng)的處理能力這幾個因素來確定時間片的大小星持。
時間片輪轉(zhuǎn)調(diào)度算法
多級反饋隊列調(diào)度算法
這個算法相比與之前的算法,就比較高級了弹灭,它綜合了時間片輪轉(zhuǎn)調(diào)度算法和優(yōu)先級調(diào)度算法督暂,可以達到動態(tài)調(diào)整進程優(yōu)先級和時間片大小的目的。
多級反饋隊列調(diào)度算法
它的調(diào)度機制如下:
(1)設(shè)置多個就緒隊列鲤屡。在系統(tǒng)中設(shè)置多個就緒隊列损痰,并為每個隊列賦予不同的優(yōu)先級,從第一個開始逐個降低酒来。
(2)不同隊列進程中所賦予的執(zhí)行時間也不同卢未,優(yōu)先級越高,時間片越小堰汉。
(3)每個隊列都采用FCFS(先來先服務(wù))算法辽社。輪到該進程執(zhí)行時,若在該時間片內(nèi)完成翘鸭,便撤離操作系統(tǒng)滴铅,否則調(diào)度程序?qū)⑵滢D(zhuǎn)入第二隊列的末尾等待調(diào)度,.......就乓。若進程最后被調(diào)到第N隊列中時汉匙,便采用時間輪轉(zhuǎn)片方式運行。
按隊列優(yōu)先級調(diào)度生蚁。調(diào)度按照優(yōu)先級最高隊列中各進程運行噩翠,僅當(dāng)?shù)谝魂犃锌臻e時才調(diào)度第二隊列進程執(zhí)行。若優(yōu)先級低隊列執(zhí)行中有優(yōu)先級高隊列進程執(zhí)行邦投,應(yīng)立刻將此進程放入隊列末尾伤锚,把處理機分配給新到高優(yōu)先級進程。
多級反饋隊列調(diào)度算法