




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上操作系統(tǒng)課程設(shè)計報告題目: 進程調(diào)度算法的模擬實現(xiàn)_專業(yè)計算機科學與技術(shù)學生姓名班級學號指導(dǎo)教師發(fā)放日期2015.1.30信 息 工 程 學 院專心-專注-專業(yè)目 錄進程調(diào)度算法的模擬實現(xiàn)1 概述選擇一個調(diào)度算法,實現(xiàn)處理機調(diào)度,進程調(diào)度算法包括:先來先服務(wù)算法,短進程優(yōu)先算法,時間片輪轉(zhuǎn)算法,動態(tài)優(yōu)先級算法。可選擇進程數(shù)量,本程序包括四種算法,用C或C+語言實現(xiàn),執(zhí)行時在主界面選擇算法(可用函數(shù)實現(xiàn)),進入子頁面后輸入進程數(shù),(運行時間,優(yōu)先數(shù)由隨機函數(shù)產(chǎn)生),執(zhí)行,顯示結(jié)果。2 設(shè)計原理2.1先來先服務(wù)(FCFS)算法 每次調(diào)度都是從后備作業(yè)隊列中選擇一個或多個最
2、先進入該隊列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源創(chuàng)建進程,然后放入就緒隊列2.2 時間片輪轉(zhuǎn)法(RR)算法系統(tǒng)將所有的就緒進程按先來先服務(wù)的原則排成一個隊列,每次調(diào)度時,把CPU分配給隊首進程,并令其執(zhí)行一個時間片。時間片的大小從幾ms到幾百ms。當執(zhí)行的時間片用完時,由一個計時器發(fā)出時鐘中斷請求,調(diào)度程序便據(jù)此信號來停止該進程的執(zhí)行,并將它送往就緒隊列的末尾;然后,再把處理機分配給就緒隊列中新的隊首進程,同時也讓它執(zhí)行一個時間片。2.3短作業(yè)優(yōu)先(SJF)算法短作業(yè)優(yōu)先調(diào)度算法是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞
3、放棄處理機時再重新調(diào)度。 2.4最高優(yōu)先權(quán)優(yōu)先(HRRN)算法 優(yōu)先權(quán)調(diào)度算法是為了照顧緊迫型作業(yè),使之在進入系統(tǒng)后便獲得優(yōu)先處理,引入最高優(yōu)先權(quán)優(yōu)先調(diào)度算法。動態(tài)優(yōu)先權(quán)是指在創(chuàng)建進程時所賦予的優(yōu)先權(quán),是可以隨進程的推進或隨其等待時間的增加而改變的,以便獲得更好的調(diào)度性能。 3 詳細設(shè)計與編碼3.1 模塊設(shè)計(1) 進入系統(tǒng)模塊,進入登陸界面。(3) 菜單選擇模塊。選擇相應(yīng)的進程調(diào)度方式,選擇相應(yīng)的數(shù)字,進入相應(yīng)的功能。(4) 算法模塊。選擇相應(yīng)的進程調(diào)度算法。(5) 顯現(xiàn)輸出模塊。顯示每種進程調(diào)度算法情況。(6) 平均周轉(zhuǎn)時間與平均帶權(quán)周轉(zhuǎn)時間的計算結(jié)果。(7) 退出系統(tǒng)模塊。開始3.2 系
4、統(tǒng)流程圖FCFS算法,對于先到達的進程優(yōu)先分配CPUSJF算法,每次都從未完成的隊列中選取服務(wù)時間最短的作業(yè)進行調(diào)度RR算法,每次調(diào)度時將CPU 分派給隊首進程,按照時間片依次執(zhí)行進程HRRN算法,考慮每個作業(yè)的等待時間長短和估計需要的執(zhí)行時間長短,從中選出最高的作業(yè)投入執(zhí)行。結(jié)束3.3 系統(tǒng)詳細設(shè)計(1) 系統(tǒng)主界面設(shè)計(包含登陸模塊設(shè)計)首先將各種進程調(diào)度算法放入不同的頭文件,在主函數(shù)引用,是系統(tǒng)結(jié)構(gòu)更加清晰。設(shè)置一個mean()方法,讓用戶選擇不同的進程調(diào)度算法,mean()方法返回一個char類型字符,以便在主函數(shù)的switch語句中選擇調(diào)用不同的進程調(diào)度方法。(2) 系統(tǒng)模塊1.先來
5、先服務(wù)算法 對于先到達的進程優(yōu)先分配CPU,按照先來先服務(wù)的原則依次執(zhí)行各進程。算法: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)時間為:%-.2ft",avzztime); avdqzztime= sumdqzztime/N; printf("該算法的平均帶權(quán)周轉(zhuǎn)時間為:%-.2ftnn",avdqzztim
7、e); 2.短進程優(yōu)先算法先找到運行時間最短的程序,然后執(zhí)行,再從剩余的程序中找到運行時間最短的在執(zhí)行,依次每次都執(zhí)行運行時間最短的,直到程序執(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)時間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N1; printf("該算法的平均帶權(quán)周轉(zhuǎn)時間為:%-.2ftnn",a
9、vdqzztime); 3.時間片輪轉(zhuǎn)算法按照輪轉(zhuǎn)的次序分配給每個程序一定的時間執(zhí)行,執(zhí)行完成后執(zhí)行后面的進程 ,依次循環(huán)執(zhí)行直到所有進程執(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)時間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N2; printf("該算法的平均帶權(quán)周轉(zhuǎn)時間為:%-.2ftn",avdqzztime);getchar(); 4.最高響應(yīng)比優(yōu)先算法按照優(yōu)先級從高到低依次執(zhí)行程序。算法:int HRN(int pre)int current=1,i,j;/* 優(yōu)先權(quán) =(等待時間+服務(wù)時間)/服務(wù)時間*/for(i=0; i<N4; i+)JCBi.waiTime=JCBpre.finTime-JCBi.arrTime; /*等待時間 =上一個作業(yè)的完
12、成時間-到達時間*/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) /* 還沒完成(運行)*/if(JCBcurrent.arrTime<=JCBpre.finTime) /*如果作業(yè)在上一個作業(yè)完成之前到達*/if(JCBj.arrTime<=JCBpre.finTime &a
13、mp;& JCBj.priority>JCBcurrent.priority )current=j;/* 找出到達時間在上一個作業(yè)完成之前,優(yōu)先權(quán)高的作業(yè)*/else /* 如果作業(yè)是在上一個作業(yè)完成之后到達*/if(JCBj.arrTime<JCBcurrent.arrTime)current=j; /* 找出比較早到達的一個*/if(JCBj.arrTime=JCBcurrent.arrTime) /* 如果同時到達*/if(JCBj.priority>JCBcurrent.priority)current=j; /*找出服務(wù)時間比較短的一個*/return cu
14、rrent;/*返回當前作業(yè)*/4 結(jié)果與分析4.1 測試方案(1) 測試方案(一) 在主界面輸入1,選擇先來先服務(wù)調(diào)度算法,然后輸入進程數(shù)目5,然后輸入各個進程信息,觀察測試結(jié)果。(2) 測試方案(二)在主界面輸入2,選擇最短進程優(yōu)先調(diào)度算法,然后輸入進程數(shù)目5,然后輸入各個進程信息,進程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一。 (3) 測試方案(三) 在主界面輸入3,選擇時間片輪轉(zhuǎn)調(diào)度算法,然后輸入進程數(shù)目5,然后輸入各個進程信息,進程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一和二。(4) 測試方案(四)在主界面輸入4,選擇時間片輪轉(zhuǎn)調(diào)度算法,然后輸入進程數(shù)目5
15、,然后輸入各個進程信息,進程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一和二和三。4.2 測試結(jié)果 (1) 測試方案(一)結(jié)果。輸入測試進程數(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)度算法由運行結(jié)果可以看出,短作業(yè)D的服務(wù)時間最短,但帶權(quán)周轉(zhuǎn)時間高達5.5,而長作業(yè)C的服務(wù)時間為5,帶權(quán)周轉(zhuǎn)時間僅為2,因此先來先服務(wù)算法比較有利于長作業(yè),而不利于短作業(yè)(2) 測試方案(2)結(jié)果。輸入測試進程數(shù)5,測試用例分別為(A 0 4),(B 1 3),(C 2 5),(
16、D 3 2),(E 4 4),測試結(jié)果見圖(圖4-2 短作業(yè)優(yōu)先調(diào)度算法) 圖4-2 短作業(yè)優(yōu)先調(diào)度算法由運行結(jié)果可以看出,短作業(yè)優(yōu)先算法每次都從未完成的隊列中選取服務(wù)時間最短的作業(yè)進行調(diào)度。通過比較,短作業(yè)優(yōu)先算法的平均帶權(quán)周轉(zhuǎn)時間小于先來先服務(wù)算法,提高了系統(tǒng)的吞吐量。因此,相對于短作業(yè)較多或者較為重要的系統(tǒng)中,可選這短作業(yè)優(yōu)先調(diào)度算法。(3) 測試方案(三)結(jié)果。輸入測試進程數(shù)5,測試用例分別為(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時間片輪轉(zhuǎn)調(diào)度算法) 圖4-3.1 時間片輪轉(zhuǎn)調(diào)度算法 圖4-3.
17、2 時間片輪轉(zhuǎn)調(diào)度算法 圖4-3.3 時間片輪轉(zhuǎn)調(diào)度算法從多次運行結(jié)果來看,時間片輪轉(zhuǎn)調(diào)度算法不同的時間片對結(jié)果有很大的影響。(4) 測試方案(四)結(jié)果。輸入測試進程數(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)度算法由運行結(jié)果可以看出,該算法既照顧了短作業(yè),有考慮了作業(yè)到達的先后次序,不會使長作業(yè)長期得不到服務(wù)。因此,該算法是一個很好的折衷4.3 測試結(jié)果分析四種調(diào)度算法各有優(yōu)劣。先來先服務(wù)算法比較有利于長進程,而不利于短進程,有利于CPU 繁忙的進程,而不利于I
18、/O 繁忙的進程。短作業(yè)優(yōu)先調(diào)度算法相比FCFS 算法,該算法可改善平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間,縮短進程的等待時間,提高系統(tǒng)的吞吐量。缺點是對長進程非常不利,可能長時間得不到執(zhí)行,且未能依據(jù)進程的緊迫程度來劃分執(zhí)行的優(yōu)先級,以及難以準確估計進程的執(zhí)行時間,從而影響調(diào)度性能。時間片輪轉(zhuǎn)調(diào)度算法的特點是簡單易行、平均響應(yīng)時間短,但不利于處理緊急作業(yè)。在時間片輪轉(zhuǎn)算法中,時間片的大小對系統(tǒng)性能的影響很大,因此時間片的大小應(yīng)選擇恰當。高響應(yīng)比優(yōu)先調(diào)度策略是對FCFS方式和SJF方式的一種綜合平衡,同時考慮每個作業(yè)的等待時間長短和估計需要的執(zhí)行時間長短,從中選出最高的作業(yè)投入執(zhí)行。5 設(shè)計小結(jié)經(jīng)過一
19、周的努力,課程設(shè)計基本完成了,這次課程設(shè)計培養(yǎng)了我們耐心、慎密、全面地考慮問題的能力,從而加快了問題解決的速度、提高了個人的工作效率,以及鍛煉圍繞問題在短時間內(nèi)得以解決的頑強意志。課程設(shè)計是我們專業(yè)課程知識綜合應(yīng)用的實踐訓(xùn)練,也是為我們以后的工作夯實基礎(chǔ)。通過改程序?qū)Σ僮飨到y(tǒng)的基礎(chǔ)知識了解得更透徹了,同時對磁盤調(diào)度的四種算法先來先服務(wù)算法,短進程優(yōu)先調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法,動態(tài)優(yōu)先級調(diào)度有了更深刻的理解和掌握,使我能夠為進程調(diào)度選擇適當?shù)乃惴?,提高CPU工作效率。進行進程調(diào)度程序設(shè)計的過程中,得到老師的大力指導(dǎo)和同學的支持,在此向他們表示感謝。經(jīng)過自己的動手操作和同學老師的指導(dǎo)我成功的做
20、出了課程設(shè)計自己感到很高興。在編寫程序的過程中,我們的能力得到了提高,同時養(yǎng)成了科學、嚴謹?shù)淖黠L和習慣。為此要感謝信息學院開設(shè)了這門操作系統(tǒng)課程設(shè)計,為我們提供了進一步學習算法、操作系統(tǒng)和鞏固C語言程序計設(shè)的平臺。6 參考文獻1 嚴蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)M.清華大學出版社,1997.2 張堯?qū)W,史美林. 計算機操作系統(tǒng)教程M.清華大學出版社,2000.3 孫靜宇. 計算機操作系統(tǒng)課程設(shè)計指導(dǎo)書M.太原理工出版社,2006.4 湯小丹,梁紅兵,哲鳳屏,湯子贏.計算機操作系統(tǒng)(第五版)M.西安:西安電子科技大學出版社,2007.5 何欽銘,顏暉.C語言程序設(shè)計M.北京:高等教育出版社,2008.
21、6 胡學剛,數(shù)據(jù)結(jié)構(gòu)(C語言版)M.北京:高等教育出版社,2008.7 張小進,Linux系統(tǒng)應(yīng)用基礎(chǔ)教程M.北京:機械工業(yè)出版社,2008.8 孟慶昌,C語言程序設(shè)計M.北京:人民郵電出版社,2006.7 附錄 程序代碼Main.cpp#include <cstdlib>#include <iostream>#include <iomanip> #include "fcfs.h” /先來先服務(wù)#include "sjf.h" /短作業(yè)優(yōu)先#include "rr.h"/時間片輪轉(zhuǎn)#include "
22、;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"<<" "<<"t 進程調(diào)度算法模擬 "<<"tt"<<" "<<endl;cout
23、<<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 1.先來先服務(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.時間片輪轉(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 請輸入您的選擇(0/1/2/3/4):"cse1=getchar();if(cse1<'0'|cse1>'4')cout<<endl;cout<<" o()o 您的輸入有誤!請重新輸入正確的字符 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 /定義先來先服務(wù)調(diào)度算法結(jié)構(gòu)體char name10; /./作業(yè)名float arrivetime; /作業(yè)到達時間float servicetime; /作業(yè)服務(wù)float starttime; /作業(yè)開始時間float finishtime; /作業(yè)完成時間float zztime; /帶權(quán)周轉(zhuǎn)時間float dqzztime; /平均帶權(quán)周轉(zhuǎn)時間; fcfs a100;/定義
29、存放進程的數(shù)組void input(fcfs *p,int N) /輸入處理 int i; cout<<endl; printf(" 請您輸入進程的 名字 到達時間 服務(wù)時間: (例如: a 0 100)nn"); for(i=0;i<=N-1;i+) printf(" 請您輸入進程%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)用先來先服務(wù)算法以后進程運行的順序是: "); printf("%s",); for(k=1;k<N;k+) printf("->%s",); cout<<endl; printf("n 具體進程調(diào)度信息:n"); printf("
31、;t進程名 到達時間 服務(wù)時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間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(); /此處必須要有這個函數(shù),否則就看不到顯示器上面的輸出,可以看到的結(jié)果只是一閃而過的一個框剪 void sort(fcfs *p,int
32、 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) /運行階段,根據(jù)先來先服務(wù)的原則進行處理 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)時間為:%-.2ft",avzztime); avdqzztime= sumdqzztime/N; printf("該算法的平均帶權(quán)周轉(zhuǎn)時間為:%-.2ftnn",avdqzztime); void fcfsRun()/給主函數(shù)調(diào)用的方法int N; cout<<endl;cout<&l
36、t;endl; printf("tt<<-!先來先服務(wù)調(diào)度算法!->>n"); cout<<endl;printf("輸入進程數(shù)目:"); scanf("%d",&N); input(a,N); FCFS(a,N); getchar(); /先來先服務(wù)算法到此結(jié)束 Sjf.h#include<stdio.h>struct jcb /作業(yè)控制塊JCB,定義為結(jié)構(gòu)體 char name10; /作業(yè)名 float arrivetime; /作業(yè)到達時間 float serviceti
37、me;/作業(yè)服務(wù)時間 float starttime; /作業(yè)開始執(zhí)行時間 float finishtime; /作業(yè)完成時間 float zztime; /作業(yè)周轉(zhuǎn)時間 float dqzztime; /作業(yè)平均周轉(zhuǎn)時間; jcb a1100; /最多能管理的作業(yè)數(shù)目void input(jcb *p,int N) /輸入處理 int i;cout<<endl; printf(" 請您輸入進程的 名字 到達時間 服務(wù)時間: (例如: a 0 100)n"); for(i=0;i<=N-1;i+) printf(" 請您輸入進程%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)用最短進程優(yōu)先調(diào)度算法以后進程的調(diào)度順序為:");printf("%s",p0.nam
39、e);for(k=1;k<N;k+)printf("->%s",); cout<<endl; printf("n給個進程具體調(diào)度信息如下:n");printf("n進程名 到達時間 運行時間 開始時間 完成時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間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) /按進程到達時間進行排序 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)先原則進行進程服務(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)度算法處理過程 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)時間為:%-
45、.2ft",avzztime);avdqzztime= sumdqzztime/N; printf("該算法的平均帶權(quán)周轉(zhuǎn)時間為:%-.2ftnn",avdqzztime); getchar(); void sjfRun() /給主函數(shù)調(diào)用的方法 int N; printf("tt<<-!短作業(yè)優(yōu)先調(diào)度算法!->>n"); printf("請輸入作業(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;/定義時間片輪轉(zhuǎn)調(diào)度算法結(jié)構(gòu)體,里面包含的有一個進程相關(guān)的信息struct rrchar name10; /作業(yè)名float arrivetime; /作業(yè)到達時間float servicetime; /作業(yè)服務(wù)時間float starttime; /作業(yè)開始時間float finishtime; /作業(yè)結(jié)束時間 float zztime; /作業(yè)周轉(zhuǎn)時間float dqzztime; /作業(yè)帶權(quán)周轉(zhuǎn)時間float avzztime;/作業(yè)平均周轉(zhuǎn)時間 flo
47、at avdqzztime;/作業(yè)平均帶權(quán)周轉(zhuǎn)時間 float lefttime; /剩余時間float stoptime;/停止時間int timeprice;/時間片設(shè)置的大小;/時間片輪轉(zhuǎn)調(diào)度算法從這里開始 rr a2100 ;void input(rr *p,int N2)/進程信息輸入 int i;cout<<endl; printf(" 請您輸入進程的 名字 到達時間 服務(wù)時間: (例如: a 0 100)n"); for(i=0;i<=N2-1;i+) printf(" 請您輸入進程%d的信息:t",i+1);scanf(
48、"ttt%s%f%f",&,&pi.arrivetime,&pi.servicetime);void sort(rr *p,int N2) /到達時間排序 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)用時間片輪轉(zhuǎn)調(diào)度算法以后進程運行的順序是: "); printf("%s",); for(k=1;k<N2;k+) printf("->%s",); cout<<endl; printf("n 具體進程調(diào)度信息:nn"); printf("t進程名 到達時間 服務(wù)時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)
50、時間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è)置處理與程序運行 float w=0;int c=0;float stoptime=0;printf("n 請輸入時間片的值:");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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高鐵服務(wù)培訓(xùn)體系構(gòu)建
- 2025年監(jiān)理個人年終總結(jié)模版
- 黨員領(lǐng)導(dǎo)干部培訓(xùn)心得體會模版
- 《繪畫教程-》課件
- 砸墻安全技術(shù)講解
- 新質(zhì)生產(chǎn)力競賽
- 《營銷概述模板》課件
- 保潔工作流程培訓(xùn)
- 小腸類癌的臨床護理
- 【課件】安全防護體系構(gòu)建技術(shù)環(huán)節(jié)詳解
- 2024年江蘇省泰州市保安員理論考試題庫及答案(完整)
- 變崗調(diào)薪協(xié)議書模板
- TSDYYXH 0001-2024 已上市化學藥品變更有效期備案申報技術(shù)要求
- 試析信仰的性質(zhì)及其在社會生活中的作用
- GB/T 44102-2024跳繩課程學生運動能力測評規(guī)范
- 裝配式結(jié)構(gòu)吊裝施工計算書
- 新修訂公司法專題講座課件
- 機修鉗工高級技師理論題庫
- 小學數(shù)學大單元教學實施策略
- 《海上風電場安全標識設(shè)置設(shè)計規(guī)范》
- 創(chuàng)造心智與創(chuàng)新訓(xùn)練智慧樹知到期末考試答案2024年
評論
0/150
提交評論