




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
實(shí)驗(yàn)二作業(yè)調(diào)度實(shí)驗(yàn)題目1、編寫并調(diào)試一個(gè)單道處理系統(tǒng)的作業(yè)等待模擬程序。作業(yè)調(diào)度算法:分別采用先來先服務(wù)(FCFS),最短作業(yè)優(yōu)先(SJF)、響應(yīng)比高者優(yōu)先(HRN)的調(diào)度算法。(1)先來先服務(wù)算法:按照作業(yè)提交給系統(tǒng)的先后順序來挑選作業(yè),先提交的先被挑選。(2)最短作業(yè)優(yōu)先算法:是以進(jìn)入系統(tǒng)的作業(yè)所提出的“執(zhí)行時(shí)間”為標(biāo)準(zhǔn),總是優(yōu)先選取執(zhí)行時(shí)間最短的作業(yè)。(3)響應(yīng)比高者優(yōu)先算法:是在每次調(diào)度前都要計(jì)算所有被選作業(yè)(在后備隊(duì)列中)的響應(yīng)比,然后選擇響應(yīng)比最高的作業(yè)執(zhí)行。2、編寫并調(diào)度一個(gè)多道程序系統(tǒng)的作業(yè)調(diào)度模擬程序。作業(yè)調(diào)度算法:采用基于先來先服務(wù)的調(diào)度算法??梢詤⒖颊n本中的方法進(jìn)行設(shè)計(jì)。對(duì)于多道程序系統(tǒng),要假定系統(tǒng)中具有的各種資源及數(shù)量、調(diào)度作業(yè)時(shí)必須考慮到每個(gè)作業(yè)的資源要求。實(shí)驗(yàn)?zāi)康模罕緦?shí)驗(yàn)要求用高級(jí)語(yǔ)言(C語(yǔ)言實(shí)驗(yàn)環(huán)境)編寫和調(diào)試一個(gè)或多個(gè)作業(yè)調(diào)度的模擬程序,了解作業(yè)調(diào)度在操作系統(tǒng)中的作用,以加深對(duì)作業(yè)調(diào)度算法的理解三.實(shí)驗(yàn)過程<一>單道處理系統(tǒng)作業(yè)調(diào)度1)單道處理程序作業(yè)調(diào)度實(shí)驗(yàn)的源程序:zuoye.c執(zhí)行程序:zuoye.exe2)實(shí)驗(yàn)分析:1、由于在單道批處理系統(tǒng)中,作業(yè)一投入運(yùn)行,它就占有計(jì)算機(jī)的一切資源直到作業(yè)完成為止,因此調(diào)度作業(yè)時(shí)不必考慮它所需要的資源是否得到滿足,它所占用的CPU時(shí)限等因素。2、每個(gè)作業(yè)由一個(gè)作業(yè)控制塊JCB表示,JCB可以包含如下信息:作業(yè)名、提交時(shí)間、所需的運(yùn)行時(shí)間、所需的資源、作業(yè)狀態(tài)、鏈指針等等。作業(yè)的狀態(tài)可以是等待W(Wait)、運(yùn)行R(Run)和完成F(Finish)三種狀態(tài)之一。每個(gè)作業(yè)的最初狀態(tài)總是等待W。3、對(duì)每種調(diào)度算法都要求打印每個(gè)作業(yè)開始運(yùn)行時(shí)刻、完成時(shí)刻、周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,以及這組作業(yè)的平均周轉(zhuǎn)時(shí)間及帶權(quán)平均周轉(zhuǎn)時(shí)間。3)流程圖:p->cycletime=(float)(p->finishtime-p->reachtime);p->cltime=(float)(p->cycletime/p->needtime);T1+=p->cycletime;T2+=p->cltime;disp(p,m);//調(diào)用disp()函數(shù),顯示作業(yè)運(yùn)行情況times+=p->needtime;p->state='F';printf("\n%shasbeenfinished!\npressanykeytocontinue...\n",p->name);free(p);//釋放運(yùn)行后的作業(yè)getch();}voidsuper()//計(jì)算隊(duì)列中作業(yè)的高響應(yīng)比{JCB*padv;padv=ready;do{if(padv->state=='W'&&padv->reachtime<=times)padv->super=(float)(times-padv->reachtime+padv->needtime)/padv->needtimepadv=padv->next;}while(padv!=NULL);}voidfinal()//最后打印作業(yè)的平均周轉(zhuǎn)時(shí)間,平均帶權(quán)周轉(zhuǎn)時(shí)間{floats,t;t=T1/n;s=T2/n;getch();printf("\n\n作業(yè)已經(jīng)全部完成!");printf("\n%d個(gè)作業(yè)的平均周轉(zhuǎn)時(shí)間是:%f",n,t);printf("\n%d個(gè)作業(yè)的平均帶權(quán)周轉(zhuǎn)時(shí)間是%f:\n\n\n",n,s);}voidhrn(intm)//高響應(yīng)比算法{JCB*min;inti,iden;system("cls");inital();for(i=0;i<n;i++){p=min=ready;iden=1;super();do{if(p->state=='W'&&p->reachtime<=times)if(iden){min=p;iden=0;}elseif(p->super>min->super)min=p;p=p->next;}while(p!=NULL);if(iden){i--;times++;//printf("\ntime=%d:\tnoJCBsubmib...wait...",time);if(times>1000){printf("\nruntimeistoolong...error...");getch();}}else{running(min,m);//調(diào)用running()函數(shù)}}//forfinal();//調(diào)用running()函數(shù)}voidsjf(intm)//最短作業(yè)優(yōu)先算法{JCB*min;inti,iden;system("cls");inital();for(i=0;i<n;i++){p=min=ready;iden=1;do{if(p->state=='W'&&p->reachtime<=times)if(iden){min=p;iden=0;}elseif(p->needtime<min->needtime)min=p;p=p->next;}while(p!=NULL);if(iden){i--;//printf("\ntime=%d:\tnoJCBsubmib...wait...",time);times++;if(times>100){printf("\nruntimeistoolong...error");getch();}}else{running(min,m);//調(diào)用running()函數(shù)}}//forfinal();//調(diào)用running()函數(shù)}voidfcfs(intm)//先來先服務(wù)算法{inti,iden;system("cls");inital();for(i=0;i<n;i++){p=ready;iden=1;do{if(p->state=='W'&&p->reachtime<=times)iden=0;if(iden)p=p->next;}while(p!=NULL&&iden);if(iden){i--;printf("\n沒有滿足要求的進(jìn)程,需等待");times++;if(times>100){printf("\n時(shí)間過長(zhǎng)");getch();}}else{running(p,m);//調(diào)用running()函數(shù)}}final();//調(diào)用running()函數(shù)}voidmune(){intm;system("cls");printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t作業(yè)調(diào)度演示\n");printf("\t\t*********************************************\t\t\n");printf("\n\n\n\t\t\t1.先來先服務(wù)算法.");printf("\n\t\t\t2.最短作業(yè)優(yōu)先算法.");printf("\n\t\t\t3.響應(yīng)比高者優(yōu)先算法");printf("\n\t\t\t0.退出程序.");printf("\n\n\t\t\t\t選擇所要操作:");scanf("%d",&m);switch(m){case1:fcfs(m);getch();system("cls");mune();break;case2:sjf(m);getch();system("cls");mune();break;case3:hrn(m);getch();system("cls");mune();break;case0:system("cls");break;default:printf("選擇錯(cuò)誤,重新選擇.");getch();system("cls");mune();}}main()//主函數(shù){inize();mune();}5)調(diào)試結(jié)果:1.選擇操作的界面2.輸入操作初始信息:3.先來先服務(wù)算法作業(yè)調(diào)度結(jié)果:(調(diào)度順序:a->b->c->d->e)4.最短作業(yè)優(yōu)先算法作業(yè)調(diào)度結(jié)果(調(diào)度順序:a->d->b->e->c)5.高響應(yīng)比算法作業(yè)調(diào)度結(jié)果:(調(diào)度順序a->b->d->c->e)<二>多道處理系統(tǒng)作業(yè)調(diào)度1)多道處理程序作業(yè)調(diào)度實(shí)驗(yàn)的源程序:duodao.c執(zhí)行程序:duodao.exe2)實(shí)驗(yàn)分析:采用多道程序設(shè)計(jì)方法的操作系統(tǒng),在系統(tǒng)中要經(jīng)常保留多個(gè)運(yùn)行的作業(yè),以提高系統(tǒng)效率。作業(yè)調(diào)度從系統(tǒng)已接納的暫存在輸入井中的一批作業(yè)中挑選出若干個(gè)可運(yùn)行的作業(yè),并為這些被選中的作業(yè)分配所需的系統(tǒng)資源。對(duì)被選中運(yùn)行的作業(yè)必須按照它們各自的作業(yè)說明書規(guī)定的步驟進(jìn)行控制。采用先來先服務(wù)算法算法模擬設(shè)計(jì)作業(yè)調(diào)度程序。(1)、作業(yè)調(diào)度程序負(fù)責(zé)從輸入井選擇若干個(gè)作業(yè)進(jìn)入主存,為它們分配必要的資源,當(dāng)它們能夠被進(jìn)程調(diào)度選中時(shí),就可占用處理器運(yùn)行。作業(yè)調(diào)度選擇一個(gè)作業(yè)的必要條件是系統(tǒng)中現(xiàn)有的尚未分配的資源可滿足該作業(yè)的資源要求。但有時(shí)系統(tǒng)中現(xiàn)有的尚未分配的資源既可滿足某個(gè)作業(yè)的要求也可滿足其它一些作業(yè)的要求,那么,作業(yè)調(diào)度必須按一定的算法在這些作業(yè)中作出選擇。先來先服務(wù)算法是按照作業(yè)進(jìn)入輸入井的先后次序來挑選作業(yè),先進(jìn)入輸入井的作業(yè)優(yōu)先被挑選,當(dāng)系統(tǒng)中現(xiàn)有的尚未分配的資源不能滿足先進(jìn)入輸入井的作業(yè)時(shí),那么順序挑選后面的作業(yè)。(2)假定某系統(tǒng)可供用戶使用的主存空間共100k,并有5臺(tái)磁帶機(jī)。3)流程圖:4)源程序:#include<stdio.h>#include<stdlib.h>#include<conio.h>#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0intj=0;intn,i;//n為需要輸入的作業(yè)數(shù)量floatT1=0,T2=0;//初始化周轉(zhuǎn)時(shí)間,帶權(quán)周轉(zhuǎn)時(shí)間.inttimes=0;//初始化開始運(yùn)行時(shí)間intfreesa=100,disksa=5;//預(yù)定內(nèi)存的大小為100k,磁帶數(shù)量為5個(gè).structjcb//作業(yè)控制塊{charusername[10];//用戶名charname[10];//作業(yè)名intreachtime;//作業(yè)到達(dá)時(shí)間intstarttime;//作業(yè)開始時(shí)間intruntime;//已經(jīng)運(yùn)行了的時(shí)間intneedtime;//作業(yè)需要運(yùn)行的時(shí)間intfrees;//作業(yè)要占用的內(nèi)存intdisks;//作業(yè)所需磁帶intfinishtime;//作業(yè)完成時(shí)間floatcycletime;//作業(yè)周轉(zhuǎn)時(shí)間floatcltime;//作業(yè)帶權(quán)周轉(zhuǎn)時(shí)間charstate;//作業(yè)狀態(tài)structjcb*next;//結(jié)構(gòu)體指針}*ready=NULL,*start=NULL,*p,*q,*r,*s,*t;typedefstructjcbJCB;voidinital()//建立作業(yè)控制塊隊(duì)列,先將其排成先來先服務(wù)的模式隊(duì)列{inti;printf("\n輸入作業(yè)數(shù):");scanf("%d",&n);for(i=0;i<n;i++){p=getpch(JCB);printf("\n輸入用戶名:");scanf("%s",p->username);printf("輸入作業(yè)名:");scanf("%s",p->name);getch();p->reachtime=i;printf("作業(yè)默認(rèn)到達(dá)時(shí)間:%d",i);printf("\n輸入作業(yè)要運(yùn)行的時(shí)間:");scanf("%d",&p->needtime);printf("輸入作業(yè)運(yùn)行要占用的內(nèi)存:");scanf("%d",&p->frees);printf("輸入作業(yè)運(yùn)行所需磁帶:");scanf("%d",&p->disks);p->runtime=0;p->state='W';p->next=NULL;if(ready==NULL)ready=q=p;//先將其按到達(dá)的先后順序排成后備序列else{q->next=p;q=p;}}}intspace()//計(jì)算內(nèi)存中作業(yè)的個(gè)數(shù){intl=0;JCB*pr=start;while(pr!=NULL){l++;pr=pr->next;}return(l);}voidapply()//把符合條件的作業(yè)調(diào)用內(nèi)存,并給他們分配資源,{intlen;p=ready;while(p!=NULL){if(p->frees<=freesa&&p->disks<=disksa){freesa-=p->frees;disksa-=p->disks;r=p;p=p->next;if(r==ready)//先將符合條件的作業(yè)從隊(duì)列中分離出來{ready=r->next;r->next=NULL;}else{q=ready;while(q->next!=r)q=q->next;q->next=r->next;}if(start==NULL)start=s=r;//將其插到start隊(duì)列,else{s->next=r;s=r;}}else{p=p->next;}}len=space();printf("\n\t此時(shí)有%d道作業(yè)在內(nèi)存\n\n",len);}voiddisp(JCB*pr)/*建立作業(yè)顯示函數(shù)*/{printf("|%s\t",pr->username);printf("|%s\t",pr->name);printf("|%c\t",pr->state);printf("|%d\t",pr->reachtime);printf("|%d\t",pr->needtime);printf("|%d\t",pr->runtime);printf("|%d\t",pr->frees);printf("|%d\t",pr->disks);printf("\n");}voidcheck()//顯示作業(yè)狀況{printf("\n作業(yè)%s于完成%d個(gè)作業(yè)后運(yùn)行完畢,其完成后的情況:",q->name,j);j++;printf("\n用戶名****作業(yè)名****狀態(tài)****到達(dá)時(shí)間*需運(yùn)行時(shí)間*已運(yùn)行時(shí)間*需占用內(nèi)存*需磁帶數(shù)量\n");disp(q);s=start;printf("\n\t\t*********當(dāng)前進(jìn)入內(nèi)存的作業(yè)狀態(tài)*********");printf("\n用戶名****作業(yè)名****狀態(tài)****到達(dá)時(shí)間*需運(yùn)行時(shí)間*已運(yùn)行時(shí)間*需占用內(nèi)存*需磁帶數(shù)量\n");while(s!=NULL){disp(s);s=s->next;}r=ready;printf("*\n\n\t\t*********當(dāng)前后備作業(yè)表中作業(yè)的狀態(tài)**********");printf("\n用戶名****作業(yè)名****狀態(tài)****到達(dá)時(shí)間*需運(yùn)行時(shí)間*已運(yùn)行時(shí)間*需占用內(nèi)存*需磁帶數(shù)量\n");while(r!=NULL){disp(r);r=r->next;}}voidrunning()//運(yùn)行作業(yè){for(t=start;t!=NULL;){start=t->next;q=t;q->next=NULL;q->state='R';q->runtime++;t=start;times++;if(q->runtime==q->needtime){q->finishtime=times;q->starttime=q->finishtime-q->needtime;q->cycletime=q->finishtime-q->reachtime;q->cltime=(q->cycletime)/(q->needtime);T1+=q->cycletime;T2+=q->cltime;freesa+=q->frees;disksa+=q->disks;check();//調(diào)用check()顯示正在運(yùn)行的,就緒的以及后備的作業(yè)信息free(q);//釋放作業(yè)apply();//分配作業(yè)getch();}else{for(s=start;s->next!=NULL;)s=s->next;s->next=q;}}}main()//主函數(shù){intm;printf("\n\n\t\t*********************************************\t\t\n");printf("\t\t\t\t實(shí)驗(yàn)三(2)多道作業(yè)調(diào)度\n");printf("\t\t*********************************************\t\t\n");printf("\n\t\t1.多道作業(yè)調(diào)度演示.");printf("\n\t\t0.退出程序");printf("\n\t\t\t選擇所要的操作:");printf("\n\n\n\t
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 氫能裝備施工方案
- 惠州市匯科源科技有限公司電源適配器的生產(chǎn)建設(shè)項(xiàng)目環(huán)評(píng)報(bào)告表
- 昌江縣公益性公墓及殯儀館建設(shè)工程(一期)項(xiàng)目環(huán)評(píng)報(bào)告表
- 甘肅巨化新材料有限公司股東全部權(quán)益價(jià)值項(xiàng)目資產(chǎn)評(píng)估報(bào)告
- 玻璃更換施工方案施工方案
- 2024-2025學(xué)年下學(xué)期高一語(yǔ)文第一單元A卷
- 東江大壩隧道施工方案
- 《雷雨》教案-高一下學(xué)期語(yǔ)文統(tǒng)編版
- 2025年中國(guó)碑石行業(yè)供需態(tài)勢(shì)、市場(chǎng)現(xiàn)狀及發(fā)展前景預(yù)測(cè)報(bào)告
- 提高女性、老年人及殘疾人就業(yè)率的策略及實(shí)施路徑
- 小學(xué)二年級(jí)數(shù)學(xué)-除法豎式計(jì)算訓(xùn)練100題
- 充電樁采購(gòu)安裝投標(biāo)方案
- MOOC 國(guó)際商務(wù)-暨南大學(xué) 中國(guó)大學(xué)慕課答案
- 《酵母表達(dá)系統(tǒng)》課件
- 依法行使權(quán)利-統(tǒng)編版道德與法治八年級(jí)下冊(cè)
- 巡察工作指導(dǎo)手冊(cè)
- 2023-2024全球及中國(guó)企業(yè)組織活力報(bào)告(中文版)
- 2016-2023年北京電子科技職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 電磁學(xué)第四版趙凱華習(xí)題詳細(xì)解答
- 紹興文理學(xué)院開題報(bào)告模板
- 裝卸作業(yè)安全知識(shí)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論