分時(shí)操作系統(tǒng)調(diào)度算法
分時(shí)操作系統(tǒng)采用時(shí)間片輪轉(zhuǎn)的方式為用戶(hù)提供服務(wù),那么你了解什么是時(shí)間片輪轉(zhuǎn)調(diào)度嗎?下面由學(xué)習(xí)啦小編為大家整理了分時(shí)操作系統(tǒng)的調(diào)度算法的相關(guān)知識(shí),希望對(duì)大家有幫助!
分時(shí)操作系統(tǒng)的調(diào)度算法詳解
時(shí)間片的概念,可以用來(lái)部分解釋本書(shū)開(kāi)始時(shí)的一句話(huà):"在數(shù)據(jù)傳輸領(lǐng)域,你親眼看見(jiàn)的,都不是真的"。在宏觀上:我們可以同時(shí)打開(kāi)多個(gè)應(yīng)用程序,每個(gè)程序并行不悖,同時(shí)運(yùn)行。但是在微觀上:由于只有一個(gè)CPU,一次只能處理程序要求的一部分,如何處理公平,一種方法就是引入時(shí)間片,每個(gè)程序輪流執(zhí)行。
概念的引入
說(shuō)到并行計(jì)算,尤其是單臺(tái)計(jì)算機(jī)的并行計(jì)算,一定要先建立時(shí)間片的概念。我們現(xiàn)在所用的,不管是Windows還是Linux,一般都稱(chēng)為多任務(wù)操作系統(tǒng),即,系統(tǒng)允許并行運(yùn)行多個(gè)應(yīng)用程序。操作系統(tǒng)一般是按照一定策略,定期給每個(gè)活動(dòng)的進(jìn)程執(zhí)行其內(nèi)部程序的機(jī)會(huì),并且每次只執(zhí)行一小段時(shí)間,然后操作系統(tǒng)利用中斷強(qiáng)行退出執(zhí)行,將當(dāng)前程序信息壓棧,然后開(kāi)始執(zhí)行下一個(gè)進(jìn)程的一小段程序。通過(guò)這樣不斷快速的循環(huán)切換,每個(gè)程序都獲得執(zhí)行,在用戶(hù)看來(lái),感覺(jué)到很多程序都在平行的執(zhí)行,這就模擬了并行計(jì)算。當(dāng)然,新的多核CPU以及超線(xiàn)程CPU,內(nèi)部就有超過(guò)1個(gè)的CPU執(zhí)行體,運(yùn)行時(shí)就不是模擬了,而是真的有兩個(gè)以上的程序在被執(zhí)行。當(dāng)然在我們程序員看來(lái),只需要理解程序是被操作系統(tǒng)片段執(zhí)行的,每個(gè)片段就是一個(gè)時(shí)間片,就足夠了。既然是片段執(zhí)行,程序員就必須理解,在自己的程序運(yùn)行時(shí)不是獨(dú)一無(wú)二的,我們看似很順暢的工作,其實(shí)是由一個(gè)個(gè)的執(zhí)行片段構(gòu)成的,我們眼中相鄰的兩條語(yǔ)句甚至同一個(gè)語(yǔ)句中兩個(gè)不同的運(yùn)算符之間,都有可能插入其他線(xiàn)程或進(jìn)程的動(dòng)作。
基本概念
時(shí)間片輪轉(zhuǎn)法(Round-Robin,RR)主要用于分時(shí)系統(tǒng)中的進(jìn)程調(diào)度。為了實(shí)現(xiàn)輪轉(zhuǎn)調(diào)度,系統(tǒng)把所有就緒進(jìn)程按先入先出的原則排成一個(gè)隊(duì)列。新來(lái)的進(jìn)程加到就緒隊(duì)列末尾。每當(dāng)執(zhí)行進(jìn)程調(diào)度時(shí),進(jìn)程調(diào)度程序總是選出就緒隊(duì)列的隊(duì)首進(jìn)程,讓它在CPU上運(yùn)行一個(gè)時(shí)間片的時(shí)間。時(shí)間片是一個(gè)小的時(shí)間單位,通常為10~100ms數(shù)量級(jí)。當(dāng)進(jìn)程用完分給它的時(shí)間片后,系統(tǒng)的計(jì)時(shí)器發(fā)出時(shí)鐘中斷,調(diào)度程序便停止該進(jìn)程的運(yùn)行,把它放入就緒隊(duì)列的末尾;然后,把CPU分給就緒隊(duì)列的隊(duì)首進(jìn)程,同樣也讓它運(yùn)行一個(gè)時(shí)間片,如此往復(fù)。[1]
進(jìn)程調(diào)度
采用此算法的系統(tǒng),其程序就緒隊(duì)列往往按進(jìn)程到達(dá)的時(shí)間來(lái)排序。進(jìn)程調(diào)度程序總是選擇就緒隊(duì)列中的第一個(gè)進(jìn)程,也就是說(shuō)按照先來(lái)先服務(wù)原則調(diào)度,但一旦進(jìn)程占用處理機(jī)則僅使用一個(gè)時(shí)間片。在使用先一個(gè)時(shí)間片后,進(jìn)程還沒(méi)有完成其運(yùn)行,它必須釋放出處理機(jī)給下一個(gè)就緒的進(jìn)程,而被搶占的進(jìn)程返回到就緒隊(duì)列的末尾重新排隊(duì)等待再次運(yùn)行。處理器同一個(gè)時(shí)間只能處理一個(gè)任務(wù)。處理器在處理多任務(wù)的時(shí)候,就要看請(qǐng)求的時(shí)間順序,如果時(shí)間一致,就要進(jìn)行預(yù)測(cè)。挑到一個(gè)任務(wù)后,需要若干步驟才能做完,這些步驟中有些需要處理器參與,有些不需要(如磁盤(pán)控制器的存儲(chǔ)過(guò)程)。不需要處理器處理的時(shí)候,這部分時(shí)間就要分配給其他的進(jìn)程。原來(lái)的進(jìn)程就要處于等待的時(shí)間段上。經(jīng)過(guò)周密分配時(shí)間,宏觀上就象是多個(gè)任務(wù)一起運(yùn)行一樣,但微觀上是有先后的,就是時(shí)間片輪換。
分時(shí)操作系統(tǒng)調(diào)度算法的實(shí)現(xiàn)思想
時(shí)間片輪轉(zhuǎn)算法的基本思想是,系統(tǒng)將所有的就緒進(jìn)程按先來(lái)先服務(wù)算法的原則,排成一個(gè)隊(duì)列,每次調(diào)度時(shí),系統(tǒng)把處理機(jī)分配給隊(duì)列首進(jìn)程,并讓其執(zhí)行一個(gè)時(shí)間片。當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)計(jì)時(shí)器發(fā)出時(shí)鐘中斷請(qǐng)求,調(diào)度程序根據(jù)這個(gè)請(qǐng)求停止該進(jìn)程的運(yùn)行,將它送到就緒隊(duì)列的末尾,再把處理機(jī)分給就緒隊(duì)列中新的隊(duì)列首進(jìn)程,同時(shí)讓它也執(zhí)行一個(gè)時(shí)間片。