先來先服務(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è)或者長進程有利,而且效率比較低,特別是當一個進程需要多次請求I/O的時候,會對后面排隊的進程造成很大的影響。
FCFS
短作業(yè)優(yōu)先(SJF)調(diào)度算法
雖然它叫短作業(yè)優(yōu)先算法,但它同樣適用于進程調(diào)度。而且,從名字上來看,這個調(diào)度算法是為短作業(yè)量身定做的,當進行作業(yè)調(diào)度的時候,該調(diào)度算法選擇一個估計運行時間最短的作業(yè)進入內(nèi)存,當進行進程調(diào)度的時候,該算法從就緒隊列里面,挑一個估計運行時間最短的進程,并將處理機分配給它。
當然,這個名字我們也可以看出,這個算法,對長作業(yè)是很不利的,當我們的就緒隊列里面有很多短作業(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),我也會先運行完當前的進程
剝奪式優(yōu)先級調(diào)度算法:它的就相反,當有個更高優(yōu)先級的進程出現(xiàn),就暫停當前運行的進程。
\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)比計算公式
可以看到當?shù)却龝r間都相同的時候,我們的要求服務(wù)時間越短,我們的響應(yīng)比越高,這個時候,就有點像我們的短作業(yè)優(yōu)先調(diào)度算法。
當要求服務(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í)行,但是每次每個運行的進程僅僅只能運行一個時間片,當時間片完了后,當前進程釋放處理機,如果說當前進程沒有完成的話,那么這個進程就會到等待隊列的末尾,繼續(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)先級最高隊列中各進程運行,僅當?shù)谝魂犃锌臻e時才調(diào)度第二隊列進程執(zhí)行。若優(yōu)先級低隊列執(zhí)行中有優(yōu)先級高隊列進程執(zhí)行,應(yīng)立刻將此進程放入隊列末尾,把處理機分配給新到高優(yōu)先級進程。
多級反饋隊列調(diào)度算法