![實(shí)驗(yàn)二作業(yè)調(diào)度實(shí)驗(yàn)_第1頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/26/cb70af47-684e-4a3e-acc9-cbd7f16f32d2/cb70af47-684e-4a3e-acc9-cbd7f16f32d21.gif)
![實(shí)驗(yàn)二作業(yè)調(diào)度實(shí)驗(yàn)_第2頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/26/cb70af47-684e-4a3e-acc9-cbd7f16f32d2/cb70af47-684e-4a3e-acc9-cbd7f16f32d22.gif)
![實(shí)驗(yàn)二作業(yè)調(diào)度實(shí)驗(yàn)_第3頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/26/cb70af47-684e-4a3e-acc9-cbd7f16f32d2/cb70af47-684e-4a3e-acc9-cbd7f16f32d23.gif)
![實(shí)驗(yàn)二作業(yè)調(diào)度實(shí)驗(yàn)_第4頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/26/cb70af47-684e-4a3e-acc9-cbd7f16f32d2/cb70af47-684e-4a3e-acc9-cbd7f16f32d24.gif)
![實(shí)驗(yàn)二作業(yè)調(diào)度實(shí)驗(yàn)_第5頁(yè)](http://file1.renrendoc.com/fileroot_temp2/2020-10/26/cb70af47-684e-4a3e-acc9-cbd7f16f32d2/cb70af47-684e-4a3e-acc9-cbd7f16f32d25.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、西北農(nóng)林科技大學(xué)信息工程學(xué)院實(shí)習(xí)報(bào)告課程 操作系統(tǒng) 學(xué)院 信息工程 專(zhuān)業(yè)年級(jí) 軟件151 學(xué)號(hào) 2015012893 姓名 張?chǎng)?周次 第八周 交報(bào)告時(shí)間 2017.5.5 成績(jī) 實(shí)驗(yàn)二 作業(yè)調(diào)度實(shí)驗(yàn)一. 目的要求: 用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)或多個(gè)作業(yè)調(diào)度的模擬程序,以加深對(duì)作業(yè)調(diào)度算法的理解。 二、實(shí)驗(yàn)內(nèi)容:1、編寫(xiě)并調(diào)試一個(gè)單道處理系統(tǒng)的作業(yè)等待模擬程序。 作業(yè)等待算法:分別采用先來(lái)先服務(wù)(FCFS),最短作業(yè)優(yōu)先(SJF)、響應(yīng)比高者優(yōu)先(HRN)的調(diào)度算法。 流程圖如下:1、響應(yīng)比高者優(yōu)先算法流程圖:2、先來(lái)先服務(wù)調(diào)度算法流程圖:3、短作業(yè)優(yōu)先算法調(diào)度流程圖:實(shí)驗(yàn)代碼如下:#inclu
2、de#include#includestruct jcb char name10;/作業(yè)名 float arrtime;/提交時(shí)間 float waitTime;/等待時(shí)間 float startTime;/開(kāi)始時(shí)間 float runTime;/運(yùn)行時(shí)間 float finishTime;/完成時(shí)間 float TAtime; /周轉(zhuǎn)時(shí)間 float TAWtimei;/帶權(quán)周轉(zhuǎn)時(shí)間 float AvgTAtime,AvgTAWtimei;/平均周轉(zhuǎn)時(shí)間;平均帶權(quán)周轉(zhuǎn)時(shí)間 float bi;/響應(yīng)比;jcb JCB100;int ReadFile() int m=0; int i=0; FI
3、LE *fp; /定義文件指針 fp=fopen(3.txt,r); /打開(kāi)文件 if(fp=NULL) printf(File open error !n); exit(0); else printf(作業(yè)名 提交時(shí)間 運(yùn)行時(shí)間n); while(!feof(fp) fscanf(fp,%s%f%f,&JCB,&JCBi.arrtime,&JCBi.runTime); /fscanf()函數(shù)將數(shù)據(jù)讀入 printf(n%s%15f%12f,JCB,JCBi.arrtime,JCBi.runTime); /輸出到屏幕 i+; fclose(fp); /關(guān)閉文件 m=i-
4、1; return m;/菜單void menu() printf(nn |* 作業(yè)調(diào)度 *|n); printf( |=|n); printf( | 0.退出 |n); printf( | 1.先來(lái)先服務(wù) (FCFS) 調(diào)度算法 |n); printf( | 2.短作業(yè)優(yōu)先 (SJF) 調(diào)度算法 |n); printf( | 3.響應(yīng)比高者優(yōu)先 (HRRN) 調(diào)度算法 |n); printf( |=|n);void displayone(float p,char *h,int i,int j) strcpy(h,JCB); strcpy(JCB,JCB);
5、 strcpy(JCB,h); p=JCBi.arrtime; JCBi.arrtime=JCBj.arrtime; JCBj.arrtime=p; p=JCBi.runTime; JCBi.runTime=JCBj.runTime; JCBj.runTime=p; p=JCBi.startTime; JCBi.startTime=JCBj.startTime; JCBj.startTime=p; p=JCBi.finishTime; JCBi.finishTime=JCBj.finishTime; JCBj.finishTime=p;void displaytow(int i,i
6、nt y) printf(n); printf(作業(yè)%s先開(kāi)始運(yùn)行nn,JCB0.name); float AvgCycleTime,AvgValueCycleTime,k=0,m=0;/AvgCycleTime為平均周轉(zhuǎn)時(shí)間,AvgValueCycleTime為平均帶權(quán)周轉(zhuǎn)時(shí)間 for(i=0;iy;i+) JCB0.startTime=JCB0.arrtime; JCBi.finishTime=JCBi.startTime+JCBi.runTime;/結(jié)束時(shí)間 JCBi+1.startTime=JCBi.finishTime; JCBi.waitTime=JCBi.startTime-JC
7、Bi.arrtime;/等待時(shí)間 JCBi.TAtime=JCBi.finishTime-JCBi.arrtime;/周轉(zhuǎn)時(shí)間 JCBi.TAWtimei=JCBi.TAtime/JCBi.runTime;/帶權(quán)周轉(zhuǎn)時(shí)間 k+=JCBi.TAtime; m+=JCBi.TAWtimei; AvgCycleTime=k/y;/平均旋轉(zhuǎn)時(shí)間 AvgValueCycleTime=m/y;/平均帶權(quán)旋轉(zhuǎn)時(shí)間 printf(作業(yè)名 提交時(shí)間 開(kāi)始時(shí)間 運(yùn)行時(shí)間 結(jié)束時(shí)間 等待時(shí)間 周轉(zhuǎn)時(shí)間 帶權(quán)周轉(zhuǎn)時(shí)間n); for(i=0;iy;i+) printf(%st%.2ft%.2ft%4.2ft%6.2ft
8、%7.2ft%7.2ft%8.2fnn,JCB,JCBi.arrtime,JCBi.startTime,JCBi.runTime,JCBi.finishTime,JCBi.waitTime,JCBi.TAtime,JCBi.TAWtimei); printf(平均周轉(zhuǎn)時(shí)間為:); printf(%.2fnn,AvgCycleTime); printf(平均帶權(quán)周轉(zhuǎn)時(shí)間為:); printf(%.2fnn,AvgValueCycleTime);void FCFS(int y)/先來(lái)先服務(wù)算法 float p; int i,j; char h100; for(i=0;iy;i+) fo
9、r(j=i+1;jJCBj.arrtime) displayone(p,h,i,j); displaytow(i,y);void SJF(int y)/短作業(yè)優(yōu)先算法 float p; int i,j; char h100; for(i=0;iy;i+)/先提交的作業(yè)先運(yùn)行,后面來(lái)的作業(yè)再比較運(yùn)行時(shí)間長(zhǎng)短 for(j=i+1;jJCBj.arrtime)/先把作業(yè)按提交時(shí)間來(lái)排序 displayone(p,h,i,j); for(i=1;iy;i+) for(j=i+1;jJCBj.runTime)/比較后面來(lái)的作業(yè)的運(yùn)行時(shí)間 displayone(p,h,i,j); displaytow(i
10、,y);void HRRN(int y)/響應(yīng)比高者優(yōu)先算法 int i,j; float p; char h100; for(i=0;iy;i+)/先提交的作業(yè)先運(yùn)行,后面來(lái)的作業(yè)再比較響應(yīng)比的大小 for(j=i+1;jJCBj.arrtime)/先把作業(yè)按提交時(shí)間來(lái)排序 displayone(p,h,i,j); for(i=0;iy;i+) JCB0.startTime=JCB0.arrtime; JCBi.finishTime=JCBi.startTime+JCBi.runTime;/結(jié)束時(shí)間 JCBi+1.startTime=JCBi.finishTime; JCBi.waitTim
11、e=JCBi.startTime-JCBi.arrtime;/等待時(shí)間 JCBi.TAtime=JCBi.finishTime-JCBi.arrtime;/周轉(zhuǎn)時(shí)間 JCBi.bi=JCBi.TAtime/JCBi.runTime;/響應(yīng)比 for(i=1;iy;i+) for(j=i+1;jy;j+) if(JCBi.biJCBj.bi)/比較后面來(lái)的作業(yè)的響應(yīng)比 displayone(p,h,i,j); p=JCBi.bi; JCBi.bi=JCBj.bi; JCBj.bi=p; displaytow(i,y); for(i=1;iy;i+) printf(%s的響應(yīng)比為:%.2fn,JC
12、B,JCBi.bi); int main() while(1) int i,x,n; menu(); loop1:printf(請(qǐng)選擇模塊(03): ); scanf(%d,&i); if(i=0) exit(0); else if(i3) printf(輸入有誤,請(qǐng)重新輸入n); goto loop1;/無(wú)條件轉(zhuǎn)移語(yǔ)句 loop2:printf(原始數(shù)據(jù)是:n); n=ReadFile(); for(x=0;xn;x+) printf(n%s%15f%12f,JCB,JCBi.arrtime,JCBi.runTime); switch(i) case 0:exit(0
13、);break; case 1:FCFS(n);break; case 2:SJF(n);break; case 3:HRRN(n);break; 實(shí)驗(yàn)截圖說(shuō)明如下:這是先來(lái)先服務(wù)算法調(diào)度這是最短優(yōu)先作業(yè)調(diào)度算法結(jié)果這是響應(yīng)比高者優(yōu)先調(diào)度算法結(jié)果2、編寫(xiě)并調(diào)度一個(gè)多道程序系統(tǒng)的作業(yè)調(diào)度模擬程序。 作業(yè)調(diào)度算法:采用基于先來(lái)先服務(wù)的調(diào)度算法??梢詤⒖颊n本中的方法進(jìn)行設(shè)計(jì)。 對(duì)于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調(diào)度作業(yè)時(shí)必須考慮到每個(gè)作業(yè)的資源要求實(shí)驗(yàn)代碼如下:#include <stdio.h>#include <stdlib.h>#define getj
14、ch(type) (type*)malloc(sizeof(type)#define N 10struct jcb /* 定義作業(yè)控制塊PCB */ char name10; float needtime; /*運(yùn)行時(shí)間*/ float arrivetime;/*提交時(shí)刻*/ float storageN;/*系統(tǒng)資源*/ struct jcb* link;*ready=NULL,*pb=NULL,*p;typedef struct jcb JCB;float Tc,Ti,Wi,T=0;/*完成時(shí)刻,周轉(zhuǎn)時(shí)間,帶權(quán)周轉(zhuǎn)時(shí)間,時(shí)間量*/float TiSum=0,WiSum=0;/*平均周轉(zhuǎn)時(shí)間
15、,帶權(quán)a平均周轉(zhuǎn)時(shí)間*/float sourceN;int n;void input(); /*輸入作業(yè)信息*/int space(); /* 返回就緒隊(duì)列中作業(yè)的數(shù)目*/void fcfs(); /*先來(lái)先服務(wù)算法*/void disp(JCB *pr); /* 顯示相應(yīng)的作業(yè)*/void running(); /*運(yùn)行作業(yè)組*/void destroy(); /* 撤銷(xiāo)作業(yè)*/void input() /* 建立作業(yè)控制塊函數(shù)*/ int i,k,num; printf(" 請(qǐng)輸入所擁有的資源種類(lèi):"); scanf(" %d",& n);
16、printf(" 輸入系統(tǒng)所擁有資源數(shù):n"); for(i=0; i< n; i+) printf(" 資源%d:",i); scanf(" %f",& sourcei); printf(" n 輸入作業(yè)數(shù)量:"); scanf(" %d",& num); for(i=0; i< num; i+) printf(" n 作業(yè)號(hào)%d:n",i); p=getjch(JCB); printf(" 輸入作業(yè)名:"); scanf(&
17、quot; %s",p-> name); printf(" 輸入提交時(shí)間:"); scanf(" %f",& p-> arrivetime); printf(" 輸入運(yùn)行時(shí)間:"); scanf(" %f",& p-> needtime); printf(" 輸入所需資源數(shù):n"); for(k=0; k< n; k+) printf(" 資源%d:",i); scanf(" %f",& p->
18、; storagek); printf(" n"); p-> link=NULL; fcfs(); int space() int l=0; JCB* pr=ready; while(pr!=NULL) l+; pr=pr-> link; return(l);void disp(JCB * pr) /*建立作業(yè)顯示函數(shù),用于顯示當(dāng)前作業(yè)*/ int i; printf(" n%6st%6st%6st"," 作 業(yè) 名 "," 運(yùn)行時(shí)間"," 提交時(shí)刻"); for(i=0; i<
19、; n; i+) printf(" 資源%dt",i); printf(" n%6st%6.2ftt%6.2ft",pr-> name,pr-> needtime,pr-> arrivetime); for(i=0; i< n; i+) printf(" t%6.2f",pr-> storagei); printf(" n");void destroy() /*建立作業(yè)撤消函數(shù)(作業(yè)運(yùn)行結(jié)束,撤消作業(yè))*/ free(p);void check() JCB *first,*fir,*p
20、; int flag=0,i,test=0; first=pb; while(first& & (T> =first-> arrivetime)& & (flag=0) void running() JCB *pr; int i; printf(" 正在運(yùn)行的作業(yè)是:%sn",p-> name); disp(p); if(ready!=NULL) printf(" 就緒隊(duì)列如下:n"); pr=ready; while(pr!=NULL) disp(pr); pr=pr-> link; else p
21、rintf(" 就緒隊(duì)列為空隊(duì)列!n"); if(pb!=NULL) printf(" 后備隊(duì)列如下:n"); pr=pb; while(pr!=NULL) disp(pr); pr=pr-> link; else printf(" 后備隊(duì)列為空隊(duì)列!n"); printf(" 作 業(yè) %s 的 開(kāi) 始 運(yùn) 行 時(shí) 刻 T:%4.2fn",p-> name,T); Tc=T+p-> needtime; T=Tc; Ti=Tc-p-> arrivetime; Wi=Ti/(p-> needtime); for(i=0; i< n; i+) sourcei=sourcei+p
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度戶(hù)外廣告牌施工及品牌推廣服務(wù)合同
- 亮化工程管理服務(wù)合同
- 瑜伽館合作合同協(xié)議書(shū)
- 地產(chǎn)項(xiàng)目居間協(xié)議書(shū)房產(chǎn)轉(zhuǎn)讓全文
- 第三方公司擔(dān)保合同
- 采購(gòu)商品代理合同
- 2025年博爾塔拉貨車(chē)上崗證理論模擬考試題庫(kù)
- 2025年南通下載貨運(yùn)從業(yè)資格證模擬考試
- 2025年青海運(yùn)輸從業(yè)資格證考試試題庫(kù)
- 2025年合肥道路運(yùn)輸從業(yè)資格證考試題和答案
- GB/T 4365-2024電工術(shù)語(yǔ)電磁兼容
- 高校體育課程中水上運(yùn)動(dòng)的安全保障措施研究
- 油氣勘探風(fēng)險(xiǎn)控制-洞察分析
- GB 12710-2024焦化安全規(guī)范
- 2022年中考化學(xué)模擬卷1(南京專(zhuān)用)
- 醫(yī)療機(jī)構(gòu)質(zhì)量管理指南
- 2024-2025銀行對(duì)公業(yè)務(wù)場(chǎng)景金融創(chuàng)新報(bào)告
- 《醫(yī)療機(jī)構(gòu)老年綜合評(píng)估規(guī)范(征求意見(jiàn)稿)》
- 2025屆鄭州市高三一診考試英語(yǔ)試卷含解析
- 新《安全生產(chǎn)法》安全培訓(xùn)
- GB∕T 41097-2021 非公路用旅游觀光車(chē)輛使用管理
評(píng)論
0/150
提交評(píng)論