




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告題目: 進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)_專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生姓名班級學(xué)號指導(dǎo)教師發(fā)放日期信 息 工 程 學(xué) 院目 錄1 概述12 設(shè)計(jì)原理12.1先來先服務(wù)算法13 詳細(xì)設(shè)計(jì)與編碼13.1 模塊設(shè)計(jì)13.2 系統(tǒng)流程圖23.3 系統(tǒng)詳細(xì)設(shè)計(jì)24 結(jié)果與分析64.1 測試方案64.2 測試結(jié)果64.3 測試結(jié)果分析95 設(shè)計(jì)小結(jié)126 參考文獻(xiàn)13附錄 程序代碼14進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)1 概述選擇一個調(diào)度算法,實(shí)現(xiàn)處理機(jī)調(diào)度,進(jìn)程調(diào)度算法包括:先來先服務(wù)算法,短進(jìn)程優(yōu)先算法,時(shí)間片輪轉(zhuǎn)算法,動態(tài)優(yōu)先級算法??蛇x擇進(jìn)程數(shù)量,本程序包括四種算法,用C或C+語言實(shí)現(xiàn),執(zhí)行時(shí)在主界面選
2、擇算法(可用函數(shù)實(shí)現(xiàn)),進(jìn)入子頁面后輸入進(jìn)程數(shù),(運(yùn)行時(shí)間,優(yōu)先數(shù)由隨機(jī)函數(shù)產(chǎn)生),執(zhí)行,顯示結(jié)果。2 設(shè)計(jì)原理2.1先來先服務(wù)(FCFS)算法 每次調(diào)度都是從后備作業(yè)隊(duì)列中選擇一個或多個最先進(jìn)入該隊(duì)列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源創(chuàng)建進(jìn)程,然后放入就緒隊(duì)列2.2 時(shí)間片輪轉(zhuǎn)法(RR)算法系統(tǒng)將所有的就緒進(jìn)程按先來先服務(wù)的原則排成一個隊(duì)列,每次調(diào)度時(shí),把CPU分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個時(shí)間片。時(shí)間片的大小從幾ms到幾百ms。當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個計(jì)時(shí)器發(fā)出時(shí)鐘中斷請求,調(diào)度程序便據(jù)此信號來停止該進(jìn)程的執(zhí)行,并將它送往就緒隊(duì)列的末尾;然后,再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程
3、,同時(shí)也讓它執(zhí)行一個時(shí)間片。2.3短作業(yè)優(yōu)先(SJF)算法短作業(yè)優(yōu)先調(diào)度算法是從就緒隊(duì)列中選出一個估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞放棄處理機(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)度算法。動態(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)
4、入相應(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)模塊。開始3.2 系統(tǒng)流程圖FCFS算法,對于先到達(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算法,考慮每個作業(yè)的等待時(shí)間長短和估計(jì)需要的執(zhí)行時(shí)間長短,從中選出響應(yī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)
5、結(jié)構(gòu)更加清晰。設(shè)置一個mean()方法,讓用戶選擇不同的進(jìn)程調(diào)度算法,mean()方法返回一個char類型字符,以便在主函數(shù)的switch語句中選擇調(diào)用不同的進(jìn)程調(diào)度方法。(2) 系統(tǒng)模塊1.先來先服務(wù)算法 對于先到達(dá)的進(jìn)程優(yōu)先分配CPU,按照先來先服務(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; s
6、ort(p,N); 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í)間為:%-.2
7、ft",avzztime); avdqzztime= sumdqzztime/N; printf("該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftnn",avdqzztime); 2.短進(jìn)程優(yōu)先算法先找到運(yùn)行時(shí)間最短的程序,然后執(zhí)行,再從剩余的程序中找到運(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,
8、finishtime=0,zztime=0,dqzztime=0;deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,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)
9、時(shí)間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N1; printf("該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftnn",avdqzztime); 3.時(shí)間片輪轉(zhuǎn)算法按照輪轉(zhuǎn)的次序分配給每個程序一定的時(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,servicetim
10、e=0,starttime=0,finishtime=0,zztime=0,dqzztime=0,lefttime=0;ptt(p,arrivetime,servicetime,starttime,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+) s
11、umzztime=sumzztime+pk.zztime;sumdqzztime=sumdqzztime+ pk.dqzztime;avzztime=sumzztime/N2; printf("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)先級從高到低依次執(zhí)行程序。算法:int HRN(int pre)int current=1,i,j;/* 優(yōu)先權(quán)
12、 =(等待時(shí)間+服務(wù)時(shí)間)/服務(wù)時(shí)間*/for(i=0; i<N4; i+)JCBi.waiTime=JCBpre.finTime-JCBi.arrTime; /*等待時(shí)間 =上一個作業(yè)的完成時(shí)間-到達(dá)時(shí)間*/JCBi.priority=(JCBi.waiTime+JCBi.serTime)/JCBi.serTime;for(i=0; i<N4; i+)if(!JCBi.finish)current=i; /*找到第一個還沒完成的作業(yè)*/break;for( j=i; j<N4; j+) /*和后面的作業(yè)比較*/if( !JCBj.finish) /* 還沒完成(運(yùn)行)*/i
13、f(JCBcurrent.arrTime<=JCBpre.finTime) /*如果作業(yè)在上一個作業(yè)完成之前到達(dá)*/if(JCBj.arrTime<=JCBpre.finTime && JCBj.priority>JCBcurrent.priority )current=j;/* 找出到達(dá)時(shí)間在上一個作業(yè)完成之前,優(yōu)先權(quán)高的作業(yè)*/else /* 如果作業(yè)是在上一個作業(yè)完成之后到達(dá)*/if(JCBj.arrTime<JCBcurrent.arrTime)current=j; /* 找出比較早到達(dá)的一個*/if(JCBj.arrTime=JCBcurren
14、t.arrTime) /* 如果同時(shí)到達(dá)*/if(JCBj.priority>JCBcurrent.priority)current=j; /*找出服務(wù)時(shí)間比較短的一個*/return current;/*返回當(dāng)前作業(yè)*/4 結(jié)果與分析4.1 測試方案(1) 測試方案(一) 在主界面輸入1,選擇先來先服務(wù)調(diào)度算法,然后輸入進(jìn)程數(shù)目5,然后輸入各個進(jìn)程信息,觀察測試結(jié)果。(2) 測試方案(二)在主界面輸入2,選擇最短進(jìn)程優(yōu)先調(diào)度算法,然后輸入進(jìn)程數(shù)目5,然后輸入各個進(jìn)程信息,進(jìn)程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一。 (3) 測試方案(三) 在主界面輸入3,選擇時(shí)間片輪轉(zhuǎn)
15、調(diào)度算法,然后輸入進(jìn)程數(shù)目5,然后輸入各個進(jìn)程信息,進(jìn)程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一和二。(4) 測試方案(四)在主界面輸入4,選擇時(shí)間片輪轉(zhuǎn)調(diào)度算法,然后輸入進(jìn)程數(shù)目5,然后輸入各個進(jìn)程信息,進(jìn)程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一和二和三。4.2 測試結(jié)果 (1) 測試方案(一)結(jié)果。輸入測試進(jìn)程數(shù)5,測試用例分別為(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),測試結(jié)果見圖(圖4-1 先來先服務(wù)調(diào)度算法) 圖4-1 先來先服務(wù)調(diào)度算法由運(yùn)行結(jié)果可以看出,短作業(yè)D的服務(wù)時(shí)間最短,但帶權(quán)周轉(zhuǎn)時(shí)間高達(dá)5.5,而長作業(yè)C
16、的服務(wù)時(shí)間為5,帶權(quán)周轉(zhuǎn)時(shí)間僅為2,因此先來先服務(wù)算法比較有利于長作業(yè),而不利于短作業(yè)(2) 測試方案(2)結(jié)果。輸入測試進(jìn)程數(shù)5,測試用例分別為(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),測試結(jié)果見圖(圖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)度。通過比較,短作業(yè)優(yōu)先算法的平均帶權(quán)周轉(zhuǎn)時(shí)間小于先來先服務(wù)算法,提高了系統(tǒng)的吞吐量。因此,相對于短作業(yè)較多或者較為重要的系統(tǒng)中,可選這短作業(yè)優(yōu)先調(diào)度算法。(3) 測試方案(三)結(jié)果。輸入測試進(jìn)程數(shù)5,測試用例分別為
17、(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),測試結(jié)果見圖(圖4-3.1,4-3.2,4-3.3時(shí)間片輪轉(zhuǎn)調(diào)度算法) 圖4-3.1 時(shí)間片輪轉(zhuǎn)調(diào)度算法 圖4-3.2 時(shí)間片輪轉(zhuǎn)調(diào)度算法 圖4-3.3 時(shí)間片輪轉(zhuǎn)調(diào)度算法從多次運(yùn)行結(jié)果來看,時(shí)間片輪轉(zhuǎn)調(diào)度算法不同的時(shí)間片對結(jié)果有很大的影響。(4) 測試方案(四)結(jié)果。輸入測試進(jìn)程數(shù)5,測試用例分別為(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),測試結(jié)果見圖(圖4-4 最高響應(yīng)比優(yōu)先調(diào)度算法) 圖4-4 最高響應(yīng)比優(yōu)先調(diào)度算法由運(yùn)行結(jié)果可以看出,該算法既照顧了短作業(yè),有考慮了作業(yè)到
18、達(dá)的先后次序,不會使長作業(yè)長期得不到服務(wù)。因此,該算法是一個很好的折衷4.3 測試結(jié)果分析四種調(diào)度算法各有優(yōu)劣。先來先服務(wù)算法比較有利于長進(jìn)程,而不利于短進(jìn)程,有利于CPU 繁忙的進(jìn)程,而不利于I/O 繁忙的進(jìn)程。短作業(yè)優(yōu)先調(diào)度算法相比FCFS 算法,該算法可改善平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間,縮短進(jìn)程的等待時(shí)間,提高系統(tǒng)的吞吐量。缺點(diǎn)是對長進(jìn)程非常不利,可能長時(shí)間得不到執(zhí)行,且未能依據(jù)進(jìn)程的緊迫程度來劃分執(zhí)行的優(yōu)先級,以及難以準(zhǔn)確估計(jì)進(jìn)程的執(zhí)行時(shí)間,從而影響調(diào)度性能。時(shí)間片輪轉(zhuǎn)調(diào)度算法的特點(diǎn)是簡單易行、平均響應(yīng)時(shí)間短,但不利于處理緊急作業(yè)。在時(shí)間片輪轉(zhuǎn)算法中,時(shí)間片的大小對系統(tǒng)性能的影響很大
19、,因此時(shí)間片的大小應(yīng)選擇恰當(dāng)。高響應(yīng)比優(yōu)先調(diào)度策略是對FCFS方式和SJF方式的一種綜合平衡,同時(shí)考慮每個作業(yè)的等待時(shí)間長短和估計(jì)需要的執(zhí)行時(shí)間長短,從中選出響應(yīng)比最高的作業(yè)投入執(zhí)行。5 設(shè)計(jì)小結(jié)經(jīng)過一周的努力,課程設(shè)計(jì)基本完成了,這次課程設(shè)計(jì)培養(yǎng)了我們耐心、慎密、全面地考慮問題的能力,從而加快了問題解決的速度、提高了個人的工作效率,以及鍛煉圍繞問題在短時(shí)間內(nèi)得以解決的頑強(qiáng)意志。課程設(shè)計(jì)是我們專業(yè)課程知識綜合應(yīng)用的實(shí)踐訓(xùn)練,也是為我們以后的工作夯實(shí)基礎(chǔ)。通過改程序?qū)Σ僮飨到y(tǒng)的基礎(chǔ)知識了解得更透徹了,同時(shí)對磁盤調(diào)度的四種算法先來先服務(wù)算法,短進(jìn)程優(yōu)先調(diào)度算法,時(shí)間片輪轉(zhuǎn)調(diào)度算法,動態(tài)優(yōu)先級調(diào)度有
20、了更深刻的理解和掌握,使我能夠?yàn)檫M(jìn)程調(diào)度選擇適當(dāng)?shù)乃惴?,提高CPU工作效率。進(jìn)行進(jìn)程調(diào)度程序設(shè)計(jì)的過程中,得到老師的大力指導(dǎo)和同學(xué)的支持,在此向他們表示感謝。經(jīng)過自己的動手操作和同學(xué)老師的指導(dǎo)我成功的做出了課程設(shè)計(jì)自己感到很高興。在編寫程序的過程中,我們的能力得到了提高,同時(shí)養(yǎng)成了科學(xué)、嚴(yán)謹(jǐn)?shù)淖黠L(fēng)和習(xí)慣。為此要感謝信息學(xué)院開設(shè)了這門操作系統(tǒng)課程設(shè)計(jì),為我們提供了進(jìn)一步學(xué)習(xí)算法、操作系統(tǒng)和鞏固C語言程序計(jì)設(shè)的平臺。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)書
21、M.太原理工出版社,2006.4 湯小丹,梁紅兵,哲鳳屏,湯子贏.計(jì)算機(jī)操作系統(tǒng)(第五版)M.西安:西安電子科技大學(xué)出版社,2007.5 何欽銘,顏暉.C語言程序設(shè)計(jì)M.北京:高等教育出版社,2008.6 胡學(xué)剛,數(shù)據(jù)結(jié)構(gòu)(C語言版)M.北京:高等教育出版社,2008.7 張小進(jìn),Linux系統(tǒng)應(yīng)用基礎(chǔ)教程M.北京:機(jī)械工業(yè)出版社,2008.8 孟慶昌,C語言程序設(shè)計(jì)M.北京:人民郵電出版社,2006.7 附錄 程序代碼Main.cpp#include <cstdlib>#include <iostream>#include <iomanip> #inclu
22、de "fcfs.h” /先來先服務(wù)#include "sjf.h" /短作業(yè)優(yōu)先#include "rr.h"/時(shí)間片輪轉(zhuǎn)#include "hrrn.h" /高響應(yīng)比優(yōu)先"using namespace std;char menu()/用來輸出相關(guān)信息的函數(shù) char cse1;while(1)system("cls");fflush(stdin);cout<<endl; cout<<endl; cout<<"t"<<&qu
23、ot; "<<"t 進(jìn)程調(diào)度算法模擬 "<<"tt"<<" "<<endl;cout<<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 1.先來先服務(wù)調(diào)度算法 "<<"tt"<<" "<<endl;cout<
24、;<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 2.短作業(yè)優(yōu)先調(diào)度算法 "<<"tt"<<" "<<endl;cout<<"t"<<" "<<endl;cout<<"t"<<" "<&l
25、t;"tt 3.時(shí)間片輪轉(zhuǎn)調(diào)度算法"<<"ttt"<<" "<<endl; cout<<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 4.最高響應(yīng)比優(yōu)先調(diào)度算法 "<<"tt"<<" "<<endl; cout<<&qu
26、ot;t"<<" "<<endl;cout<<"t"<<" "<<"tt 0.退出系統(tǒng) "<<"tt"<<" "<<endl; cout<<endl;cout<<endl;cout<<"tt 請輸入您的選擇(0/1/2/3/4):"cse1=getchar();if(cse1<'0'|cse1&
27、gt;'4')cout<<endl;cout<<" o()o 您的輸入有誤!請重新輸入正確的字符 o()o "<<endl;cout<<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':
28、 rrRun();break;case '4':hrrnRun();break;case '0':exit(0); system("PAUSE"); return EXIT_SUCCESS;fcfs.h#include <stdio.h>#include <stdlib.h>using namespace std;struct fcfs /定義先來先服務(wù)調(diào)度算法結(jié)構(gòu)體char name10; /./作業(yè)名float arrivetime; /作業(yè)到達(dá)時(shí)間float servicetime; /作業(yè)服務(wù)float sta
29、rttime; /作業(yè)開始時(shí)間float finishtime; /作業(yè)完成時(shí)間float zztime; /帶權(quán)周轉(zhuǎn)時(shí)間float dqzztime; /平均帶權(quán)周轉(zhuǎn)時(shí)間; fcfs a100;/定義存放進(jìn)程的數(shù)組void input(fcfs *p,int N) /輸入處理 int i; cout<<endl; printf(" 請您輸入進(jìn)程的 名字 到達(dá)時(shí)間 服務(wù)時(shí)間: (例如: a 0 100)nn"); for(i=0;i<=N-1;i+) printf(" 請您輸入進(jìn)程%d的信息:t",i+1);scanf("tt
30、t%s%f%f",&,&pi.arrivetime,&pi.servicetime); void Print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) /屏幕輸出處理int k; printf("nn調(diào)用先來先服務(wù)算法以后進(jìn)程運(yùn)行的順序是: "); printf("%s",); for(k=1;k<N;k+)
31、printf("->%s",); cout<<endl; printf("n 具體進(jìn)程調(diào)度信息:n"); printf("t進(jìn)程名 到達(dá)時(shí)間 服務(wù)時(shí)間 開始時(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,p
32、k.zztime,pk.dqzztime); getchar(); /此處必須要有這個函數(shù),否則就看不到顯示器上面的輸出,可以看到的結(jié)果只是一閃而過的一個框剪 void sort(fcfs *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) fcfs temp; temp=pi; pi=pj; pj=temp; void deal(fcfs *p, float arrivetime,float servicetime,float
33、starttime,float finishtime,float &zztime,float &dqzztime,int N) /運(yùn)行階段,根據(jù)先來先服務(wù)的原則進(jìn)行處理 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
34、;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; 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,finishtim
35、e,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í)間為:%-.2ft",avzztime); avdqzztime= sumdqzztime/N; printf("
36、;該算法的平均帶權(quán)周轉(zhuǎn)時(shí)間為:%-.2ftnn",avdqzztime); void fcfsRun()/給主函數(shù)調(diào)用的方法int N; cout<<endl;cout<<endl; printf("tt<<-!先來先服務(wù)調(diào)度算法!->>n"); cout<<endl;printf("輸入進(jìn)程數(shù)目:"); scanf("%d",&N); input(a,N); FCFS(a,N); getchar(); /先來先服務(wù)算法到此結(jié)束 Sjf.h#include&
37、lt;stdio.h>struct jcb /作業(yè)控制塊JCB,定義為結(jié)構(gòu)體 char name10; /作業(yè)名 float arrivetime; /作業(yè)到達(dá)時(shí)間 float servicetime;/作業(yè)服務(wù)時(shí)間 float starttime; /作業(yè)開始執(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
38、uot; 請您輸入進(jìn)程的 名字 到達(dá)時(shí)間 服務(wù)時(shí)間: (例如: a 0 100)n"); for(i=0;i<=N-1;i+) printf(" 請您輸入進(jìn)程%d的信息:t",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 dqz
39、ztime,int N) /屏幕輸出處理 int k;printf("nt調(diào)用最短進(jìn)程優(yōu)先調(diào)度算法以后進(jìn)程的調(diào)度順序?yàn)?");printf("%s",);for(k=1;k<N;k+)printf("->%s",); cout<<endl; printf("n給個進(jìn)程具體調(diào)度信息如下:n");printf("n進(jìn)程名 到達(dá)時(shí)間 運(yùn)行時(shí)間 開始時(shí)間 完成時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間n"); for(k=0;k<=N-1;k+) printf
40、("%st%4.2ft%6.2ft%8.2ft%3.2ft%6.2ft%7.2ftn",,pk.arrivetime,pk.servicetime,pk.starttime,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;
41、 pj=temp; void deal(jcb *p, float arrivetime,float servicetime,float starttime,float finishtime,float &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.finisht
42、ime; 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 jcbf(jcb *p,int N) /短作業(yè)優(yōu)先調(diào)度算法處理過程 float sumzztime=0, sumdqzztime=0,avzztime,avdqzztime;float arrivetime=0,servicetime=0,starttime=0,finishtime=0,
43、zztime=0,dqzztime=0;sort(p,N); for(int m=0;m<N-1;m+) if(m=0) pm.finishtime=pm.arrivetime+pm.servicetime; 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&
44、lt;m+i;k+) if(pk+1.servicetime<min) min=pk+1.servicetime; next=k+1; jcb temp; temp=pm+1; pm+1=pnext; 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=sumzzt
45、ime+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); getchar(); void sjfRun() /給主函數(shù)調(diào)用的方法 int N; printf("tt<<-!短作業(yè)優(yōu)先調(diào)度算法!->>n");
46、 printf("請輸入作業(yè)數(shù)目:"); scanf("%d",&N); input(a1,N); jcb *b=a1; jcbf(b,N); Rr.h#include <stdio.h>#include <stdlib.h>using namespace std;/定義時(shí)間片輪轉(zhuǎn)調(diào)度算法結(jié)構(gòu)體,里面包含的有一個進(jìn)程相關(guān)的信息struct rrchar name10; /作業(yè)名float arrivetime; /作業(yè)到達(dá)時(shí)間float servicetime; /作業(yè)服務(wù)時(shí)間float starttime; /作業(yè)開始時(shí)
47、間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í)間 float avdqzztime;/作業(yè)平均帶權(quán)周轉(zhuǎn)時(shí)間 float lefttime; /剩余時(shí)間float stoptime;/停止時(shí)間int timeprice;/時(shí)間片設(shè)置的大小;/時(shí)間片輪轉(zhuǎn)調(diào)度算法從這里開始 rr a2100 ;void input(rr *p,int N2)/進(jìn)程信息輸入 int i;cout<<endl; printf(" 請您輸入進(jìn)程的 名字 到
48、達(dá)時(shí)間 服務(wù)時(shí)間: (例如: a 0 100)n"); for(i=0;i<=N2-1;i+) printf(" 請您輸入進(jìn)程%d的信息:t",i+1);scanf("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 tem
49、p; temp=pi; pi=pj; pj=temp; void Print(rr *p,float arrivetime,float servicetime,float starttime,float 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",);
50、 cout<<endl; printf("n 具體進(jìn)程調(diào)度信息:nn"); printf("t進(jìn)程名 到達(dá)時(shí)間 服務(wù)時(shí)間 開始時(shí)間 結(jié)束時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(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();
51、 void ptt(rr *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float 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 請輸入時(shí)間片的值:");cin>>timeprice;sort(p,N2);/排序float d20,h20;for(int k=0;k
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年小學(xué)教育學(xué)考試卷及答案
- 2025年房地產(chǎn)經(jīng)紀(jì)人考試題及答案
- 2025年軟件工程理論與實(shí)踐復(fù)習(xí)試卷及答案
- 2025年心理學(xué)基礎(chǔ)知識考試題及答案
- 2025年金融專業(yè)考試試卷及答案
- 跨國法律文件保密碎紙機(jī)租賃與售后服務(wù)協(xié)議
- 地下綜合管廊建設(shè)及運(yùn)維一體化承包合同
- 區(qū)域獨(dú)家品牌授權(quán)補(bǔ)充協(xié)議
- 家電品牌維修技師勞務(wù)派遣服務(wù)合同
- 影視作品網(wǎng)絡(luò)播放權(quán)獨(dú)家代理及收益分成合同
- 2025年濟(jì)南市中區(qū)九年級中考數(shù)學(xué)一??荚囋囶}(含答案)
- 大模型原理與技術(shù)-課件 chap6 大模型微調(diào)
- 16J914-1 公用建筑衛(wèi)生間
- 消費(fèi)者心理與行為分析PPT(第四版)完整全套教學(xué)課件
- 冷卻塔使用說明書
- 腌臘肉制品生產(chǎn)車間工藝布置圖
- 配電柜安裝規(guī)則GGD
- 漁夫和金魚的故事.ppt
- 大金空調(diào)設(shè)定代碼表
- DCDC變換器電力電子課程設(shè)計(jì)報(bào)告
- GB 19295-2021 食品安全國家標(biāo)準(zhǔn) 速凍面米與調(diào)制食品(高清版)
評論
0/150
提交評論