實驗三-利用預約表編程計算非線性流水線的任務調度方案(共8頁)_第1頁
實驗三-利用預約表編程計算非線性流水線的任務調度方案(共8頁)_第2頁
實驗三-利用預約表編程計算非線性流水線的任務調度方案(共8頁)_第3頁
實驗三-利用預約表編程計算非線性流水線的任務調度方案(共8頁)_第4頁
實驗三-利用預約表編程計算非線性流水線的任務調度方案(共8頁)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上實驗三 利用預約表編程計算非線性流水線的任務調度方案一、 實驗目的通過本實驗幫助學生理解單功能非線性流水線基本任務調度方法。二、 實驗環(huán)境開發(fā)工具使用windows平臺下的vc+6.0。三、 實驗內容給定某單功能非線性流水線的預約表,通過編程求出所有不沖突的任務調度方案并輸出。流水線功能段數隨機。四、 實驗結果#include<stdio.h> #include<iostream.h> #include<iomanip.h> #include<string.h> const int MAXJOB=50;/定義數據結構體

2、typedef struct node int number; int reach_time; int reach_hour; int reach_minite; int need_time; int privilege; float excellent; int start_time; int wait_time; int visited; job; job jobsMAXJOB; int quantity; /初始化函數 void initial() int i; for(i=0;i<MAXJOB;i+) jobsi.number=0; jobsi.reach_time=0; job

3、si.reach_hour=0; jobsi.reach_minite=0; jobsi.privilege=0; jobsi.excellent=0; jobsi.start_time=0; jobsi.wait_time=0; jobsi.visited=0; quantity=0; void reset() /重置作業(yè)數據函數 int i; for(i=0;i<MAXJOB;i+) jobsi.start_time=0; jobsi.wait_time=0; jobsi.visited=0; void readData() /讀入作業(yè)數據函數 FILE *fp; char fnam

4、e20; int i; cout<<"請輸入作業(yè)數據文件名:" strcpy(fname,"8job.txt"); cin>>fname; if(fp=fopen(fname,"r")=NULL) cout<<"錯誤,文件打不開,請檢查文件名:)"<<endl; else while(!feof(fp) fscanf(fp,"%d %d %d %d",&jobsquantity.number,&jobsquantity.reach_

5、time,&jobsquantity.need_time,&jobsquantity.privilege); jobsquantity.reach_hour=jobsquantity.reach_time/100; jobsquantity.reach_minite=jobsquantity.reach_time%100; quantity+; /輸出初始作業(yè)數據 cout<<"輸出初始作業(yè)數據"<<endl; cout<<"-"<<endl; cout.setf(2); cout<&

6、lt;setw(10)<<"作業(yè)號"<<setw(12)<<"到達時間"<<setw(14)<<"所需時間(分)"<<setw(14)<<"優(yōu)先級(0>1)"<<endl; for(i=0;i<quantity;i+) cout<<setw(10)<<jobsi.number<<setw(12)<<jobsi.reach_time<<setw(14)

7、<<jobsi.need_time<<setw(14)<<jobsi.privilege<<endl; /FIFO算法 void FIFO() int i; int current_hour; int current_minute; int total_time=0; cout<<endl; /輸出作業(yè)流cout<<endl<<"FIFO算法作業(yè)流"<<endl; cout<<"-"<<endl; cout.setf(2); cout&

8、lt;<setw(10)<<"作業(yè)號"<<setw(12)<<"到達時間"<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl; current_hour=jobs0.reach_hour; current_minute=jobs0.reach_minite; for(i=0;i<quantity;i+) jobsi.start_time=current_hour*100

9、+current_minute; jobsi.wait_time=(current_hour-jobsi.reach_hour)*60+(current_minute-jobsi.reach_minite)+jobsi .need_time; cout<<setw(10)<<jobsi.number<<setw(12)<<jobsi.reach_time<<setw(12)<<jobsi.start_time<<setw(14)<<jobsi.wait_time<<endl; curre

10、nt_hour=current_hour+(jobsi.need_time+current_minute)/60; current_minute=(jobsi.need_time+current_minute)%60; total_time+=jobsi.wait_time; cout<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<total_time/quantity<<endl; void shorter() /運算時間短的作業(yè)優(yōu)先算法 int

11、 i,j,p; int current_hour; int current_minute; int current_need_time; int total_time=0; /輸出作業(yè)流 cout<<endl; cout<<endl<<"時間短作業(yè)優(yōu)先算法作業(yè)流(開始調度時刻為最后一個作業(yè)到達系統(tǒng)的時間)"<<endl; cout<<"-"<<endl; cout.setf(2); cout<<setw(10)<<"作業(yè)號"<<

12、setw(12)<<"到達時間"<<setw(14)<<"所需時間(分)"<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl; current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite; for(i=0;i<quantity;i+) current_need_time=

13、30000; for(j=0;j<quantity;j+) if(jobsj.visited=0)&&(jobsj.need_time<current_need_time) p=j; current_need_time=jobsj.need_time; jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.reach_hour)*60+(current_minute-jobsp.reach_minite)+jobsp .need_time; cout

14、<<setw(10)<<jobsp.number<<setw(12)<<jobsp.reach_time<<setw(14)<<jobsp.need_time<<setw(12)<<jobsp.start_time<<setw(14)<<jobsp.wait_time<<endl; current_hour=current_hour+(jobsp.need_time+current_minute)/60; current_minute=(jobsp.need_ti

15、me+current_minute)%60; jobsp.visited=1; total_time+=jobsp.wait_time; cout<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<total_time/quantity<<endl; void privilege() /優(yōu)先數調度算法 int i,j,p; int current_hour; int current_minute; int current_privilege; int

16、total_time=0; /輸出作業(yè)流 cout<<endl; cout<<endl<<"優(yōu)先數調度算法作業(yè)流(開始調度時刻為最后一個作業(yè)到達系統(tǒng)的時間)"<<endl; cout<<"-"<<endl; cout.setf(2); cout<<setw(10)<<"作業(yè)號"<<setw(12)<<"到達時間"<<setw(14)<<"優(yōu)先級(0>1)&q

17、uot;<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl; current_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite; for(i=0;i<quantity;i+) current_privilege=30000; for(j=0;j<quantity;j+) if(jobsj.visited=0)&&(jobsj.pr

18、ivilege<current_privilege) p=j; current_privilege=jobsj.privilege; jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.reach_hour)*60+(current_minute-jobsp.reach_minite)+jobsp .need_time; cout<<setw(10)<<jobsp.number<<setw(12)<<jobsp.reach

19、_time<<setw(14)<<jobsp.privilege<<setw(12)<<jobsp.start_time<<setw(14)<<jobsp.wait_time<<endl; current_hour=current_hour+(jobsp.need_time+current_minute)/60; current_minute=(jobsp.need_time+current_minute)%60; jobsp.visited=1; total_time+=jobsp.wait_time; co

20、ut<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<total_time/quantity<<endl; /響應比最高者優(yōu)先調度算法 void excellent() int i,j,p; int current_hour; int current_minute; float current_excellent; int total_time=0; /輸出作業(yè)流 cout<<endl; cout<<endl<<&

21、quot;響應比高者優(yōu)先調度算法作業(yè)流(開始調度時刻為最后一個作業(yè)到達系統(tǒng)的時間)"<<endl; cout<<"-"<<endl; cout.setf(2); cout<<setw(10)<<"作業(yè)號"<<setw(12)<<"到達時間"<<setw(12)<<"開始時間"<<setw(14)<<"周轉時間(分)"<<endl; curren

22、t_hour=jobsquantity-1.reach_hour; current_minute=jobsquantity-1.reach_minite; for(i=0;i<quantity;i+) current_excellent=-1; for(j=0;j<quantity;j+) if(jobsj.visited=0) jobsj.wait_time=(current_hour-jobsj.reach_hour)*60+(current_minute-jobsj.reach_minite); jobsj.excellent=(float)(jobsj.wait_time/

23、jobsj.need_time); for(j=0;j<quantity;j+) if(jobsj.visited=0)&&(jobsj.excellent>current_excellent) p=j; current_excellent=jobsj.excellent; jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.reach_hour)*60+(current_minute-jobsp.reach_minite)+jobsp .need

24、_time; cout<<setw(10)<<jobsp.number<<setw(12)<<jobsp.reach_time<<setw(12)<<jobsp.start_time<<setw(14)<<jobsp.wait_time<<endl; current_hour=current_hour+(jobsp.need_time+current_minute)/60; current_minute=(jobsp.need_time+current_minute)%60; jobsp.visited=1; total_time+=jobsp.wait_time; cout<<endl<<"總周轉時間:"<<total_time<<" 平均周轉時間:"<<to

溫馨提示

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

評論

0/150

提交評論