在操作系統(tǒng)中調(diào)度的是指是一種自遠(yuǎn)方分配,因而調(diào)度算法是指:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。對(duì)于不同的的系統(tǒng)和系統(tǒng)目標(biāo),通常采用不同的調(diào)度算法,例如,在批處理系統(tǒng)中,為了照顧為數(shù)眾多的段作業(yè),應(yīng)采用短作業(yè)優(yōu)先的調(diào)度算法;又如在分時(shí)系統(tǒng)中,為了保證系統(tǒng)具有合理的響應(yīng)時(shí)間,應(yīng)當(dāng)采用輪轉(zhuǎn)法進(jìn)行調(diào)度。目前存在的多種調(diào)度算法中,有的算法適用于作業(yè)調(diào)度,有的算法適用于進(jìn)程調(diào)度;但也有些調(diào)度算法既可以用于作業(yè)調(diào)度,也可以用于進(jìn)程調(diào)度。
1.先來(lái)先服務(wù)(FCFS)
先來(lái)先服務(wù)(FCFS, First Come First Serve)是最簡(jiǎn)單的調(diào)度算法,按先后順序進(jìn)行調(diào)度。
1. FCFS算法
按照作業(yè)提交或進(jìn)程變?yōu)榫途w狀態(tài)的先后次序,分派CPU; 當(dāng)前作業(yè)或進(jìn)程占用CPU,直到執(zhí)行完或阻塞,才出讓CPU(非搶占方式)。 在作業(yè)或進(jìn)程喚醒后(如I/O完成),并不立即恢復(fù)執(zhí)行,通常等到當(dāng)前作業(yè)或進(jìn)程出讓CPU。最簡(jiǎn)單的算法。
2. FCFS的特點(diǎn)
比較有利于長(zhǎng)作業(yè),而不利于短作業(yè)。 有利于CPU繁忙的作業(yè),而不利于I/O繁忙的作業(yè)。
2. 輪轉(zhuǎn)法(Round Robin)
輪轉(zhuǎn)法(Round Robin)是讓每個(gè)進(jìn)程在就緒隊(duì)列中的等待時(shí)間與享受服務(wù)的時(shí)間成正比例。
1. 輪轉(zhuǎn)法
? 將系統(tǒng)中所有的就緒進(jìn)程按照FCFS原則,排成一個(gè)隊(duì)列。
? 每次調(diào)度時(shí)將CPU分派給隊(duì)首進(jìn)程,讓其執(zhí)行一個(gè)時(shí)間片。時(shí)間片的長(zhǎng)度從幾個(gè)ms到幾百ms。
? 在一個(gè)時(shí)間片結(jié)束時(shí),發(fā)生時(shí)鐘中斷。
? 調(diào)度程序據(jù)此暫停當(dāng)前進(jìn)程的執(zhí)行,將其送到就緒隊(duì)列的末尾,并通過(guò)上下文切換執(zhí)行當(dāng)前的隊(duì)首進(jìn)程。? 進(jìn)程可以未使用完一個(gè)時(shí)間片,就出讓CPU(如阻塞)。
?
2. 時(shí)間片長(zhǎng)度的確定
? 時(shí)間片長(zhǎng)度變化的影響2 過(guò)長(zhǎng)->退化為FCFS算法,進(jìn)程在一個(gè)時(shí)間片內(nèi)都執(zhí)行完,響應(yīng)時(shí)間長(zhǎng)。2 過(guò)短->用戶的一次請(qǐng)求需要多個(gè)時(shí)間片才能處理完,上下文切換次數(shù)增加,響應(yīng)時(shí)間長(zhǎng)。
? 對(duì)響應(yīng)時(shí)間的要求:T(響應(yīng)時(shí)間)=N(進(jìn)程數(shù)目)*q(時(shí)間片)
? 就緒進(jìn)程的數(shù)目:數(shù)目越多,時(shí)間片越小
? 系統(tǒng)的處理能力:應(yīng)當(dāng)使用戶輸入通常在一個(gè)時(shí)間片內(nèi)能處理完,否則使響應(yīng)時(shí)間,平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間延長(zhǎng)。
3. 多級(jí)反饋隊(duì)列算法(Round Robin with Multiple Feedback)
多級(jí)反饋隊(duì)列算法時(shí)間片輪轉(zhuǎn)算法和優(yōu)先級(jí)算法的綜合和發(fā)展。優(yōu)點(diǎn):2 為提高系統(tǒng)吞吐量和縮短平均周轉(zhuǎn)時(shí)間而照顧短進(jìn)程。2 為獲得較好的I/O設(shè)備利用率和縮短響應(yīng)時(shí)間而照顧I/O型進(jìn)程。2 不必估計(jì)進(jìn)程的執(zhí)行時(shí)間,動(dòng)態(tài)調(diào)節(jié)。
1. 多級(jí)反饋隊(duì)列算法2 設(shè)置多個(gè)就緒隊(duì)列,分別賦予不同的優(yōu)先級(jí),如逐級(jí)降低,隊(duì)列1的優(yōu)先級(jí)最高。每個(gè)隊(duì)列執(zhí)行時(shí)間片的長(zhǎng)度也不同,規(guī)定優(yōu)先級(jí)越低則時(shí)間片越長(zhǎng),如逐級(jí)加倍。2 新進(jìn)程進(jìn)入內(nèi)存后,先投入隊(duì)列1的末尾,按FCFS算法調(diào)度;若按隊(duì)列1一個(gè)時(shí)間片未能執(zhí)行完,則降低投入到隊(duì)列2的末尾,同樣按FCFS算法調(diào)度;如此下去,降低到最后的隊(duì)列,則按“時(shí)間片輪轉(zhuǎn)”算法調(diào)度直到完成。2 僅當(dāng)較高優(yōu)先級(jí)的隊(duì)列為空,才調(diào)度較低優(yōu)先級(jí)的隊(duì)列中的進(jìn)程執(zhí)行。如果進(jìn)程執(zhí)行時(shí)有新進(jìn)程進(jìn)入較高優(yōu)先級(jí)的隊(duì)列,則搶先執(zhí)行新進(jìn)程,并把被搶先的進(jìn)程投入原隊(duì)列的末尾。2
2. 幾點(diǎn)說(shuō)明2
I/O型進(jìn)程:讓其進(jìn)入最高優(yōu)先級(jí)隊(duì)列,以及時(shí)響應(yīng)I/O交互。通常執(zhí)行一個(gè)小時(shí)間片,要求可處理完一次I/O請(qǐng)求的數(shù)據(jù),然后轉(zhuǎn)入到阻塞隊(duì)列。2 計(jì)算型進(jìn)程:每次都執(zhí)行完時(shí)間片,進(jìn)入更低級(jí)隊(duì)列。最終采用最大時(shí)間片來(lái)執(zhí)行,減少調(diào)度次數(shù)。2 I/O次數(shù)不多,而主要是CPU處理的進(jìn)程。在I/O完成后,放回優(yōu)先I/O請(qǐng)求時(shí)離開(kāi)的隊(duì)列,以免每次都回到最高優(yōu)先級(jí)隊(duì)列后再逐次下降。2 為適應(yīng)一個(gè)進(jìn)程在不同時(shí)間段的運(yùn)行特點(diǎn),I/O完成時(shí),提高優(yōu)先級(jí);時(shí)間片用完時(shí),降低優(yōu)先級(jí)。