1.算法原理
作業調度算法先來先服務:作業個數n,每個作業的到達時間為t1,t2,...,tn,服務時間為s1,s2,...,sn.先到的作業先進入cpu處理,其他作業等待。每個作業的周轉時間=完成時間-到達時間,帶權周轉時間=周轉時間/服務時間。平均周轉時間=所有作業的周轉時間/作業個數,平均帶權周轉時間=所有作業的帶權周轉時間/作業個數。
2.模塊分析
數據結構:
定義一個結構體表示JCB,其中包括:進程名,到達時間,開始時間,服務時間,完成時間,周轉時間,帶權周轉時間。
利用3個函數模擬FCFS。輸入函數,FCFS核心函數,輸出函數。
3.流程圖
4.代碼實現
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct P{ 5 int num;//進程編號 6 int arrivedtime;//到達時間 7 int starttime;//開始時間 8 int servivetime;//服務時間 9 int finishtime;//完成時間 10 double zhouzhuantime;//周轉時間 11 double avezztime;//帶權周轉時間 12 }; 13 P p[100]; 14 //按照到達時間升序排列 15 bool cmp(P p1,P p2){ 16 return p1.arrivedtime<p2.arrivedtime; 17 } 18 void inputP(int n){ 19 for(int i=0;i<n;i++){ 20 p[i].num=i+1; 21 cin>>p[i].arrivedtime>>p[i].servivetime; 22 p[i].starttime=0; 23 p[i].avezztime=p[i].finishtime=p[i].zhouzhuantime=0; 24 } 25 } 26 27 void FCFS(int n){ 28 //sort(p,p+n,cmp);//根據到達時間排序 29 int i; 30 for(i=0;i<n;i++){ 31 if(i==0){ 32 p[i].starttime=p[i].arrivedtime; 33 } 34 else { 35 p[i].starttime=p[i-1].finishtime; 36 } 37 p[i].finishtime=p[i].starttime+p[i].servivetime; 38 p[i].zhouzhuantime=p[i].finishtime-p[i].arrivedtime; 39 p[i].avezztime=p[i].zhouzhuantime/p[i].servivetime; 40 } 41 42 } 43 void printP(int n){ 44 int i; 45 double a=0,b=0; 46 cout<<"num"<<" "<<"到達時間"<<" "<<"服務時間"<<" "<<"開始時間"<<" "<<"完成時間"<<" "<<"周轉時間"<<" "<<"帶權時間"<<endl; 47 for(i=0;i<n;i++){ 48 cout<<p[i].num<<" "<<p[i].arrivedtime<<" "<<p[i].servivetime<<" "<<p[i].starttime<<" "<<p[i].finishtime<<" "<<p[i].zhouzhuantime<<" "<<p[i].avezztime; 49 a+=p[i].zhouzhuantime; 50 b+=p[i].avezztime; 51 cout<<endl; 52 } 53 cout<<"平均周轉時間"<<a/n<<endl; 54 cout<<"平均帶權周轉時間"<<b/n<<endl; 55 } 56 57 58 int main(){ 59 int n; 60 cin>>n; 61 inputP(n); 62 FCFS(n); 63 printP(n); 64 return 0; 65 }
5.測試截圖