作業(yè)調(diào)度實驗報告_第1頁
作業(yè)調(diào)度實驗報告_第2頁
作業(yè)調(diào)度實驗報告_第3頁
作業(yè)調(diào)度實驗報告_第4頁
作業(yè)調(diào)度實驗報告_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一、實驗名稱作業(yè)調(diào)度算法實驗。二、實驗?zāi)繕?biāo)已知 n 個作業(yè)的進(jìn)入時間和估計運(yùn)行時間(以分鐘計)(1 )單道環(huán)境下,分別用先來先服務(wù)調(diào)度算法、短作業(yè)優(yōu)先調(diào)度算法、響應(yīng)比高者優(yōu)先調(diào)度算法,求出批作業(yè)的平均周轉(zhuǎn)時間和帶權(quán)平均周轉(zhuǎn)時間; 在多道環(huán)境(如 2 道)下,求出這些作業(yè)的平均周轉(zhuǎn)時間和帶權(quán)平均周轉(zhuǎn)時間(2 )就同一批次作業(yè),分別討論這些算法的優(yōu)劣;(3 )衡量同一調(diào)度算法對不同作業(yè)流的性能。三、實驗環(huán)境要求1.PC 機(jī)。2.Windows環(huán)境。3.CodeBlocks四、實驗基本原理( 1 )先來先服務(wù)算法: 按照作業(yè)提交給系統(tǒng)的先后順序來挑選作業(yè),先提交的先被挑選。( 2 )最短作業(yè)優(yōu)先算法

2、:是以進(jìn)入系統(tǒng)的作業(yè)所提出的“執(zhí)行時間”為標(biāo)準(zhǔn),總是優(yōu)先選取執(zhí)行時間最短的作業(yè)。( 3 )響應(yīng)比高者優(yōu)先算法:是在每次調(diào)度前都要計算所有被選作業(yè)(在后備隊列中)的響應(yīng)比,然后選擇響應(yīng)比最高的作業(yè)執(zhí)行。(4 )兩道批處理系統(tǒng)中最短作業(yè)優(yōu)先調(diào)度算法:內(nèi)存中可以進(jìn)入兩個作業(yè),這兩個作業(yè)按照最短作業(yè)優(yōu)先調(diào)度算法調(diào)整作業(yè)執(zhí)行的次序。五、數(shù)據(jù)結(jié)構(gòu)設(shè)計使用一維數(shù)組來保存多個作業(yè)Job job20;,采用的是順序存儲。使用 queue<Jcb *> q保存調(diào)度隊列里的作業(yè)指針。struct Date/時間結(jié)構(gòu)體int hour;/時間的小時int minute;/時間的分鐘;struct Jcb/

3、作業(yè)結(jié)構(gòu)體,用來描述作業(yè)int no;/作業(yè)編號Date enter;/進(jìn)入時間int operation;/估計運(yùn)行時間Date start;/開始時間Date over;/結(jié)束時間intturnover;/周轉(zhuǎn)時間double weighted;/帶權(quán)周轉(zhuǎn)時間int state=0;/標(biāo)記改作業(yè)是否進(jìn)入運(yùn)行狀態(tài);六、流程圖單道環(huán)境下算法流程圖先來先服務(wù)調(diào)度開始最高響應(yīng)比優(yōu)先服務(wù)最短作業(yè)優(yōu)先服務(wù)將JCB 按作業(yè)提交的時刻的先后順序排隊No將作業(yè)一入調(diào)度隊列,不斷從就緒隊列中選擇 state=0,且處理時間最短的作業(yè)放入調(diào)度隊列中,直到所有作業(yè)都進(jìn)入調(diào)度隊列調(diào)用 runing 函數(shù)處理調(diào)度隊列

4、作業(yè)調(diào)度隊首的作業(yè)投入運(yùn)行調(diào)度隊列為空?Yes調(diào)用 display函數(shù),計算這組作業(yè)的平均周轉(zhuǎn)時間及帶權(quán)周轉(zhuǎn)時間,并作業(yè)處理輸出結(jié)果不斷從就緒隊列中選擇 state=0,且響應(yīng)比最高的作業(yè)放入到調(diào)度隊列中,直到所有作業(yè)都進(jìn)入調(diào)度隊列。結(jié)束多道環(huán)境下的兩道批處理系統(tǒng)中最短作業(yè)優(yōu)先作業(yè)調(diào)度算法的流程圖。開始初始化作業(yè)在內(nèi)存中停留時間數(shù)組 op, 是每個作業(yè)的停留時間設(shè)為將要運(yùn)行的時間,即opi=Ji.operation.將最先進(jìn)入的 2個作業(yè)調(diào)入到內(nèi)存,work1=0,work2=1; 并改變標(biāo)記狀態(tài) state=1,作業(yè)處理個數(shù)記為t=2作業(yè)總數(shù) n>=t?No處理 work1YesWor

5、k1 的預(yù)計運(yùn)行時間計算平均周轉(zhuǎn)時間和平均<work2 的預(yù)計運(yùn)行時帶權(quán)周轉(zhuǎn)時間, 輸出作間?業(yè)處理后的結(jié)果。YesNo結(jié)束處理work1 ,處理 work2 ,work1=work2,Opwork1+=opwork2.Work2=-1,Work2=-1,從剩余到達(dá)的作業(yè)中選出預(yù)計處理時間最短的作業(yè) i ,t+,work2=i七、源代碼#include<iostream>#include<stdio.h>#include<cstring>#include<algorithm>#include<queue>using namesp

6、ace std;struct Date/時間結(jié)構(gòu)體int hour;/時間的小時int minute;/時間的分鐘;struct Jcb/作業(yè)結(jié)構(gòu)體,用來描述作業(yè)int no;/作業(yè)編號Date enter;/進(jìn)入時間int operation;/估計運(yùn)行時間Date start;/開始時間Date over;/結(jié)束時間intturnover;/周轉(zhuǎn)時間double weighted;/帶權(quán)周轉(zhuǎn)時間int state=0;/標(biāo)記改作業(yè)是否進(jìn)入運(yùn)行狀態(tài);/ 函數(shù)聲明void display(Jcb J,int n);/輸出void runing( queue<Jcb *> q,int

7、 n);/根據(jù)算法將就緒隊列排好隊后的單道作業(yè)的運(yùn)行主體void fcfs( Jcb J,int n);/先來先服務(wù)作業(yè)調(diào)度void sfc(Jcb J,int n);/最短作業(yè)優(yōu)先作業(yè)調(diào)度void hrfc(Jcb J,int n);/最高響應(yīng)比作業(yè)調(diào)度void text(void (*dispatch)(JcbJ,int n),Jcb J,int n,JcbJ1,int n1, Jcb J2,int n2);/測試單道環(huán)境,不同批次作業(yè),相同算法void mulfc(Jcb J,int n);/兩道環(huán)境,內(nèi)存中可以用兩個作業(yè),內(nèi)存中的這兩個作業(yè)按照作業(yè)長短調(diào)整作業(yè)執(zhí)行的次序。/ 主函數(shù),(

8、 1 )同一批次作業(yè),分別用先來先服務(wù)調(diào)度算法、短作業(yè)優(yōu)先調(diào)度算法、 響應(yīng)比高者優(yōu)先調(diào)度算法, 得到批作業(yè)的平均周轉(zhuǎn)時間和帶權(quán)平均周轉(zhuǎn)時間; (2 )同一調(diào)度算法對不同作業(yè)流的調(diào)度。int main()int n,n1,n2;Jcb job20,job120,job220;FILE*p=fopen("example1.txt", "r");fscanf(p, "%d", &n);/ 批次一作業(yè)for(int i=0;i<n;i+)jobi.no=i+1;fscanf(p, "%d%d%d", &

9、;jobi.enter.hour, &jobi.enter.minute, &jobi.operation);/ 批次二作業(yè)fscanf(p, "%d", &n1);for(int i=0;i<n1;i+)job1i.no=i+1;fscanf(p, "%d%d%d", &job1i.enter.hour, &job1i.enter.minute, &job1i.operation);/ 批次三作業(yè)fscanf(p, "%d", &n2);for(int i=0;i<

10、n2;i+)job2i.no=i+1;fscanf(p, "%d%d%d", &job2i.enter.hour, &job2i.enter.minute, &job2i.operation);fclose(p);printf("n-單道環(huán)境, 同一批次作業(yè),不同算法-n");cout<<" 先來先服務(wù)作業(yè)調(diào)度: "<<endl;fcfs(job,n);cout<<" 最短時間優(yōu)先服務(wù)作業(yè)調(diào)度:"<<endl;sfc(job,n);cout&l

11、t;<" 最高響應(yīng)比優(yōu)先作業(yè)調(diào)度算法"<<endl;hrfc(job,n);printf("nn");printf("-單道環(huán)境,不同批次作業(yè),同一算法-n");cout<<".先來先服務(wù)作業(yè)調(diào)度."<<endl;text(fcfs, job,n,job1,n1,job2,n2);cout<<".最短優(yōu)先服務(wù)作業(yè)調(diào)度."<<endl;text(sfc, job,n,job1,n1,job2,n2);cout<<&quo

12、t;.最高響應(yīng)比優(yōu)先服務(wù)作業(yè)調(diào)度:."<<endl;text(hrfc, job,n,job1,n1,job2,n2);printf("-兩道環(huán)境-n");mulfc(job1,n);printf("-n");return 0;/ 單道環(huán)境,不同批次作業(yè),同一算法voidtext(void(*dispatch)(JcbJ,intn),JcbJ,intn,JcbJ1,int n1, Jcb J2,int n2)/ 單道環(huán)境,不同批次作業(yè),同一算法cout<<" 批次一作業(yè) :"<<endl;

13、dispatch(J,n);cout<<" 批次二作業(yè) :"<<endl;dispatch(J1,n1);cout<<" 批次三作業(yè) :"<<endl;dispatch(J2,n2);/ 輸出void display(Jcb J,int n)double T=0,W=0;printf(" 作業(yè) 進(jìn)入時間 估計運(yùn)行時間 (分鐘 ) 開始時間 結(jié)束時間 周轉(zhuǎn)時間 (分鐘 ) 帶權(quán)周轉(zhuǎn)時間 n");for(int i=0;i<n;i+)Ji.turnover=(Ji.over.hour*

14、60 + Ji.over.minute)-(Ji.enter.hour*60+Ji.enter.minute);T+=Ji.turnover;Ji.weighted=Ji.turnover/(double)Ji.operation;W+=Ji.weighted;printf("Job%2dt %2d:%02dt %-14dt %2d:%02dt%2d:%02dt%-6dt%-5.2ftn",Ji.no,Ji.enter.hour,Ji.enter.minute,Ji.operation,Ji.start.hour,Ji.start.minute,Ji.over.hour,

15、Ji.over.minute, Ji.turnover,Ji.weighted );T/=n;W/=n;printf(" 作業(yè)平均周轉(zhuǎn)時間T=%.2lf分鐘 n", T);printf(" 作業(yè)帶權(quán)平均周轉(zhuǎn)時間W=%.3lfnnn",W);/ 根據(jù)算法將就緒隊列排好隊后的單道作業(yè)的運(yùn)行主體void runing( queue<Jcb *> q,int n)Jcb *j;int h,m;j=q.front();h=j->enter.hour;m=j->enter.minute;while (!q.empty()j=q.front()

16、;q.pop();j->start.hour=h;j->start.minute=m;j->over.hour=j->start.hour+(j->start.minute+j->operation)/6 0;j->over.minute=(j->start.minute+j->operation)%60;j->turnover=(j->over.hour*60+j->over.minute)-(j->enter.hour*60+j->enter.minute);j->weighted=j->tur

17、nover/(double)j->operation;h=j->over.hour;m=j->over.minute;/ display(J,t);/ 最高響應(yīng)比優(yōu)先作業(yè)調(diào)度算法void hrfc(Jcb J,int n)/最高響應(yīng)比優(yōu)先作業(yè)調(diào)度算法queue<Jcb *> qjob;int flag20;for(int j=0;j<n;j+)flagj=0;qjob.push(&J0);doublewait=J0.operation+J0.enter.hour*60+J0.enter.minute;/記錄作業(yè)流已經(jīng)執(zhí)行的時間int t=n-1;fl

18、ag0=1;while(t)int i=1;while(flagi)i+;for(int j=i; j<n ;j+)if(Jj.enter.hour*60+Jj.enter.minute)>wait)break;/如果這個作業(yè)還沒來到,則停止繼續(xù)比較 ,只考慮已經(jīng)進(jìn)入就緒隊列的作業(yè)if(flagj=0 )doublewaiti=wait-Ji.enter.hour*60-Ji.enter.minute;/作業(yè)Ji 的等待時間doublewaitj=wait-Jj.enter.hour*60-Jj.enter.minute;if(waiti/Ji.operation)<(wai

19、tj/Jj.operation)i=j;qjob.push(&Ji);flagi=1;wait+=Ji.operation;t-;runing(qjob,n);display(J,n);void fcfs( Jcb J,int n)/先來先服務(wù)作業(yè)調(diào)度算法queue<Jcb *> qjob;for(int i=0;i<n;i+)qjob.push(&Ji);runing(qjob,n);display(J,n);/ 最短作業(yè)優(yōu)先作業(yè)調(diào)度算法void sfc(Jcb J,int n)/最短作業(yè)優(yōu)先作業(yè)調(diào)度算法queue<Jcb *> qjob;qjo

20、b.push(&J0);inttime=J0.enter.hour*60+J0.enter.minute+J0.operation;/ 上一個作業(yè)的結(jié)束時間J0.state=1;int t=n-1;while(t)int i=1;while(Ji.state)i+;for(int j=i;j<n;j+)if(Jj.enter.hour*60+Jj.enter.minute)>time)break;/如果這個作業(yè)還沒來到,則停止繼續(xù)比較 ,只考慮已經(jīng)進(jìn)入就緒隊列的作業(yè)if(Jj.state=0 && (Ji.operation>Jj.operation)

21、i=j;qjob.push(&Ji);Ji.state=1;time+=Ji.operation;t-;runing(qjob,n);display(J,n);/ 兩道環(huán)境,內(nèi)存中可以用兩個作業(yè),內(nèi)存中的這兩個作業(yè)按照作業(yè)void mulfc(Jcb J,int n)/兩道環(huán)境,內(nèi)存中可以用兩個作業(yè),內(nèi)存中的這兩個作業(yè)按照作業(yè)長短調(diào)整作業(yè)執(zhí)行的次序。/ 至少有兩個作業(yè)。cout<<"兩 道 批 處 理 系統(tǒng) 中 最 短 作業(yè) 優(yōu) 先 作 業(yè) 調(diào)度 算 法"<<endl;int op20;inti,work1=-1,work2=-1;/work

22、1是先開始執(zhí)行的作業(yè),work2是后來進(jìn)入內(nèi)存的作業(yè)for(i=0;i<n;i+)opi=Ji.operation;Ji.state=0;work1=0;J0.state=1;J0.start.hour=J0.enter.hour;J0.start.minute=J0.enter.minute;work2=1;int h=J0.enter.hour;int m=J0.enter.minute;int work=work1;int time;int t=2;while(t<=n)if(Jwork1.operation>Jwork2.operation)/第二個 work2進(jìn)入內(nèi)

23、存的作業(yè)的執(zhí)行時間短于work1 ,就暫停執(zhí)行 work1, 轉(zhuǎn)而執(zhí)行 work2.opwork1+=Jwork2.operation;if(t=2)/第二個進(jìn)入內(nèi)存的, 且運(yùn)行時間較已在內(nèi)存中的短,則作業(yè)開始時間為進(jìn)入的時間Jwork2.start.hour=Jwork2.enter.hour;Jwork2.start.minute=Jwork2.enter.minute;else/從第三個進(jìn)入內(nèi)存的作業(yè),且執(zhí)行時間比當(dāng)前在內(nèi)存中的執(zhí)行時間短,則開始時間為上一個作業(yè)的結(jié)束時間Jwork2.start.hour=h;Jwork2.start.minute=m;Jwork2.over.hour=

24、Jwork2.start.hour+(Jwork2.start.minute+opwork2)/60;Jwork2.over.minute=(Jwork2.start.minute+opwork2)%60;h=Jwork2.over.hour;m=Jwork2.over.minute;time=h*60+m;work2=-1;/改作業(yè)執(zhí)行完畢else/第二個 work2進(jìn)入內(nèi)存的作業(yè)的執(zhí)行時間較長, 所以仍然執(zhí)行開始就在內(nèi)存的作業(yè)work1, 知道 work1執(zhí)行完畢Jwork1.over.hour=Jwork1.start.hour+(Jwork1.start.minute+opwork1)

25、/60;Jwork1.over.minute=(Jwork1.start.minute+opwork1)%60;h=Jwork2.over.hour;m=Jwork2.over.minute;time=h*60+m;Jwork2.start.hour=h;Jwork2.start.minute=m;work1=work2;work2=-1;int w;int i=1;while(Ji.state=1)i+;w=i;for(int j=w; j<n;j+)if(Jj.enter.hour*60+Jj.enter.minute)>time)break;/如果這個作業(yè)還沒來到,則停止繼續(xù)

26、比較 ,只考慮已經(jīng)進(jìn)入就緒隊列的作業(yè)if(Jj.state=0 && (Jw.operation > Jj.operation)w=j;work2=w;/第二個進(jìn)入內(nèi)存的作業(yè)t+;Jwork2.state=1;/ 最后剩下 work1 作業(yè)Jwork1.over.hour=Jwork1.start.hour+(Jwork1.start.minute+opwork1)/60;Jwork1.over.minute=(Jwork1.start.minute+opwork1)%60;display(J,n);八、實驗結(jié)果(1 )在單道環(huán)境下,已知n 個作業(yè)的進(jìn)入時間和估計運(yùn)行時間

27、(以分鐘計),得到的每一個作業(yè)的開始時間、結(jié)束時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,以及這些作業(yè)的平均周轉(zhuǎn)時間和帶權(quán)平均周轉(zhuǎn)時間;( 2 )同一調(diào)度算法對不同作業(yè)流的性能,每個算法有三個測試作業(yè)流先來先服務(wù)作業(yè)調(diào)度最短優(yōu)先服務(wù)作業(yè)調(diào)度最高響應(yīng)比優(yōu)先服務(wù)作業(yè)調(diào)度( 3 )在 2 道環(huán)境下,已知 n 個作業(yè)的進(jìn)入時間和估計運(yùn)行時間(以分鐘計),得到的每一個作業(yè)的開始時間、結(jié)束時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,以及這些作業(yè)的平均周轉(zhuǎn)時間和帶權(quán)平均周轉(zhuǎn)時間。九、結(jié)果分析(1 )單道環(huán)境下,對于批次一作業(yè)流。先來先服務(wù)的作業(yè)調(diào)度的作業(yè)平均周轉(zhuǎn)時間 T=112.5 分鐘最短作業(yè)優(yōu)先服務(wù)作業(yè)調(diào)度的作業(yè)平均周轉(zhuǎn)時間 T=90 分鐘最高相應(yīng)比優(yōu)先服務(wù)作業(yè)調(diào)度的作業(yè)平均周轉(zhuǎn)時間T=102.5分鐘 .可見對于批次一作業(yè),最短作業(yè)優(yōu)先作業(yè)調(diào)度算法效率最高。(2 )單道環(huán)境下。2

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論