




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、操作系統(tǒng)課程設計報告題目: 進程調(diào)度算法的模擬實現(xiàn)_專業(yè)計算機科學與技術學生姓名班級學號指導教師發(fā)放日期信 息 工 程 學 院目 錄1 概述12 設計原理12.1先來先服務算法13 詳細設計與編碼13.1 模塊設計13.2 系統(tǒng)流程圖23.3 系統(tǒng)詳細設計24 結(jié)果與分析64.1 測試方案64.2 測試結(jié)果64.3 測試結(jié)果分析95 設計小結(jié)126 參考文獻13附錄 程序代碼14進程調(diào)度算法的模擬實現(xiàn)1 概述選擇一個調(diào)度算法,實現(xiàn)處理機調(diào)度,進程調(diào)度算法包括:先來先服務算法,短進程優(yōu)先算法,時間片輪轉(zhuǎn)算法,動態(tài)優(yōu)先級算法??蛇x擇進程數(shù)量,本程序包括四種算法,用C或C+語言實現(xiàn),執(zhí)行時在主界面選
2、擇算法(可用函數(shù)實現(xiàn)),進入子頁面后輸入進程數(shù),(運行時間,優(yōu)先數(shù)由隨機函數(shù)產(chǎn)生),執(zhí)行,顯示結(jié)果。2 設計原理2.1先來先服務(FCFS)算法 每次調(diào)度都是從后備作業(yè)隊列中選擇一個或多個最先進入該隊列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源創(chuàng)建進程,然后放入就緒隊列2.2 時間片輪轉(zhuǎn)法(RR)算法系統(tǒng)將所有的就緒進程按先來先服務的原則排成一個隊列,每次調(diào)度時,把CPU分配給隊首進程,并令其執(zhí)行一個時間片。時間片的大小從幾ms到幾百ms。當執(zhí)行的時間片用完時,由一個計時器發(fā)出時鐘中斷請求,調(diào)度程序便據(jù)此信號來停止該進程的執(zhí)行,并將它送往就緒隊列的末尾;然后,再把處理機分配給就緒隊列中新的隊首進程
3、,同時也讓它執(zhí)行一個時間片。2.3短作業(yè)優(yōu)先(SJF)算法短作業(yè)優(yōu)先調(diào)度算法是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞放棄處理機時再重新調(diào)度。 2.4最高優(yōu)先權優(yōu)先(HRRN)算法 優(yōu)先權調(diào)度算法是為了照顧緊迫型作業(yè),使之在進入系統(tǒng)后便獲得優(yōu)先處理,引入最高優(yōu)先權優(yōu)先調(diào)度算法。動態(tài)優(yōu)先權是指在創(chuàng)建進程時所賦予的優(yōu)先權,是可以隨進程的推進或隨其等待時間的增加而改變的,以便獲得更好的調(diào)度性能。 3 詳細設計與編碼3.1 模塊設計(1) 進入系統(tǒng)模塊,進入登陸界面。(3) 菜單選擇模塊。選擇相應的進程調(diào)度方式,選擇相應的數(shù)字,進
4、入相應的功能。(4) 算法模塊。選擇相應的進程調(diào)度算法。(5) 顯現(xiàn)輸出模塊。顯示每種進程調(diào)度算法情況。(6) 平均周轉(zhuǎn)時間與平均帶權周轉(zhuǎn)時間的計算結(jié)果。(7) 退出系統(tǒng)模塊。開始3.2 系統(tǒng)流程圖FCFS算法,對于先到達的進程優(yōu)先分配CPUSJF算法,每次都從未完成的隊列中選取服務時間最短的作業(yè)進行調(diào)度RR算法,每次調(diào)度時將CPU 分派給隊首進程,按照時間片依次執(zhí)行進程HRRN算法,考慮每個作業(yè)的等待時間長短和估計需要的執(zhí)行時間長短,從中選出響應比最高的作業(yè)投入執(zhí)行。結(jié)束3.3 系統(tǒng)詳細設計(1) 系統(tǒng)主界面設計(包含登陸模塊設計)首先將各種進程調(diào)度算法放入不同的頭文件,在主函數(shù)引用,是系統(tǒng)
5、結(jié)構(gòu)更加清晰。設置一個mean()方法,讓用戶選擇不同的進程調(diào)度算法,mean()方法返回一個char類型字符,以便在主函數(shù)的switch語句中選擇調(diào)用不同的進程調(diào)度方法。(2) 系統(tǒng)模塊1.先來先服務算法 對于先到達的進程優(yōu)先分配CPU,按照先來先服務的原則依次執(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; 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)時間為:%-.2
7、ft",avzztime); avdqzztime= sumdqzztime/N; printf("該算法的平均帶權周轉(zhuǎn)時間為:%-.2ftnn",avdqzztime); 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,
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、時間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N1; printf("該算法的平均帶權周轉(zhuǎn)時間為:%-.2ftnn",avdqzztime); 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,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)時間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N2; printf("該算法的平均帶權周轉(zhuǎn)時間為:%-.2ftn",avdqzztime);getchar(); 4.最高響應比優(yōu)先算法按照優(yōu)先級從高到低依次執(zhí)行程序。算法:int HRN(int pre)int current=1,i,j;/* 優(yōu)先權
12、 =(等待時間+服務時間)/服務時間*/for(i=0; i<N4; i+)JCBi.waiTime=JCBpre.finTime-JCBi.arrTime; /*等待時間 =上一個作業(yè)的完成時間-到達時間*/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) /* 還沒完成(運行)*/i
13、f(JCBcurrent.arrTime<=JCBpre.finTime) /*如果作業(yè)在上一個作業(yè)完成之前到達*/if(JCBj.arrTime<=JCBpre.finTime && JCBj.priority>JCBcurrent.priority )current=j;/* 找出到達時間在上一個作業(yè)完成之前,優(yōu)先權高的作業(yè)*/else /* 如果作業(yè)是在上一個作業(yè)完成之后到達*/if(JCBj.arrTime<JCBcurrent.arrTime)current=j; /* 找出比較早到達的一個*/if(JCBj.arrTime=JCBcurren
14、t.arrTime) /* 如果同時到達*/if(JCBj.priority>JCBcurrent.priority)current=j; /*找出服務時間比較短的一個*/return current;/*返回當前作業(yè)*/4 結(jié)果與分析4.1 測試方案(1) 測試方案(一) 在主界面輸入1,選擇先來先服務調(diào)度算法,然后輸入進程數(shù)目5,然后輸入各個進程信息,觀察測試結(jié)果。(2) 測試方案(二)在主界面輸入2,選擇最短進程優(yōu)先調(diào)度算法,然后輸入進程數(shù)目5,然后輸入各個進程信息,進程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一。 (3) 測試方案(三) 在主界面輸入3,選擇時間片輪轉(zhuǎn)
15、調(diào)度算法,然后輸入進程數(shù)目5,然后輸入各個進程信息,進程信息與測試方案(一)保持一致,觀察測試結(jié)果,對比方案一和二。(4) 測試方案(四)在主界面輸入4,選擇時間片輪轉(zhuǎn)調(diào)度算法,然后輸入進程數(shù)目5,然后輸入各個進程信息,進程信息與測試方案(一)保持一致,觀察測試結(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 先來先服務調(diào)度算法) 圖4-1 先來先服務調(diào)度算法由運行結(jié)果可以看出,短作業(yè)D的服務時間最短,但帶權周轉(zhuǎn)時間高達5.5,而長作業(yè)C
16、的服務時間為5,帶權周轉(zhuǎn)時間僅為2,因此先來先服務算法比較有利于長作業(yè),而不利于短作業(yè)(2) 測試方案(2)結(jié)果。輸入測試進程數(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)度算法由運行結(jié)果可以看出,短作業(yè)優(yōu)先算法每次都從未完成的隊列中選取服務時間最短的作業(yè)進行調(diào)度。通過比較,短作業(yè)優(yōu)先算法的平均帶權周轉(zhuǎn)時間小于先來先服務算法,提高了系統(tǒng)的吞吐量。因此,相對于短作業(yè)較多或者較為重要的系統(tǒng)中,可選這短作業(yè)優(yōu)先調(diào)度算法。(3) 測試方案(三)結(jié)果。輸入測試進程數(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時間片輪轉(zhuǎn)調(diào)度算法) 圖4-3.1 時間片輪轉(zhuǎn)調(diào)度算法 圖4-3.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ōu)先調(diào)度算法) 圖4-4 最高響應比優(yōu)先調(diào)度算法由運行結(jié)果可以看出,該算法既照顧了短作業(yè),有考慮了作業(yè)到
18、達的先后次序,不會使長作業(yè)長期得不到服務。因此,該算法是一個很好的折衷4.3 測試結(jié)果分析四種調(diào)度算法各有優(yōu)劣。先來先服務算法比較有利于長進程,而不利于短進程,有利于CPU 繁忙的進程,而不利于I/O 繁忙的進程。短作業(yè)優(yōu)先調(diào)度算法相比FCFS 算法,該算法可改善平均周轉(zhuǎn)時間和平均帶權周轉(zhuǎn)時間,縮短進程的等待時間,提高系統(tǒng)的吞吐量。缺點是對長進程非常不利,可能長時間得不到執(zhí)行,且未能依據(jù)進程的緊迫程度來劃分執(zhí)行的優(yōu)先級,以及難以準確估計進程的執(zhí)行時間,從而影響調(diào)度性能。時間片輪轉(zhuǎn)調(diào)度算法的特點是簡單易行、平均響應時間短,但不利于處理緊急作業(yè)。在時間片輪轉(zhuǎn)算法中,時間片的大小對系統(tǒng)性能的影響很大
19、,因此時間片的大小應選擇恰當。高響應比優(yōu)先調(diào)度策略是對FCFS方式和SJF方式的一種綜合平衡,同時考慮每個作業(yè)的等待時間長短和估計需要的執(zhí)行時間長短,從中選出響應比最高的作業(yè)投入執(zhí)行。5 設計小結(jié)經(jīng)過一周的努力,課程設計基本完成了,這次課程設計培養(yǎng)了我們耐心、慎密、全面地考慮問題的能力,從而加快了問題解決的速度、提高了個人的工作效率,以及鍛煉圍繞問題在短時間內(nèi)得以解決的頑強意志。課程設計是我們專業(yè)課程知識綜合應用的實踐訓練,也是為我們以后的工作夯實基礎。通過改程序?qū)Σ僮飨到y(tǒng)的基礎知識了解得更透徹了,同時對磁盤調(diào)度的四種算法先來先服務算法,短進程優(yōu)先調(diào)度算法,時間片輪轉(zhuǎn)調(diào)度算法,動態(tài)優(yōu)先級調(diào)度有
20、了更深刻的理解和掌握,使我能夠為進程調(diào)度選擇適當?shù)乃惴ǎ岣逤PU工作效率。進行進程調(diào)度程序設計的過程中,得到老師的大力指導和同學的支持,在此向他們表示感謝。經(jīng)過自己的動手操作和同學老師的指導我成功的做出了課程設計自己感到很高興。在編寫程序的過程中,我們的能力得到了提高,同時養(yǎng)成了科學、嚴謹?shù)淖黠L和習慣。為此要感謝信息學院開設了這門操作系統(tǒng)課程設計,為我們提供了進一步學習算法、操作系統(tǒng)和鞏固C語言程序計設的平臺。6 參考文獻1 嚴蔚敏,吳偉民. 數(shù)據(jù)結(jié)構(gòu)M.清華大學出版社,1997.2 張堯?qū)W,史美林. 計算機操作系統(tǒng)教程M.清華大學出版社,2000.3 孫靜宇. 計算機操作系統(tǒng)課程設計指導書
21、M.太原理工出版社,2006.4 湯小丹,梁紅兵,哲鳳屏,湯子贏.計算機操作系統(tǒng)(第五版)M.西安:西安電子科技大學出版社,2007.5 何欽銘,顏暉.C語言程序設計M.北京:高等教育出版社,2008.6 胡學剛,數(shù)據(jù)結(jié)構(gòu)(C語言版)M.北京:高等教育出版社,2008.7 張小進,Linux系統(tǒng)應用基礎教程M.北京:機械工業(yè)出版社,2008.8 孟慶昌,C語言程序設計M.北京:人民郵電出版社,2006.7 附錄 程序代碼Main.cpp#include <cstdlib>#include <iostream>#include <iomanip> #inclu
22、de "fcfs.h” /先來先服務#include "sjf.h" /短作業(yè)優(yōu)先#include "rr.h"/時間片輪轉(zhuǎn)#include "hrrn.h" /高響應比優(yōu)先"using namespace std;char menu()/用來輸出相關信息的函數(shù) char cse1;while(1)system("cls");fflush(stdin);cout<<endl; cout<<endl; cout<<"t"<<&qu
23、ot; "<<"t 進程調(diào)度算法模擬 "<<"tt"<<" "<<endl;cout<<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 1.先來先服務調(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.時間片輪轉(zhuǎn)調(diào)度算法"<<"ttt"<<" "<<endl; cout<<"t"<<" "<<endl;cout<<"t"<<" "<<"tt 4.最高響應比優(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 /定義先來先服務調(diào)度算法結(jié)構(gòu)體char name10; /./作業(yè)名float arrivetime; /作業(yè)到達時間float servicetime; /作業(yè)服務float sta
29、rttime; /作業(yè)開始時間float finishtime; /作業(yè)完成時間float zztime; /帶權周轉(zhuǎn)時間float dqzztime; /平均帶權周轉(zhuǎn)時間; fcfs a100;/定義存放進程的數(shù)組void input(fcfs *p,int N) /輸入處理 int i; cout<<endl; printf(" 請您輸入進程的 名字 到達時間 服務時間: (例如: a 0 100)nn"); for(i=0;i<=N-1;i+) printf(" 請您輸入進程%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)用先來先服務算法以后進程運行的順序是: "); printf("%s",); for(k=1;k<N;k+)
31、printf("->%s",); cout<<endl; printf("n 具體進程調(diào)度信息:n"); printf("t進程名 到達時間 服務時間 開始時間 結(jié)束時間 周轉(zhuǎ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,p
32、k.zztime,pk.dqzztime); getchar(); /此處必須要有這個函數(shù),否則就看不到顯示器上面的輸出,可以看到的結(jié)果只是一閃而過的一個框剪 void sort(fcfs *p,int 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) /運行階段,根據(jù)先來先服務的原則進行處理 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)時間為:%-.2ft",avzztime); avdqzztime= sumdqzztime/N; printf("
36、;該算法的平均帶權周轉(zhuǎn)時間為:%-.2ftnn",avdqzztime); void fcfsRun()/給主函數(shù)調(diào)用的方法int N; cout<<endl;cout<<endl; printf("tt<<-!先來先服務調(diào)度算法!->>n"); cout<<endl;printf("輸入進程數(shù)目:"); scanf("%d",&N); input(a,N); FCFS(a,N); getchar(); /先來先服務算法到此結(jié)束 Sjf.h#include&
37、lt;stdio.h>struct jcb /作業(yè)控制塊JCB,定義為結(jié)構(gòu)體 char name10; /作業(yè)名 float arrivetime; /作業(yè)到達時間 float servicetime;/作業(yè)服務時間 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(&q
38、uot; 請您輸入進程的 名字 到達時間 服務時間: (例如: a 0 100)n"); for(i=0;i<=N-1;i+) printf(" 請您輸入進程%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)用最短進程優(yōu)先調(diào)度算法以后進程的調(diào)度順序為:");printf("%s",);for(k=1;k<N;k+)printf("->%s",); cout<<endl; printf("n給個進程具體調(diào)度信息如下:n");printf("n進程名 到達時間 運行時間 開始時間 完成時間 周轉(zhuǎn)時間 帶權周轉(zhuǎn)時間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) /按進程到達時間進行排序 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)先原則進行進程服務處理 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)時間為:%-.2ft",avzztime);avdqzztime= sumdqzztime/N; printf("該算法的平均帶權周轉(zhuǎn)時間為:%-.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;/定義時間片輪轉(zhuǎn)調(diào)度算法結(jié)構(gòu)體,里面包含的有一個進程相關的信息struct rrchar name10; /作業(yè)名float arrivetime; /作業(yè)到達時間float servicetime; /作業(yè)服務時間float starttime; /作業(yè)開始時
47、間float finishtime; /作業(yè)結(jié)束時間 float zztime; /作業(yè)周轉(zhuǎn)時間float dqzztime; /作業(yè)帶權周轉(zhuǎn)時間float avzztime;/作業(yè)平均周轉(zhuǎn)時間 float avdqzztime;/作業(yè)平均帶權周轉(zhuǎn)時間 float lefttime; /剩余時間float stoptime;/停止時間int timeprice;/時間片設置的大小;/時間片輪轉(zhuǎn)調(diào)度算法從這里開始 rr a2100 ;void input(rr *p,int N2)/進程信息輸入 int i;cout<<endl; printf(" 請您輸入進程的 名字 到
48、達時間 服務時間: (例如: a 0 100)n"); for(i=0;i<=N2-1;i+) printf(" 請您輸入進程%d的信息:t",i+1);scanf("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 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)用時間片輪轉(zhuǎn)調(diào)度算法以后進程運行的順序是: "); printf("%s",); for(k=1;k<N2;k+) printf("->%s",);
50、 cout<<endl; printf("n 具體進程調(diào)度信息:nn"); printf("t進程名 到達時間 服務時間 開始時間 結(jié)束時間 周轉(zhuǎn)時間 帶權周轉(zhuǎn)時間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) /時間片設置處理與程序運行 float w=0;int c=0;float stoptime=0;printf("n 請輸入時間片的值:");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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陸上采油氣安全生產(chǎn)許可證
- 電氣火災隱患排查要點
- 互聯(lián)網(wǎng)安全法律法規(guī)
- 低代碼開發(fā)平臺研究-洞察及研究
- 大數(shù)據(jù)在數(shù)字供應鏈優(yōu)化中的應用研究
- 北宋后期學術發(fā)展與詩學轉(zhuǎn)向研究
- 國家生物質(zhì)能產(chǎn)業(yè)發(fā)展戰(zhàn)略研究報告
- 一帶一路下的數(shù)字清關行業(yè)市場趨勢報告
- 港口安全監(jiān)測與預警系統(tǒng)優(yōu)化-洞察及研究
- 沉浸式體驗-紀錄片制作中的技術融合-洞察闡釋
- 2025年廣東省中考英語試題卷(含答案解析)
- 2025年吉林省中考物理試卷真題及答案詳解(精校打印版)
- 2024年個人信用報告(個人簡版)樣本(帶水印-可編輯)
- 16J914-1 公用建筑衛(wèi)生間
- TSG11-2020 鍋爐安全技術規(guī)程
- 浙江省城市體檢工作技術導則(試行)
- 電動汽車充電站新建工程項目施工安全管理及風險控方案
- DVD在線租賃-2005年全國大學生數(shù)學建模大賽B題全國一等獎論文
- 防火封堵施工方案(新版)
- 曼徹斯特解碼原則+125K-EM4100系列RFID卡解碼源程序分析
- 景陵峪_構(gòu)造報告_構(gòu)造地質(zhì)學
評論
0/150
提交評論