




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PAGEPAGE1实验报告作业调度计算机科学与技术04级一班022号剪晓光2006.12.6实验(二):作业调度本组成员:剪晓光王鹏张文艺余忠福实验目的:(1)理解什么是作业:每个用户请求计算机的一个计算任务叫做一个作业。(2)作业的执行有几个步骤:一个作业从开始执行到得出结果要经历若干步。(3)什么是作业控制方式:用户向系统提出作业加工的方式称作业控制方式。(4)作业控制方式有那几种:终端控制方式(又称直接控制方式或联机控制方式)和批处理控制方式(又称自动控制方式或脱机控制方式)。(5)作业调度的作用:通过模拟作业调度的实现,了解作业调度在操作系统中的作用。实验内容:(1):设计一个小系统(能够通过小系统中作业的调度了解多道操作系统中作业执行)。(2):通过小系统的模拟,分析多道系统的作业执行。(3):提出系统中作业的调度的改进措施,以提高作业的执行效率,提高多道操作系统的处理能力。流程图如下:源程序如下:#include"stdio.h"#include"stdlib.h"#include"time.h"#defineMax100//最大作业数#defineMEMLENGTH180#defineRECORDERNUM16typedefstructJCB//作业控制块{intUserID;//用户名intJobID;//作业名charstatus;//状态floatRunTime;//运行时间intApplyMem;//申请主存大小intApplyRecorder;//申请磁带数structJCB*next;}JCB;voidJTinit(JCB*p)//构造一个空的{ p->next=(JCB*)malloc(sizeof(JCB)); p->next->next=NULL; p->UserID=p->JobID=NULL;}voidJTinsert(JCB*jt,JCB*j)//插入{JCB*p;for(p=jt;p->next!=NULL;p=p->next);p->next=j;j->next=NULL;}intJTdel(JCB*jt,JCB*j)//删除{JCB*p;if(j==NULL)return0;p=jt->next;if(p==NULL)return0;for(;p->next!=NULL&&p->next!=j;p=p->next);if(p->next==NULL)return0;p->next=j->next;return1;}JCB*JTfind(JCB*jcb,charstatus)//查找{JCB*p;if(jcb==NULL)returnNULL;//若作业控制块为空,返回NULLfor(p=jcb->next;p!=NULL&&p->status!=status;p=p->next);returnp;}voidJTrelease(JCB*jt)//释放{JCB*p;JCB*q;p=jt->next;if(p==NULL)return;for(q=p->next;q!=NULL;p=q,q=q->next)free(p);}JCBjt;intmemory=MEMLENGTH;intrecorder=RECORDERNUM;intnum,num1;intm;inte=0;intrunnum=0;voidstop(intn)//运行该函数大概需要n/100秒,用来模拟作业执行时间{inti=0,j,m;for(;i<=2650;i++){ for(j=0;j<n;j++) { m=1000; while(m){m--;} }}}voidrun(){ JCB*ep,*pd; voidrecover();//函数声明 if(num>0)//若作业表中有尚未选中的作业 { ep=JTfind(&jt,'s'); pd=ep; if(m==2) { while((pd=JTfind(pd,'s'))!=NULL) if(ep->RunTime>=pd->RunTime) ep=pd; } while(num>0&&ep&&memory>=ep->ApplyMem&&recorder>=ep->ApplyRecorder) { num--; ep->status='e'; memory-=ep->ApplyMem; recorder-=ep->ApplyRecorder; e++; printf("选中第%d个占有处理机执行的作业:\n",e); printf("作业名:zy%d\t用户名:User%d\t运行时间:%1.2f秒\n",ep->JobID,ep->UserID,ep->RunTime); printf("申请主存量:%dK\t申请磁带数:%d\n",ep->ApplyMem,ep->ApplyRecorder); printf("剩余主存量:%dK\t剩余磁带数:%d\n\n",memory,recorder); ep=JTfind(&jt,'s'); pd=ep; if(m==2) { while((pd=JTfind(pd,'s'))!=NULL) if(ep->RunTime>=pd->RunTime) ep=pd; } if(ep==NULL) { printf("**************主存中已无收容态的作业!**************\n\n"); recover(); } elseif(recorder<ep->ApplyRecorder) { printf("**************磁带数不足**************\n\n"); recover(); } elseif(memory<ep->ApplyMem) { printf("**************主存量不足**************\n\n"); recover(); } } }}voidrecover(){ JCB*ep,*pd; ep=JTfind(&jt,'e'); pd=ep; if(m==2) { while((pd=JTfind(pd,'e'))!=NULL) if(ep->RunTime>=pd->RunTime) ep=pd; } while(num1>0&&ep) { inttime=int(100*ep->RunTime);stop(time); runnum++; num1--; ep->status='f'; memory+=ep->ApplyMem; recorder+=ep->ApplyRecorder; printf("第%d个作业执行结束:\n",runnum); printf("作业名:zy%d\t用户名:User%d\t运行时间:%1.2f秒\n",ep->JobID,ep->UserID,ep->RunTime); printf("申请主存量:%dK\t申请磁带数:%d\n",ep->ApplyMem,ep->ApplyRecorder); printf("剩余主存量:%dK\t剩余磁带数:%d\n\n\n",memory,recorder); ep=JTfind(&jt,'e'); pd=ep; if(m==2) { while((pd=JTfind(pd,'e'))!=NULL) if(ep->RunTime>=pd->RunTime) ep=pd; } if(num1>=0&&ep==NULL)printf("****************作业全部执行结束****************\n\n"); elseif(JTfind(&jt,'s')) { if(memory>=ep->ApplyMem&&recorder>=ep->ApplyRecorder) { run(); } } }}voidinit(intn){ JCB*p; JTinit(&jt); //产生随机运行时间数组Tr[Max] inti=0,t[Max]; floattt[Max],Rt[Max]; srand((unsigned)time(NULL)); for(i=0;i<n;i++) { t[i]=rand()*1l*rand()%101; while(t[i]==0)//控制产生不为0的数 {t[i]=rand()*1l*rand()%101;} tt[i]=float(t[i]); Rt[i]=tt[i]/40; } //产生随机申请主存量数组Am[Max] intAm[Max]; for(intj=0;j<n;j++) { Am[j]=rand()*1l*rand()%61; while(Am[j]<=4)//控制产生不为0的数 {Am[i]=rand()*1l*rand()%61;} } //产生随机申请磁带数数组Ar[Max] intr=0,Ar[Max]; for(r=0;r<n;r++) { Ar[r]=rand()*1l*rand()%5; while(Ar[r]==0) {Ar[r]=rand()*1l*rand()%5;} } //初始化 for(intk=0;k<n;k++) { p=(JCB*)malloc(sizeof(JCB)); p->UserID=p->JobID=k+1; p->status='s'; p->RunTime=Rt[k]; p->ApplyMem=Am[k]; p->ApplyRecorder=Ar[k]; JTinsert(&jt,p); } printf("初始化成功!\n");}voidmain(){ printf("输入你要创建的作业数【n<=%d】:",Max); scanf("%d",&num); num1=num; init(num1);//初始化 printf("选择调度算法:1.先来先服务法2.最短作业优先法\n"); scanf("%d",&m); run(); JTrelease(&jt);//释放资源 printf("\n\n****************调度完成****************\n\n");}(四)程序的使用:调试后好运行程序,出现如下界面,显示的是输入所需要的作业数:这时我们可以输入任何小于100的数字。例如现在我们输入12,显示的是:请求选择算法,1、先来先服务法(FCFS);2、最短作业优先法(SJF);出现如下界面:假如输入1将输出如下:假如输入2将输出如下:(五)关于模拟系统的演示:(名称:作业调度演示系统)运行作业调度演示.swf后可以看到用户界面如图所示:点击“点击进入”即可以进入作业调度模拟系统:看到以下用户界面:点击“播放”作业调度演示将开始进行:在执行的过程中,绿色的高亮显示将根据正确的顺序依次进行。而且界面右下角有:,通过这个“暂停”,可以实现在任何地方停止,然后点击“播放”演示又将继续执行。还有“返回主界面”按纽,可以回到进入演示系统的初始界面。六、实验总结:通过这次的操作系统的分组实验,我学到了很多东西:(1)我学会了用小系统模拟大系统的方法来模拟大系统的实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车原厂协议书
- 消防联盟协议书
- 民事终结协议书
- 建筑工程招投标与合同管理教材
- 产品联合研发战略合作协议签署备忘录
- 企业并购融资咨询协议书
- 车位销售合作合同协议
- 春雨医生协议书
- 连带责任担保合同协议
- 无效房屋协议书
- 2025届新高考生物热点冲刺复习:蛋白质的分选与囊泡运输
- 【MOOC】介入放射学-东南大学 中国大学慕课MOOC答案
- DL-T5054-2016火力发电厂汽水管道设计规范
- 武汉绿地中心项目技术管理策划书(48页)
- 油田相关业务的税制及税率
- 北师大版物理八年级下册课课练:专题训练 透镜的相关作图(含答案)
- 《国际经济法》案例思考题
- 投掷:原地投掷垒球
- 港口码头常用安全警示标志
- 密闭式周围静脉输液技术PPT课件
- 乘法分配律练习题四年级
评论
0/150
提交评论