進(jìn)程調(diào)度算法實(shí)驗(yàn)報(bào)告資料_第1頁
進(jìn)程調(diào)度算法實(shí)驗(yàn)報(bào)告資料_第2頁
進(jìn)程調(diào)度算法實(shí)驗(yàn)報(bào)告資料_第3頁
進(jìn)程調(diào)度算法實(shí)驗(yàn)報(bào)告資料_第4頁
進(jìn)程調(diào)度算法實(shí)驗(yàn)報(bào)告資料_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、、實(shí)驗(yàn)?zāi)康亩嗟莱绦蛳到y(tǒng)中,當(dāng)就緒進(jìn)程數(shù)大于處理機(jī)數(shù)時(shí),須按照某種策略決定哪些進(jìn)程優(yōu)先占用處理機(jī)。本實(shí)驗(yàn)?zāi)M實(shí)現(xiàn)進(jìn)程調(diào)度,以加深對進(jìn)程概念和不同進(jìn)程調(diào)度算法的理解。二、實(shí)驗(yàn)環(huán)境PC 微機(jī)。Windows 操作系統(tǒng)。C/C+/VB 等開發(fā)集成環(huán)境。三、實(shí)驗(yàn)內(nèi)容與步驟編程實(shí)現(xiàn)如下進(jìn)程調(diào)度算法:時(shí)間片輪轉(zhuǎn)調(diào)度算法:時(shí)間片長度在運(yùn)行時(shí)可從鍵盤輸入。多級反饋隊(duì)列調(diào)度算法:至少要有三個(gè)隊(duì)列,第i+1 隊(duì)列進(jìn)程運(yùn)行的時(shí)間片是第隊(duì)列的2 倍。高響應(yīng)比優(yōu)先調(diào)度算法:當(dāng)調(diào)度響應(yīng)比高的進(jìn)程運(yùn)行時(shí),仍然是運(yùn)行一個(gè)時(shí)間片,而不是完全結(jié)束,剛運(yùn)行的進(jìn)程,其以前的等待時(shí)間清零。實(shí)現(xiàn)提示:PCB 數(shù)據(jù)結(jié)構(gòu)(參考)PCB 至少包

2、括:進(jìn)程標(biāo)識符、進(jìn)程名、到達(dá)時(shí)間、服務(wù)時(shí)間、等待時(shí)間、完成時(shí)間、響應(yīng)比等(可根據(jù)不同的算法增減)。假設(shè)多個(gè)PCB 利用鏈接方式進(jìn)行組織。主要功能模塊(參考)進(jìn)程初始化;顯示初始化后進(jìn)程的基本信息;時(shí)間片輪轉(zhuǎn)調(diào)度算法;多級反饋隊(duì)列調(diào)度算法;高響應(yīng)比優(yōu)先調(diào)度算法;輸入要求:可將進(jìn)程初始化信息事先存入文件中,程序運(yùn)行從文件中讀取信息,避免從鍵盤輸入速度慢且易出錯(cuò)。輸出要求:每種調(diào)度算法每次調(diào)度后應(yīng)直觀顯示,進(jìn)程調(diào)度的依據(jù)、各進(jìn)程的各項(xiàng)參數(shù)。每種調(diào)度算法運(yùn)行結(jié)束后,輸出各個(gè)進(jìn)程對應(yīng)的完成時(shí)間、周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間,以及整體的平均帶權(quán)周轉(zhuǎn)時(shí)間。四、實(shí)驗(yàn)結(jié)果與分析33、高響應(yīng)比優(yōu)先調(diào)度算法(1)程序的框

3、架說明I I沖H時(shí)比質(zhì)*盾顯產(chǎn)量國取周方屁I I沖H時(shí)比質(zhì)*盾顯產(chǎn)量國取周方屁3)幽質(zhì)也猶無揖慢啤而(2)各調(diào)度算法的設(shè)計(jì)思想1、時(shí)間片輪轉(zhuǎn)算法該算法采取了非常公平的方式,即讓就緒隊(duì)列上的每個(gè)進(jìn)程每次僅運(yùn)行一個(gè)時(shí)間 片。如果就緒隊(duì)列上有N個(gè)進(jìn)程,則每個(gè)進(jìn)程每次大約都可獲得1/N的處理機(jī)時(shí) 問。時(shí)間片的大小對于系統(tǒng)性能有很大的影響。 若選擇很小的時(shí)間片,將有利于 短作業(yè),但意味著會頻繁地執(zhí)行進(jìn)程調(diào)度和進(jìn)程上下文的切換,這無疑會增加系統(tǒng)的開銷。反之,若時(shí)間片選擇得太長,且為使每個(gè)進(jìn)程都能在一個(gè)時(shí)間片內(nèi)完 成,RRB法便退化為FCFST法,無法滿足短作業(yè)和交互式用戶的需求。進(jìn)程的 切換時(shí)機(jī)體現(xiàn)出RR

4、算法的特點(diǎn)。若一個(gè)進(jìn)程在時(shí)間片還沒結(jié)束時(shí)就已完成,此 時(shí)立即激活調(diào)度程序,將它從執(zhí)行隊(duì)列中刪除。若一個(gè)進(jìn)程在時(shí)間片結(jié)束時(shí)還未 運(yùn)行完畢,則調(diào)度程序?qū)阉屯途w隊(duì)列的末尾,等待下一次執(zhí)行。2、多級反饋隊(duì)列調(diào)度算法1、進(jìn)程在進(jìn)入待調(diào)度的隊(duì)列等待時(shí),首先進(jìn)入優(yōu)先級最高的Q1等待。2、首先調(diào)度優(yōu)先級高的隊(duì)列中的進(jìn)程。若高優(yōu)先級中隊(duì)列中已沒有調(diào)度的進(jìn)程, 則調(diào)度次優(yōu)先級隊(duì)列中的進(jìn)程。例如: Q1,Q2,Q3三個(gè)隊(duì)列,只有在Q1中沒有進(jìn) 程等待時(shí)才去調(diào)度Q2,同理,只有Q1,Q2都為空時(shí)才會去調(diào)度Q33、對于同一個(gè)隊(duì)列中的各個(gè)進(jìn)程,按照時(shí)間片輪轉(zhuǎn)法調(diào)度。比如Q1隊(duì)列的時(shí)間 片為N,那么Q1中的作業(yè)在經(jīng)歷

5、了 N個(gè)時(shí)間片后若還沒有完成,則進(jìn)入 Q2隊(duì)列 等待,若Q2的時(shí)間片用完后作業(yè)還不能完成,一直進(jìn)入下一級隊(duì)列,直至完成。 4、在低優(yōu)先級的隊(duì)列中的進(jìn)程在運(yùn)行時(shí),又有新到達(dá)的作業(yè),那么在運(yùn)行完這 個(gè)時(shí)間片后,CPU上分配給新到達(dá)的作業(yè)(搶占式)。33、多級反饋隊(duì)列調(diào)度算法一種動態(tài)優(yōu)先調(diào)度算法,它以相應(yīng)比作為作業(yè)或進(jìn)程的動態(tài)優(yōu)先權(quán), 其目的是既 照顧短作業(yè),又考慮到作業(yè)的等待時(shí)間,使長作業(yè)不會長期等待;但每次調(diào)度前, 都要進(jìn)行響應(yīng)比計(jì)算,會增加系統(tǒng)開銷。(3)實(shí)驗(yàn)結(jié)果1.RR算法 EMsudl ShJdid Prdjec t w占題 II n訊15由.201 ? I ftLexe青輸入時(shí)間片的大小

6、Y依行時(shí)闈片拈傳面?zhèn)骱舴ㄅK銀P2進(jìn)入就緒隊(duì)列內(nèi)等恃史程P進(jìn)入過靖隊(duì)列內(nèi)等侍回前時(shí)間為泮區(qū)小 進(jìn)程曲P2;到達(dá)時(shí)皿為要求來?m聞5;刷余取勢時(shí)間工1 洸程.P3進(jìn)人就端隊(duì)列內(nèi)警恃當(dāng)前時(shí)間為42報(bào)疔:迸程名:PS;到時(shí)間:4-要求服務(wù)時(shí)間I 7:剿奈噩務(wù)時(shí)間:3進(jìn)程P1出.X西結(jié)隊(duì)列內(nèi)等待,前時(shí)間為:16執(zhí)行,進(jìn)程作P3;到葩時(shí)回:8;要求服務(wù)時(shí)間:制和余服務(wù)時(shí)間;1 進(jìn)程P4進(jìn)入就緒網(wǎng)列內(nèi)峰恃當(dāng)M時(shí)間為t20執(zhí)仔:道他名:P2;到班時(shí)間:2:要求服務(wù)時(shí)間:副剌*服務(wù)時(shí)間:0 心棺酎間為:M技廳:起程名1 Plr .利達(dá)時(shí)間r 10:轅求用;算時(shí)司:4: F除堰今葉I可:0 當(dāng)前時(shí)間為:28執(zhí)行;

7、進(jìn)程名:P6;型/時(shí)間:生要求噩棄時(shí)間:7;剁余眼符時(shí)間二0當(dāng)前時(shí)間為:32執(zhí)仃;出程加 M 刎達(dá)時(shí)啊】乳驍求戰(zhàn)外時(shí)間;瓢上氽服務(wù)時(shí)間:0 當(dāng)R時(shí)間為:36執(zhí)廳;進(jìn)程名:P3;勤電時(shí)間:的 要求里得時(shí)間:5;剩余里務(wù)時(shí)間:O乩741 44*444*4*4*+144*4*444中一*31441*啊*44祖坦名到總時(shí)間版著時(shí)間完應(yīng)時(shí)間封轉(zhuǎn)時(shí)間鬲杖周拈時(shí)間 TOC o 1-5 h z P22520183P5472R243P3E53C285F110424143P413232199平應(yīng)忙出sm時(shí)聞46卜* *444 *1*申* 申*+4l44*中*4* * 卡2、HRN算法11入n卜”丫 11 ;髭M網(wǎng)

8、席泡:;: ;而叫不出防丐口出“市:*X調(diào)質(zhì)鼻啟尚久出就需隊(duì)則內(nèi)呼梏鼎碼明比伏兀凋庠*沆號前時(shí)間為:?覽L:進(jìn)程名工期到達(dá)附畫.E:鎏求黑多忖間:加熱雜H尊時(shí)間13ififfPS 4時(shí)玷逆再咻科i前時(shí)司內(nèi)門尚久出就需隊(duì)則內(nèi)呼梏鼎碼明比伏兀凋庠*沆號前時(shí)間為:?覽L:進(jìn)程名工期到達(dá)附畫.E:鎏求黑多忖間:加熱雜H尊時(shí)間13ififfPS 4時(shí)玷逆再咻科i前時(shí)司內(nèi)門tfi遇桂名士園F馴店忖間工備要求鵬招時(shí)向:篇親M存時(shí)刊:叱FTP避人前擊隊(duì)列內(nèi)等片11m時(shí)同去饋ffl.tr;題程名=P2;到店時(shí)皿2;費(fèi)或總務(wù)時(shí)詠融朝能2落時(shí)期 3比膽”期人斷幫認(rèn)則內(nèi)事梢h超時(shí)同為;】。帆行;ififiSi F2j

9、到5f同:Z;要里齦弄時(shí)呵:依泰(余K等時(shí)臥2 口地,倒人就璃丸皿內(nèi)幕帶行而忖列內(nèi);1、 他上:進(jìn)標(biāo)南:寸翻時(shí)間為:黑 枸斤;今苒時(shí)間為:24 他杷出超唐二 1ti肝時(shí)間內(nèi)!29 次七二港程招工 當(dāng)命時(shí)同育:熱 他.打:電/名I到達(dá)時(shí)間;P1:到也時(shí)間:到工節(jié)同二Z:要求般務(wù)時(shí)間:5:抱親能務(wù)時(shí)間:0I3i 0戲解學(xué)時(shí)間:3j嘉余孤務(wù)時(shí)憫:010.要求雅委附間翼宗腥器時(shí)間二0利上財(cái)同:4:要求m勢所近1 71 M津n用時(shí)網(wǎng) 0kttt + f* + t + *1*t*+=* * *,I- T T r T T忸程名物達(dá)時(shí)向 鼬勢酎問 之成時(shí)何 閨線時(shí)間 用打展轉(zhuǎn)打回I& 酒 J1.24 2Die

10、1?2111平均帶權(quán)周轉(zhuǎn)時(shí)同;獴4* * * *事*1 *事事革單單 * * * * * A * * *U濟(jì)輸入以卜一數(shù)丁(1: 響片輪到7度津法:2: 白繳反胃隊(duì)列用咬算法:3:點(diǎn)則它比比 3請輸入第級隊(duì)列的時(shí)間片的大小:2m程P2理人就盤隊(duì)列內(nèi)等行名或反笛認(rèn)列謂變克法當(dāng)前時(shí)間為:2執(zhí)行:進(jìn)程名:P2t到達(dá)時(shí)間:2;要求般分時(shí)間: 5;刎余版務(wù)時(shí)間:3進(jìn)程Pa進(jìn)入就緒隊(duì)列內(nèi)等待當(dāng)前時(shí)間為:4執(zhí)了:進(jìn)程名:P5;到達(dá)時(shí)間:4:理求職務(wù)時(shí)間:7:刊登出號時(shí)間;5當(dāng)前時(shí)間為:11執(zhí)行;進(jìn)程名;P2;到達(dá)時(shí)間:2;要求版務(wù)時(shí)間* 5:剩余康務(wù)時(shí)間;0進(jìn)程3進(jìn)入就緒隊(duì)列內(nèi)等待進(jìn)程P1進(jìn)入就緒隊(duì)列內(nèi)等待

11、當(dāng)前時(shí)間為:口執(zhí)行;進(jìn)程名:P3;到達(dá)時(shí)間;3;要求服務(wù)時(shí)間,5;剩余期務(wù)時(shí)間;3進(jìn)程F4.也入徜繩隊(duì)列內(nèi)等恃當(dāng)前時(shí)間為:L3執(zhí)行;進(jìn)程名:P1;到達(dá)時(shí)間:10;要求服務(wù)時(shí)間:4;剩余服務(wù)時(shí)間:2當(dāng)前時(shí)間為:15執(zhí)行,進(jìn)隹名:P*到達(dá)時(shí)間t 11要求服勢時(shí)間:2:剩余服務(wù)時(shí)間,0當(dāng)前時(shí)間為:17執(zhí)仃:避程名:PS;到達(dá)時(shí)間:丸要求般蘇時(shí)間:7;剌余用.務(wù)時(shí)間:1當(dāng)薊時(shí)間為:26執(zhí)才門進(jìn)程名: P3:到達(dá)忖間;8要求員外時(shí)間* 5:剌余昵為時(shí)間:0 當(dāng)前時(shí)間為加執(zhí)廳上進(jìn)程名:Ph到達(dá)時(shí)間:1口:要求服務(wù)時(shí)間:4;劇余藤務(wù)時(shí)間:。當(dāng)前時(shí)網(wǎng)為:賽執(zhí)行二迸程名:P/到達(dá)時(shí)間;13;要求服務(wù)時(shí)間:2:超

12、余服務(wù)時(shí)間:。節(jié)前時(shí)間為:39執(zhí)行F進(jìn)程左 國器到達(dá)時(shí)間:工要求服務(wù)時(shí)間f 1則奈暇莠時(shí)間:0,*1|*1|*相仁*率*1|8*率*事*率進(jìn)程到達(dá)時(shí)間服務(wù)時(shí)間定成時(shí)間冏轉(zhuǎn)時(shí)網(wǎng)帶被冏轉(zhuǎn)時(shí)間P2591困739355P352&183PL)0430205P413232199怦均帶氣周轉(zhuǎn)時(shí)間:4. 6*#,:*會后率4年+字字導(dǎo)豐字學(xué)辛豐奉學(xué)學(xué)學(xué)學(xué)豐字*+*零辛*4=*奈率號*+*(4)實(shí)驗(yàn)源程序#include #include algorithm#include vector#include #include string using namespacestd;class JCB public :i

13、nt id; /進(jìn)程標(biāo)識符string name; / 進(jìn)程名int arriveTime; / 到達(dá)時(shí)間int serveTime; /要求服務(wù)時(shí)間int waitTime; /等待時(shí)間,只用于最高響應(yīng)比優(yōu)先調(diào)度算法中int finshTime; / 完成時(shí)間int roundTime; / 周轉(zhuǎn)時(shí)間double clock = 0; /記錄該進(jìn)程真實(shí)服務(wù)時(shí)間已經(jīng)用時(shí)的時(shí)長,用于在時(shí)間輪轉(zhuǎn)調(diào)度算法中比 較當(dāng)前進(jìn)程能否在當(dāng)前時(shí)間片執(zhí)行完畢double weightingRoundTime; / 帶權(quán)周轉(zhuǎn)時(shí)間JCB() JCB(string name, int arriveTime , int

14、serveTime , double priority ) this -name = name;this -arriveTime = arriveTime ;this -serveTime = serveTime ;this -waitTime = 0; / 初始等待時(shí)間置0void printInf() cout 進(jìn)程名: name ;到達(dá)時(shí)間: arriveTime ;要求服務(wù)時(shí)間: serveTime ;剩余服務(wù)時(shí)間: (serveTime - clock) 0 ? 0 : (serveTime - clock) endl;/ 按照到達(dá)時(shí)間升序bool cmp_arrvieTime_as

15、cend( JCB j1 , JCB j2 ) return j1 .arriveTime j2 .weightingRoundTime;/ 作業(yè)調(diào)度基礎(chǔ)類class JobScheduling public :vector process; / 存放所有進(jìn)程JCBnowPro; / 當(dāng)前應(yīng)執(zhí)行進(jìn)程int k = 0; / process 中的進(jìn)程遍歷時(shí)的下標(biāo)int nowTime = 0; / 當(dāng)前時(shí)間void printProcess() double aveRoundTime = 0;cout *cout * endl;cout 進(jìn)程名到達(dá)時(shí)間服務(wù)時(shí)間完成時(shí)間周轉(zhuǎn)時(shí)間帶權(quán)周轉(zhuǎn)時(shí)間 end

16、l;for ( int i = 0; i process.size(); +i) aveRoundTime += process i .weightingRoundTime; cout process i .name process i .arriveTime process i .serveTime process i .finshTime process i .roundTimeprocess i .weightingRoundTime endl;cout 平均帶權(quán)周轉(zhuǎn)時(shí)間: aveRoundTime / process.size() endl;process.clear();cout ”

17、*”cout ”*” endl;/ 時(shí)間片輪轉(zhuǎn)調(diào)度算法class RR: public JobScheduling public :queue RRQueue;/ 就緒隊(duì)列 double sliceTime;RR(vector jcb , double sliceTime ) this -process = jcb ; this -sliceTime = sliceTime ; / 初始對所有進(jìn)程按到達(dá)時(shí)間進(jìn)行排序 sort(process.begin(), process.end(), cmp_arrvieTime_ascend); void run() cout 執(zhí)行時(shí)間片輪轉(zhuǎn)調(diào)度算法 e

18、ndl;Enqueue(); while (!RRQueue.empty() | k process.size() Dequeue(); / 出隊(duì), 因?yàn)槿绻麜r(shí)間片結(jié)束當(dāng)前進(jìn)程未執(zhí)行完又到達(dá)了新的進(jìn)程,需要讓剛到達(dá)的進(jìn)程先進(jìn)隊(duì)列,再讓當(dāng)前進(jìn)程進(jìn)隊(duì)列,所以進(jìn)隊(duì)操作寫在這個(gè)函數(shù)里了 / 輸出進(jìn)程運(yùn)行信息 printProcess(); void Enqueue() / 進(jìn)程進(jìn)入就緒隊(duì)列while (k process.size() / 當(dāng)遍歷完jcb 中的所有進(jìn)程時(shí)結(jié)束if (process k .arriveTime = nowTime) / 已經(jīng)到達(dá)的進(jìn)程按到達(dá)時(shí)間先后進(jìn)入隊(duì)process k

19、 .id = k;cout 進(jìn)程 process k .name 進(jìn)入就緒隊(duì)列內(nèi)等待 endl;RRQueue.push(process k );k+;else break; / 如果該進(jìn)程還未到達(dá),結(jié)束遍歷。void Dequeue() nowTime += sliceTime; / 更新當(dāng)前時(shí)間/ 如果就緒隊(duì)列不為空if (!RRQueue.empty() nowPro = RRQueue.front(); / 獲取隊(duì)首元素RRQueue.pop(); / 移除隊(duì)列的隊(duì)首元素nowPro.clock += sliceTime; / 更新當(dāng)前進(jìn)程的實(shí)際服務(wù)時(shí)間cout 當(dāng)前時(shí)間為: nowT

20、ime endl;cout = nowPro.serveTime) nowPro.finshTime = nowTime; / 計(jì)算該進(jìn)程完成時(shí)間nowPro.roundTime = nowPro.finshTime - nowPro.arriveTime; / 計(jì)算周轉(zhuǎn)時(shí)間nowPro.weightingRoundTime = nowPro.roundTime / nowPro.serveTime; / 計(jì)算 帶權(quán)周轉(zhuǎn)process nowPro.id = nowPro; / 更新 jcb 中的進(jìn)程信息else / 當(dāng)前進(jìn)程未運(yùn)行完Enqueue(); / 已到達(dá)的進(jìn)程先入隊(duì)RRQueue.

21、push(nowPro);/ 上一輪出的再緊接著進(jìn)入隊(duì)尾 else / 如果就緒隊(duì)列為空,則執(zhí)行入隊(duì)Enqueue();class HRN: public JobScheduling public :vector HRNQueue;/ 就緒隊(duì)列HRN(vector jcb ) process = jcb ;/ 初始化帶權(quán)輪轉(zhuǎn)時(shí)間為1for ( int i = 0; i process.size(); i+) process i .weightingRoundTime = 1;/ 按到達(dá)時(shí)間升序排序sort(process.begin(), process.end(), cmp_arrvieTi

22、me_ascend);void run() / 最高響應(yīng)比優(yōu)先調(diào)度算法nowTime = process 0 .arriveTime;Enqueue();cout 最高響應(yīng)比優(yōu)先調(diào)度算法 endl;while (!HRNQueue.empty()|kprocess.size() / 如果將要執(zhí)行的進(jìn)程執(zhí)行完畢之前,下一個(gè)進(jìn)程都不會到來if (k = process.size() | nowTime + (HRNQueue 0 .serveTime -HRNQueue0 .clock) process k .arriveTime) Dequeue(); / 出隊(duì)/ 下一個(gè)進(jìn)程執(zhí)行到一半,會出現(xiàn)被

23、新到來的進(jìn)程搶占的可能else int time = process k .arriveTime - nowTime;Dequeue(time);Enqueue(); / 已到達(dá)的進(jìn)程入隊(duì)sort(HRNQueue.begin(),HRNQueue.end(),cmp_weightingRoundTime_descend); / 隊(duì)列中的進(jìn)程按響應(yīng)比進(jìn)行排序printProcess();void Enqueue() / 進(jìn)程入隊(duì),可一次進(jìn)多個(gè)while (k process.size() / 當(dāng)遍歷完jcb 中的所有進(jìn)程時(shí)結(jié)束if (process k .arriveTime = nowTim

24、e) / 已經(jīng)到達(dá)的進(jìn)程按到達(dá)時(shí)間先后進(jìn)入隊(duì)列process k .id = k;cout 進(jìn)程 process k .name 進(jìn)入就緒隊(duì)列內(nèi)等待 endl;HRNQueue.push_back(process k );k+;else break;/如果該進(jìn)程還未入隊(duì),即先結(jié)束遍歷,保留當(dāng)前下標(biāo)k值,注意:此處不要k- ;void Dequeue() if (!HRNQueue.empty() nowPro = HRNQueue0 ;/ 移除隊(duì)列的隊(duì)首元素并且返回該對象元素HRNQueue.erase(HRNQueue.begin();/nowProess.beginTime = nowTi

25、me;/ 計(jì)算開始時(shí)間,即為上一個(gè)進(jìn)程的結(jié)束時(shí)間nowPro.finshTime = nowTime + nowPro.serveTime; / 計(jì)算結(jié)束時(shí)間,該進(jìn)程開始時(shí) 間 +服務(wù)時(shí)間nowPro.roundTime = nowPro.finshTime - nowPro.arriveTime; / 計(jì)算周轉(zhuǎn)時(shí)間 nowPro.weightingRoundTime = nowPro.roundTime / nowPro.serveTime; / 計(jì)算帶權(quán) 周轉(zhuǎn)時(shí)間nowTime = nowPro.finshTime; / 獲得結(jié)束時(shí)間,即當(dāng)前時(shí)間,方便判斷剩下的進(jìn)程是否已到達(dá)nowPro.

26、clock = nowPro.serveTime;cout 當(dāng)前時(shí)間為: nowTime endl;cout 執(zhí)行: ;nowPro.printInf();process nowPro.id = nowPro;for ( int i = 0; i HRNQueue.size(); +i) HRNQueuei .waitTime += nowPro.serveTime; / 所有進(jìn)入等待隊(duì)列的進(jìn)程等待時(shí)間 +1HRNQueuei .weightingRoundTime = (HRNQueue i .waitTime + HRNQueuei .serveTime) / ( double )HRNQ

27、ueuei .serveTime;void Dequeue( int time ) if (!HRNQueue.empty() nowPro = HRNQueue0 ;/ 該進(jìn)程不會執(zhí)行完畢,無需移除nowPro.clock += time ;cout 當(dāng)前時(shí)間為: nowTime endl;cout 執(zhí)行: ;nowPro.printInf();nowTime += time ;process nowPro.id = nowPro;for ( int i = 0; i HRNQueue.size(); +i) HRNQueuei .waitTime += time ; / 所有進(jìn)入等待隊(duì)列的

28、進(jìn)程等待時(shí)間+1HRNQueuei .weightingRoundTime = (HRNQueue i .waitTime + HRNQueuei .serveTime) / ( double )HRNQueuei .serveTime;class MFQ: public JobScheduling public :queue queue3;double sliceTime3;int sign;MFQ(vector jcb , double sliceTime ) this -sliceTime0 = sliceTime ;this -sliceTime1 =this -sliceTime0

29、* 2;this -sliceTime2 =this -sliceTime1 * 2;process = jcb ;sort(process.begin(), process.end(), cmp_arrvieTime_ascend); void run() nowTime = process 0 .arriveTime;Enqueue(0);cout 多級反饋隊(duì)列調(diào)度算法 endl;while (k = sliceTime0) /cout 0 endl;Dequeue(sliceTime0);else /cout 1 endl;Dequeue();Enqueue(0);while (!que

30、ue1.empty() /cout 1 = sliceTime1) Dequeue(sliceTime1);else Dequeue();Enqueue(0);if (queue0.size() 0) break; / 如果第一級隊(duì)列中新到來了進(jìn)程/ 到最后一個(gè)隊(duì)列,直接實(shí)行FCFSwhile (!queue2.empty() /cout 2 0) break; / 如果第一級隊(duì)列中新到來了進(jìn)程printProcess();void Enqueue( int sign ) / 進(jìn)程入隊(duì),可一次進(jìn)多個(gè)while (k process.size() / 當(dāng)遍歷完jcb 中的所有進(jìn)程時(shí)結(jié)束if (p

31、rocess k .arriveTime = nowTime) / 已經(jīng)到達(dá)的進(jìn)程按到達(dá)時(shí)間先后進(jìn)入隊(duì)列process k .id = k;cout 進(jìn)程 process k .name 進(jìn)入就緒隊(duì)列內(nèi)等待 endl;queue sign .push(process k );k+;else break;/如果該進(jìn)程還未入隊(duì),即先結(jié)束遍歷,保留當(dāng)前下標(biāo)k值,注意:此處不要 k- ;void Dequeue() if (!queuesign.empty() nowPro = queuesign.front(); / 移除隊(duì)列的隊(duì)首元素并且返回該對象元素queuesign.pop();/nowProess.beginTime = nowTime;/ 計(jì)算開始時(shí)間,即為上一個(gè)進(jìn)程的結(jié)束時(shí)間nowPro.finshTime = nowTime + nowPro.serveTime; / 計(jì)算結(jié)束時(shí)間,該進(jìn)程開始時(shí) 間 +服務(wù)時(shí)間nowPro.roundTime = nowPro.finshTime - nowPro.arriveTime; / 計(jì)算周轉(zhuǎn)時(shí)間nowPro.weightingRoundTime = nowPro.roundTime / nowPro.serveTime; / 計(jì)算帶權(quán)周轉(zhuǎn)時(shí)間nowTime = nowPro.fins

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論