進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)_第1頁(yè)
進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)_第2頁(yè)
進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)_第3頁(yè)
進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)_第4頁(yè)
進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上操作系統(tǒng)課程設(shè)計(jì)報(bào)告題目: 進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)_專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級(jí)學(xué)號(hào)指導(dǎo)教師發(fā)放日期2015.1.30信 息 工 程 學(xué) 院專心-專注-專業(yè)目 錄進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)1 概述選擇一個(gè)調(diào)度算法,實(shí)現(xiàn)處理機(jī)調(diào)度,進(jìn)程調(diào)度算法包括:先來(lái)先服務(wù)算法,短進(jìn)程優(yōu)先算法,時(shí)間片輪轉(zhuǎn)算法,動(dòng)態(tài)優(yōu)先級(jí)算法。可選擇進(jìn)程數(shù)量,本程序包括四種算法,用C或C+語(yǔ)言實(shí)現(xiàn),執(zhí)行時(shí)在主界面選擇算法(可用函數(shù)實(shí)現(xiàn)),進(jìn)入子頁(yè)面后輸入進(jìn)程數(shù),(運(yùn)行時(shí)間,優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生),執(zhí)行,顯示結(jié)果。2 設(shè)計(jì)原理2.1先來(lái)先服務(wù)(FCFS)算法 每次調(diào)度都是從后備作業(yè)隊(duì)列中選擇一個(gè)或多個(gè)最

2、先進(jìn)入該隊(duì)列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源創(chuàng)建進(jìn)程,然后放入就緒隊(duì)列2.2 時(shí)間片輪轉(zhuǎn)法(RR)算法系統(tǒng)將所有的就緒進(jìn)程按先來(lái)先服務(wù)的原則排成一個(gè)隊(duì)列,每次調(diào)度時(shí),把CPU分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。時(shí)間片的大小從幾ms到幾百ms。當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)計(jì)時(shí)器發(fā)出時(shí)鐘中斷請(qǐng)求,調(diào)度程序便據(jù)此信號(hào)來(lái)停止該進(jìn)程的執(zhí)行,并將它送往就緒隊(duì)列的末尾;然后,再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程,同時(shí)也讓它執(zhí)行一個(gè)時(shí)間片。2.3短作業(yè)優(yōu)先(SJF)算法短作業(yè)優(yōu)先調(diào)度算法是從就緒隊(duì)列中選出一個(gè)估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞

3、放棄處理機(jī)時(shí)再重新調(diào)度。 2.4最高優(yōu)先權(quán)優(yōu)先(HRRN)算法 優(yōu)先權(quán)調(diào)度算法是為了照顧緊迫型作業(yè),使之在進(jìn)入系統(tǒng)后便獲得優(yōu)先處理,引入最高優(yōu)先權(quán)優(yōu)先調(diào)度算法。動(dòng)態(tài)優(yōu)先權(quán)是指在創(chuàng)建進(jìn)程時(shí)所賦予的優(yōu)先權(quán),是可以隨進(jìn)程的推進(jìn)或隨其等待時(shí)間的增加而改變的,以便獲得更好的調(diào)度性能。 3 詳細(xì)設(shè)計(jì)與編碼3.1 模塊設(shè)計(jì)(1) 進(jìn)入系統(tǒng)模塊,進(jìn)入登陸界面。(3) 菜單選擇模塊。選擇相應(yīng)的進(jìn)程調(diào)度方式,選擇相應(yīng)的數(shù)字,進(jìn)入相應(yīng)的功能。(4) 算法模塊。選擇相應(yīng)的進(jìn)程調(diào)度算法。(5) 顯現(xiàn)輸出模塊。顯示每種進(jìn)程調(diào)度算法情況。(6) 平均周轉(zhuǎn)時(shí)間與平均帶權(quán)周轉(zhuǎn)時(shí)間的計(jì)算結(jié)果。(7) 退出系統(tǒng)模塊。開(kāi)始3.2 系

4、統(tǒng)流程圖FCFS算法,對(duì)于先到達(dá)的進(jìn)程優(yōu)先分配CPUSJF算法,每次都從未完成的隊(duì)列中選取服務(wù)時(shí)間最短的作業(yè)進(jìn)行調(diào)度RR算法,每次調(diào)度時(shí)將CPU 分派給隊(duì)首進(jìn)程,按照時(shí)間片依次執(zhí)行進(jìn)程HRRN算法,考慮每個(gè)作業(yè)的等待時(shí)間長(zhǎng)短和估計(jì)需要的執(zhí)行時(shí)間長(zhǎng)短,從中選出最高的作業(yè)投入執(zhí)行。結(jié)束3.3 系統(tǒng)詳細(xì)設(shè)計(jì)(1) 系統(tǒng)主界面設(shè)計(jì)(包含登陸模塊設(shè)計(jì))首先將各種進(jìn)程調(diào)度算法放入不同的頭文件,在主函數(shù)引用,是系統(tǒng)結(jié)構(gòu)更加清晰。設(shè)置一個(gè)mean()方法,讓用戶選擇不同的進(jìn)程調(diào)度算法,mean()方法返回一個(gè)char類(lèi)型字符,以便在主函數(shù)的switch語(yǔ)句中選擇調(diào)用不同的進(jìn)程調(diào)度方法。(2) 系統(tǒng)模塊1.先來(lái)

5、先服務(wù)算法 對(duì)于先到達(dá)的進(jìn)程優(yōu)先分配CPU,按照先來(lái)先服務(wù)的原則依次執(zhí)行各進(jìn)程。算法:void FCFS(fcfs *p,int N) float sumzztime=0, sumdqzztime=0,avzztime,avdqzztime; float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; sort(p,N); deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetim

6、e,servicetime,starttime,finishtime,zztime,dqzztime,N); for(int k=0;k<=N-1;k+) sumzztime=sumzztime+pk.zztime; sumdqzztime=sumdqzztime+ pk.dqzztime; avzztime=sumzztime/N; printf("n該算法的平均周轉(zhuǎn)時(shí)間為:%-.2ft",avzztime); avdqzztime= sumdqzztime/N; printf("該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftnn",avdqzztim

7、e); 2.短進(jìn)程優(yōu)先算法先找到運(yùn)行時(shí)間最短的程序,然后執(zhí)行,再?gòu)氖S嗟某绦蛑姓业竭\(yùn)行時(shí)間最短的在執(zhí)行,依次每次都執(zhí)行運(yùn)行時(shí)間最短的,直到程序執(zhí)行完畢。算法: void sjff(sjf *p,int N1)float sumzztime=0, sumdqzztime=0,avzztime,avdqzztime;float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztim

8、e,N1); Print(p,arrivetime,servicetime,starttime,finishtime,N1);for(int k=0;k<=N1-1;k+) sumzztime=sumzztime+pk.zztime;sumdqzztime=sumdqzztime+ pk.dqzztime;avzztime=sumzztime/N1; printf("n該算法的平均周轉(zhuǎn)時(shí)間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N1; printf("該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftnn",a

9、vdqzztime); 3.時(shí)間片輪轉(zhuǎn)算法按照輪轉(zhuǎn)的次序分配給每個(gè)程序一定的時(shí)間執(zhí)行,執(zhí)行完成后執(zhí)行后面的進(jìn)程 ,依次循環(huán)執(zhí)行直到所有進(jìn)程執(zhí)行完成。算法: void tt(rr *p,int N2) float sumzztime=0, sumdqzztime=0,avzztime=0,avdqzztime=0;int timeprice=0;float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0,lefttime=0;ptt(p,arrivetime,servicetime,starttime

10、,finishtime,zztime,dqzztime,avzztime,avdqzztime,lefttime,timeprice,N2);printf("n 綜合信息為:n");Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N2); for(int k=0;k<=N2-1;k+) sumzztime=sumzztime+pk.zztime;sumdqzztime=sumdqzztime+ pk.dqzztime;avzztime=sumzztime/N2; printf(&q

11、uot;n該算法的平均周轉(zhuǎn)時(shí)間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N2; printf("該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftn",avdqzztime);getchar(); 4.最高響應(yīng)比優(yōu)先算法按照優(yōu)先級(jí)從高到低依次執(zhí)行程序。算法:int HRN(int pre)int current=1,i,j;/* 優(yōu)先權(quán) =(等待時(shí)間+服務(wù)時(shí)間)/服務(wù)時(shí)間*/for(i=0; i<N4; i+)JCBi.waiTime=JCBpre.finTime-JCBi.arrTime; /*等待時(shí)間 =上一個(gè)作業(yè)的完

12、成時(shí)間-到達(dá)時(shí)間*/JCBi.priority=(JCBi.waiTime+JCBi.serTime)/JCBi.serTime;for(i=0; i<N4; i+)if(!JCBi.finish)current=i; /*找到第一個(gè)還沒(méi)完成的作業(yè)*/break;for( j=i; j<N4; j+) /*和后面的作業(yè)比較*/if( !JCBj.finish) /* 還沒(méi)完成(運(yùn)行)*/if(JCBcurrent.arrTime<=JCBpre.finTime) /*如果作業(yè)在上一個(gè)作業(yè)完成之前到達(dá)*/if(JCBj.arrTime<=JCBpre.finTime &a

13、mp;& JCBj.priority>JCBcurrent.priority )current=j;/* 找出到達(dá)時(shí)間在上一個(gè)作業(yè)完成之前,優(yōu)先權(quán)高的作業(yè)*/else /* 如果作業(yè)是在上一個(gè)作業(yè)完成之后到達(dá)*/if(JCBj.arrTime<JCBcurrent.arrTime)current=j; /* 找出比較早到達(dá)的一個(gè)*/if(JCBj.arrTime=JCBcurrent.arrTime) /* 如果同時(shí)到達(dá)*/if(JCBj.priority>JCBcurrent.priority)current=j; /*找出服務(wù)時(shí)間比較短的一個(gè)*/return cu

14、rrent;/*返回當(dāng)前作業(yè)*/4 結(jié)果與分析4.1 測(cè)試方案(1) 測(cè)試方案(一) 在主界面輸入1,選擇先來(lái)先服務(wù)調(diào)度算法,然后輸入進(jìn)程數(shù)目5,然后輸入各個(gè)進(jìn)程信息,觀察測(cè)試結(jié)果。(2) 測(cè)試方案(二)在主界面輸入2,選擇最短進(jìn)程優(yōu)先調(diào)度算法,然后輸入進(jìn)程數(shù)目5,然后輸入各個(gè)進(jìn)程信息,進(jìn)程信息與測(cè)試方案(一)保持一致,觀察測(cè)試結(jié)果,對(duì)比方案一。 (3) 測(cè)試方案(三) 在主界面輸入3,選擇時(shí)間片輪轉(zhuǎn)調(diào)度算法,然后輸入進(jìn)程數(shù)目5,然后輸入各個(gè)進(jìn)程信息,進(jìn)程信息與測(cè)試方案(一)保持一致,觀察測(cè)試結(jié)果,對(duì)比方案一和二。(4) 測(cè)試方案(四)在主界面輸入4,選擇時(shí)間片輪轉(zhuǎn)調(diào)度算法,然后輸入進(jìn)程數(shù)目5

15、,然后輸入各個(gè)進(jìn)程信息,進(jìn)程信息與測(cè)試方案(一)保持一致,觀察測(cè)試結(jié)果,對(duì)比方案一和二和三。4.2 測(cè)試結(jié)果 (1) 測(cè)試方案(一)結(jié)果。輸入測(cè)試進(jìn)程數(shù)5,測(cè)試用例分別為(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),測(cè)試結(jié)果見(jiàn)圖(圖4-1 先來(lái)先服務(wù)調(diào)度算法) 圖4-1 先來(lái)先服務(wù)調(diào)度算法由運(yùn)行結(jié)果可以看出,短作業(yè)D的服務(wù)時(shí)間最短,但帶權(quán)周轉(zhuǎn)時(shí)間高達(dá)5.5,而長(zhǎng)作業(yè)C的服務(wù)時(shí)間為5,帶權(quán)周轉(zhuǎn)時(shí)間僅為2,因此先來(lái)先服務(wù)算法比較有利于長(zhǎng)作業(yè),而不利于短作業(yè)(2) 測(cè)試方案(2)結(jié)果。輸入測(cè)試進(jìn)程數(shù)5,測(cè)試用例分別為(A 0 4),(B 1 3),(C 2 5),(

16、D 3 2),(E 4 4),測(cè)試結(jié)果見(jiàn)圖(圖4-2 短作業(yè)優(yōu)先調(diào)度算法) 圖4-2 短作業(yè)優(yōu)先調(diào)度算法由運(yùn)行結(jié)果可以看出,短作業(yè)優(yōu)先算法每次都從未完成的隊(duì)列中選取服務(wù)時(shí)間最短的作業(yè)進(jìn)行調(diào)度。通過(guò)比較,短作業(yè)優(yōu)先算法的平均帶權(quán)周轉(zhuǎn)時(shí)間小于先來(lái)先服務(wù)算法,提高了系統(tǒng)的吞吐量。因此,相對(duì)于短作業(yè)較多或者較為重要的系統(tǒng)中,可選這短作業(yè)優(yōu)先調(diào)度算法。(3) 測(cè)試方案(三)結(jié)果。輸入測(cè)試進(jìn)程數(shù)5,測(cè)試用例分別為(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),測(cè)試結(jié)果見(jiàn)圖(圖4-3.1,4-3.2,4-3.3時(shí)間片輪轉(zhuǎn)調(diào)度算法) 圖4-3.1 時(shí)間片輪轉(zhuǎn)調(diào)度算法 圖4-3.

17、2 時(shí)間片輪轉(zhuǎn)調(diào)度算法 圖4-3.3 時(shí)間片輪轉(zhuǎn)調(diào)度算法從多次運(yùn)行結(jié)果來(lái)看,時(shí)間片輪轉(zhuǎn)調(diào)度算法不同的時(shí)間片對(duì)結(jié)果有很大的影響。(4) 測(cè)試方案(四)結(jié)果。輸入測(cè)試進(jìn)程數(shù)5,測(cè)試用例分別為(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),測(cè)試結(jié)果見(jiàn)圖(圖4-4 最高響應(yīng)比優(yōu)先調(diào)度算法) 圖4-4 最高響應(yīng)比優(yōu)先調(diào)度算法由運(yùn)行結(jié)果可以看出,該算法既照顧了短作業(yè),有考慮了作業(yè)到達(dá)的先后次序,不會(huì)使長(zhǎng)作業(yè)長(zhǎng)期得不到服務(wù)。因此,該算法是一個(gè)很好的折衷4.3 測(cè)試結(jié)果分析四種調(diào)度算法各有優(yōu)劣。先來(lái)先服務(wù)算法比較有利于長(zhǎng)進(jìn)程,而不利于短進(jìn)程,有利于CPU 繁忙的進(jìn)程,而不利于I

18、/O 繁忙的進(jìn)程。短作業(yè)優(yōu)先調(diào)度算法相比FCFS 算法,該算法可改善平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間,縮短進(jìn)程的等待時(shí)間,提高系統(tǒng)的吞吐量。缺點(diǎn)是對(duì)長(zhǎng)進(jìn)程非常不利,可能長(zhǎng)時(shí)間得不到執(zhí)行,且未能依據(jù)進(jìn)程的緊迫程度來(lái)劃分執(zhí)行的優(yōu)先級(jí),以及難以準(zhǔn)確估計(jì)進(jìn)程的執(zhí)行時(shí)間,從而影響調(diào)度性能。時(shí)間片輪轉(zhuǎn)調(diào)度算法的特點(diǎn)是簡(jiǎn)單易行、平均響應(yīng)時(shí)間短,但不利于處理緊急作業(yè)。在時(shí)間片輪轉(zhuǎn)算法中,時(shí)間片的大小對(duì)系統(tǒng)性能的影響很大,因此時(shí)間片的大小應(yīng)選擇恰當(dāng)。高響應(yīng)比優(yōu)先調(diào)度策略是對(duì)FCFS方式和SJF方式的一種綜合平衡,同時(shí)考慮每個(gè)作業(yè)的等待時(shí)間長(zhǎng)短和估計(jì)需要的執(zhí)行時(shí)間長(zhǎng)短,從中選出最高的作業(yè)投入執(zhí)行。5 設(shè)計(jì)小結(jié)經(jīng)過(guò)一

19、周的努力,課程設(shè)計(jì)基本完成了,這次課程設(shè)計(jì)培養(yǎng)了我們耐心、慎密、全面地考慮問(wèn)題的能力,從而加快了問(wèn)題解決的速度、提高了個(gè)人的工作效率,以及鍛煉圍繞問(wèn)題在短時(shí)間內(nèi)得以解決的頑強(qiáng)意志。課程設(shè)計(jì)是我們專業(yè)課程知識(shí)綜合應(yīng)用的實(shí)踐訓(xùn)練,也是為我們以后的工作夯實(shí)基礎(chǔ)。通過(guò)改程序?qū)Σ僮飨到y(tǒng)的基礎(chǔ)知識(shí)了解得更透徹了,同時(shí)對(duì)磁盤(pán)調(diào)度的四種算法先來(lái)先服務(wù)算法,短進(jìn)程優(yōu)先調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法,動(dòng)態(tài)優(yōu)先級(jí)調(diào)度有了更深刻的理解和掌握,使我能夠?yàn)檫M(jìn)程調(diào)度選擇適當(dāng)?shù)乃惴ǎ岣逤PU工作效率。進(jìn)行進(jìn)程調(diào)度程序設(shè)計(jì)的過(guò)程中,得到老師的大力指導(dǎo)和同學(xué)的支持,在此向他們表示感謝。經(jīng)過(guò)自己的動(dòng)手操作和同學(xué)老師的指導(dǎo)我成功的做

20、出了課程設(shè)計(jì)自己感到很高興。在編寫(xiě)程序的過(guò)程中,我們的能力得到了提高,同時(shí)養(yǎng)成了科學(xué)、嚴(yán)謹(jǐn)?shù)淖黠L(fēng)和習(xí)慣。為此要感謝信息學(xué)院開(kāi)設(shè)了這門(mén)操作系統(tǒng)課程設(shè)計(jì),為我們提供了進(jìn)一步學(xué)習(xí)算法、操作系統(tǒng)和鞏固C語(yǔ)言程序計(jì)設(shè)的平臺(tái)。6 參考文獻(xiàn)1 嚴(yán)蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)M.清華大學(xué)出版社,1997.2 張堯?qū)W,史美林. 計(jì)算機(jī)操作系統(tǒng)教程M.清華大學(xué)出版社,2000.3 孫靜宇. 計(jì)算機(jī)操作系統(tǒng)課程設(shè)計(jì)指導(dǎo)書(shū)M.太原理工出版社,2006.4 湯小丹,梁紅兵,哲鳳屏,湯子贏.計(jì)算機(jī)操作系統(tǒng)(第五版)M.西安:西安電子科技大學(xué)出版社,2007.5 何欽銘,顏暉.C語(yǔ)言程序設(shè)計(jì)M.北京:高等教育出版社,2008.

21、6 胡學(xué)剛,數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)M.北京:高等教育出版社,2008.7 張小進(jìn),Linux系統(tǒng)應(yīng)用基礎(chǔ)教程M.北京:機(jī)械工業(yè)出版社,2008.8 孟慶昌,C語(yǔ)言程序設(shè)計(jì)M.北京:人民郵電出版社,2006.7 附錄 程序代碼Main.cpp#include <cstdlib>#include <iostream>#include <iomanip> #include "fcfs.h” /先來(lái)先服務(wù)#include "sjf.h" /短作業(yè)優(yōu)先#include "rr.h"/時(shí)間片輪轉(zhuǎn)#include "

22、;hrrn.h" /高響應(yīng)比優(yōu)先"using namespace std;char menu()/用來(lái)輸出相關(guān)信息的函數(shù) char cse1;while(1)system("cls");fflush(stdin);cout<<endl; cout<<endl; cout<<"t"<<" "<<"t 進(jìn)程調(diào)度算法模擬 "<<"tt"<<" "<<endl;cout

23、<<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 1.先來(lái)先服務(wù)調(diào)度算法 "<<"tt"<<" "<<endl;cout<<"t"<<" "<<endl;cout<<"t"<<" "<

24、;<"tt 2.短作業(yè)優(yōu)先調(diào)度算法 "<<"tt"<<" "<<endl;cout<<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 3.時(shí)間片輪轉(zhuǎn)調(diào)度算法"<<"ttt"<<" "<<endl; cout<<&qu

25、ot;t"<<" "<<endl;cout<<"t"<<" "<<"tt 4.最高響應(yīng)比優(yōu)先調(diào)度算法 "<<"tt"<<" "<<endl; cout<<"t"<<" "<<endl;cout<<"t"<<" "<<&qu

26、ot;tt 0.退出系統(tǒng) "<<"tt"<<" "<<endl; cout<<endl;cout<<endl;cout<<"tt 請(qǐng)輸入您的選擇(0/1/2/3/4):"cse1=getchar();if(cse1<'0'|cse1>'4')cout<<endl;cout<<" o()o 您的輸入有誤!請(qǐng)重新輸入正確的字符 o()o "<<endl;cou

27、t<<endl;system("PAUSE");elsebreak;return cse1;int main(int argc, char *argv) while(1) switch(menu()case '1': fcfsRun();break;case '2': sjfRun();break;case '3': rrRun();break;case '4':hrrnRun();break;case '0':exit(0); system("PAUSE");

28、return EXIT_SUCCESS;fcfs.h#include <stdio.h>#include <stdlib.h>using namespace std;struct fcfs /定義先來(lái)先服務(wù)調(diào)度算法結(jié)構(gòu)體char name10; /./作業(yè)名float arrivetime; /作業(yè)到達(dá)時(shí)間float servicetime; /作業(yè)服務(wù)float starttime; /作業(yè)開(kāi)始時(shí)間float finishtime; /作業(yè)完成時(shí)間float zztime; /帶權(quán)周轉(zhuǎn)時(shí)間float dqzztime; /平均帶權(quán)周轉(zhuǎn)時(shí)間; fcfs a100;/定義

29、存放進(jìn)程的數(shù)組void input(fcfs *p,int N) /輸入處理 int i; cout<<endl; printf(" 請(qǐng)您輸入進(jìn)程的 名字 到達(dá)時(shí)間 服務(wù)時(shí)間: (例如: a 0 100)nn"); for(i=0;i<=N-1;i+) printf(" 請(qǐng)您輸入進(jìn)程%d的信息:t",i+1);scanf("ttt%s%f%f",&,&pi.arrivetime,&pi.servicetime); void Print(fcfs *p,float arriveti

30、me,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) /屏幕輸出處理int k; printf("nn調(diào)用先來(lái)先服務(wù)算法以后進(jìn)程運(yùn)行的順序是: "); printf("%s",); for(k=1;k<N;k+) printf("->%s",); cout<<endl; printf("n 具體進(jìn)程調(diào)度信息:n"); printf("

31、;t進(jìn)程名 到達(dá)時(shí)間 服務(wù)時(shí)間 開(kāi)始時(shí)間 結(jié)束時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間n"); for(k=0;k<=N-1;k+) printf("t%st%-.2ft %-.2ft %-.2ft %-.2ft %-.2ft %-.2fn",,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); getchar(); /此處必須要有這個(gè)函數(shù),否則就看不到顯示器上面的輸出,可以看到的結(jié)果只是一閃而過(guò)的一個(gè)框剪 void sort(fcfs *p,int

32、 N) /按進(jìn)程的到達(dá)時(shí)間進(jìn)行排序 for(int i=0;i<=N-1;i+) for(int j=0;j<=i;j+) if(pi.arrivetime<pj.arrivetime) fcfs temp; temp=pi; pi=pj; pj=temp; void deal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N) /運(yùn)行階段,根據(jù)先來(lái)先服務(wù)的原則進(jìn)行處理 int k; f

33、or(k=0;k<=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; void FCFS(fcfs *p,i

34、nt N) float sumzztime=0, sumdqzztime=0,avzztime,avdqzztime; float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; sort(p,N); deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); for(int

35、 k=0;k<=N-1;k+) sumzztime=sumzztime+pk.zztime; sumdqzztime=sumdqzztime+ pk.dqzztime; avzztime=sumzztime/N; printf("n該算法的平均周轉(zhuǎn)時(shí)間為:%-.2ft",avzztime); avdqzztime= sumdqzztime/N; printf("該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftnn",avdqzztime); void fcfsRun()/給主函數(shù)調(diào)用的方法int N; cout<<endl;cout<&l

36、t;endl; printf("tt<<-!先來(lái)先服務(wù)調(diào)度算法!->>n"); cout<<endl;printf("輸入進(jìn)程數(shù)目:"); scanf("%d",&N); input(a,N); FCFS(a,N); getchar(); /先來(lái)先服務(wù)算法到此結(jié)束 Sjf.h#include<stdio.h>struct jcb /作業(yè)控制塊JCB,定義為結(jié)構(gòu)體 char name10; /作業(yè)名 float arrivetime; /作業(yè)到達(dá)時(shí)間 float serviceti

37、me;/作業(yè)服務(wù)時(shí)間 float starttime; /作業(yè)開(kāi)始執(zhí)行時(shí)間 float finishtime; /作業(yè)完成時(shí)間 float zztime; /作業(yè)周轉(zhuǎn)時(shí)間 float dqzztime; /作業(yè)平均周轉(zhuǎn)時(shí)間; jcb a1100; /最多能管理的作業(yè)數(shù)目void input(jcb *p,int N) /輸入處理 int i;cout<<endl; printf(" 請(qǐng)您輸入進(jìn)程的 名字 到達(dá)時(shí)間 服務(wù)時(shí)間: (例如: a 0 100)n"); for(i=0;i<=N-1;i+) printf(" 請(qǐng)您輸入進(jìn)程%d的信息:t&q

38、uot;,i+1);scanf("ttt%s%f%f",&,&pi.arrivetime,&pi.servicetime);void Print(jcb *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) /屏幕輸出處理 int k;printf("nt調(diào)用最短進(jìn)程優(yōu)先調(diào)度算法以后進(jìn)程的調(diào)度順序?yàn)?");printf("%s",p0.nam

39、e);for(k=1;k<N;k+)printf("->%s",); cout<<endl; printf("n給個(gè)進(jìn)程具體調(diào)度信息如下:n");printf("n進(jìn)程名 到達(dá)時(shí)間 運(yùn)行時(shí)間 開(kāi)始時(shí)間 完成時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間n"); for(k=0;k<=N-1;k+) printf("%st%4.2ft%6.2ft%8.2ft%3.2ft%6.2ft%7.2ftn",,pk.arrivetime,pk.servicetime,pk.startti

40、me,pk.finishtime,pk.zztime,pk.dqzztime); getchar(); void sort(jcb *p,int N) /按進(jìn)程到達(dá)時(shí)間進(jìn)行排序 for(int i=0;i<=N-1;i+) for(int j=0;j<=i;j+) if(pi.arrivetime<pj.arrivetime) jcb temp; temp=pi; pi=pj; pj=temp; void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float

41、 &zztime,float &dqzztime,int N) /./按短作業(yè)優(yōu)先原則進(jìn)行進(jìn)程服務(wù)處理 int k; for(k=0;k<=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k<=N-1;k+) pk.zztime=pk.finishtime-pk.a

42、rrivetime; pk.dqzztime=pk.zztime/pk.servicetime; void jcbf(jcb *p,int N) /短作業(yè)優(yōu)先調(diào)度算法處理過(guò)程 float sumzztime=0, sumdqzztime=0,avzztime,avdqzztime;float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;sort(p,N); for(int m=0;m<N-1;m+) if(m=0) pm.finishtime=pm.arrivetime+pm.servic

43、etime; else pm.finishtime=pm-1.finishtime+pm.servicetime; int i=0; for(int n=m+1;n<=N-1;n+) if(pn.arrivetime<=pm.finishtime) i+; float min=pm+1.servicetime; int next=m+1;/m+1=n for(int k=m+1;k<m+i;k+) if(pk+1.servicetime<min) min=pk+1.servicetime; next=k+1; jcb temp; temp=pm+1; pm+1=pnex

44、t; pnext=temp; deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);for(int k=0;k<=N-1;k+) sumzztime=sumzztime+pk.zztime;sumdqzztime=sumdqzztime+ pk.dqzztime;avzztime=sumzztime/N; printf("n該算法的平均周轉(zhuǎn)時(shí)間為:%-

45、.2ft",avzztime);avdqzztime= sumdqzztime/N; printf("該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftnn",avdqzztime); getchar(); void sjfRun() /給主函數(shù)調(diào)用的方法 int N; printf("tt<<-!短作業(yè)優(yōu)先調(diào)度算法!->>n"); printf("請(qǐng)輸入作業(yè)數(shù)目:"); scanf("%d",&N); input(a1,N); jcb *b=a1; jcbf(b,N); Rr.h#

46、include <stdio.h>#include <stdlib.h>using namespace std;/定義時(shí)間片輪轉(zhuǎn)調(diào)度算法結(jié)構(gòu)體,里面包含的有一個(gè)進(jìn)程相關(guān)的信息struct rrchar name10; /作業(yè)名float arrivetime; /作業(yè)到達(dá)時(shí)間float servicetime; /作業(yè)服務(wù)時(shí)間float starttime; /作業(yè)開(kāi)始時(shí)間float finishtime; /作業(yè)結(jié)束時(shí)間 float zztime; /作業(yè)周轉(zhuǎn)時(shí)間float dqzztime; /作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間float avzztime;/作業(yè)平均周轉(zhuǎn)時(shí)間 flo

47、at avdqzztime;/作業(yè)平均帶權(quán)周轉(zhuǎn)時(shí)間 float lefttime; /剩余時(shí)間float stoptime;/停止時(shí)間int timeprice;/時(shí)間片設(shè)置的大小;/時(shí)間片輪轉(zhuǎn)調(diào)度算法從這里開(kāi)始 rr a2100 ;void input(rr *p,int N2)/進(jìn)程信息輸入 int i;cout<<endl; printf(" 請(qǐng)您輸入進(jìn)程的 名字 到達(dá)時(shí)間 服務(wù)時(shí)間: (例如: a 0 100)n"); for(i=0;i<=N2-1;i+) printf(" 請(qǐng)您輸入進(jìn)程%d的信息:t",i+1);scanf(

48、"ttt%s%f%f",&,&pi.arrivetime,&pi.servicetime);void sort(rr *p,int N2) /到達(dá)時(shí)間排序 for(int i=0;i<=N2-1;i+) for(int j=0;j<=i;j+) if(pi.arrivetime<pj.arrivetime) rr temp; temp=pi; pi=pj; pj=temp; void Print(rr *p,float arrivetime,float servicetime,float starttime,float

49、 finishtime,float zztime,float dqzztime,int N2) /屏幕打印輸出處理int k; printf("nt調(diào)用時(shí)間片輪轉(zhuǎn)調(diào)度算法以后進(jìn)程運(yùn)行的順序是: "); printf("%s",); for(k=1;k<N2;k+) printf("->%s",); cout<<endl; printf("n 具體進(jìn)程調(diào)度信息:nn"); printf("t進(jìn)程名 到達(dá)時(shí)間 服務(wù)時(shí)間 開(kāi)始時(shí)間 結(jié)束時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)

50、時(shí)間n"); for(k=0;k<=N2-1;k+) printf("t%st%-.2ft %-.2ft %-.2ft %-.2ft %-.2ft %-.2fn",,pk.arrivetime, pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime); getchar(); void ptt(rr *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,floa

51、t dqzztime,float avzztime,float avdqzztime,float lefttime,int timeprice,int N2) /時(shí)間片設(shè)置處理與程序運(yùn)行 float w=0;int c=0;float stoptime=0;printf("n 請(qǐng)輸入時(shí)間片的值:");cin>>timeprice;sort(p,N2);/排序float d20,h20;for(int k=0;k<=N2-1;k+) dk=pk.servicetime; if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetim

溫馨提示

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

評(píng)論

0/150

提交評(píng)論