ImageVerifierCode 换一换
格式:DOCX , 页数:33 ,大小:411.52KB ,
资源ID:6346723      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6346723.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(作业调度先来先服务实验分析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

作业调度先来先服务实验分析.docx

1、作业调度先来先服务实验分析实验二 作业调度实验一. 目的要求: 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二. 例题:为单道批处理系统设计一个作业调度程序。 由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。 作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。 每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、

2、链指针等等。 作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。 各个等待的作业按照提交时刻的先后次序排队,总是首先调度等待队列中队首的作业。 每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。 调度算法的流程图如下图所示。三 . 实习题: 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 对每种调度算法都要求打印每个作业

3、开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。实验代码:#include #include #include #define getpch(type) (type*)malloc(sizeof(type)#define NULL 0int n;float T1=0,T2=0;int times=0;struct jcb /作业控制块 char name10; /作业名 int reachtime; /作业到达时间 int starttime; /作业开始时间 int needtime; /作业需要运行的时间 float s

4、uper; /作业的响应比 int finishtime; /作业完成时间 float cycletime; /作业周转时间 float cltime; /作业带权周转时间 char state; /作业状态 struct jcb *next; /结构体指针*ready=NULL,*p,*q;typedef struct jcb JCB;void inize() /初始化界面 printf(nntt*ttn); printf(tttt单道批处理作业调度系统n); printf(tt*ttn); printf(nnntttt软件143赵媛媛nn); printf(tttttn); printf(

5、nnntt请输入任意键进入n); getch();void inital() /建立作业控制块队列,先将其排成先来先服务的模式队列int i;printf(n输入作业数:);scanf(%d,&n);for(i=0;iname); getch(); p-reachtime=i; printf(作业默认到达时间:%d,i); printf(n输入作业要运行的时间:); scanf(%d,&p-needtime); p-state=W; p-next=NULL; if(ready=NULL) ready=q=p; else q-next=p; q=p; void disp(JCB* q,int m

6、) /显示作业运行后的周转时间及带权周转时间等 if(m=3) /显示高响应比算法调度作业后的运行情况 printf(n作业%s正在运行,估计其运行情况:n,q-name); printf(开始运行时刻:%dn,q-starttime); printf(完成时刻:%dn,q-finishtime); printf(周转时间:%fn,q-cycletime); printf(带权周转时间:%fn,q-cltime); printf(相应比:%fn,q-super); getch(); else / 显示先来先服务,最短作业优先算法调度后作业的运行情况 printf(n作业%s正在运行,估计其运行

7、情况:n,q-name); printf(开始运行时刻:%dn,q-starttime); printf(完成时刻:%dn,q-finishtime); printf(周转时间:%fn,q-cycletime); printf(带权周转时间:%fn,q-cltime); getch(); void running(JCB *p,int m) /运行作业 if(p=ready) /先将要运行的作业从队列中分离出来 ready=p-next; p-next=NULL; else q=ready; while(q-next!=p) q=q-next; q-next=p-next; p-startti

8、me=times; /计算作业运行后的完成时间,周转时间等等 p-state=R; p-finishtime=p-starttime+p-needtime; p-cycletime=(float)(p-finishtime-p-reachtime); p-cltime=(float)(p-cycletime/p-needtime); T1+=p-cycletime; T2+=p-cltime; disp(p,m); /调用disp()函数,显示作业运行情况 times+=p-needtime; p-state=F; printf(n%s has been finished!npress any

9、 key to continue.n,p-name); free(p); /释放运行后的作业 getch();void super() /计算队列中作业的高响应比 JCB *padv; padv=ready; do if(padv-state=W&padv-reachtimesuper=(float)(times-padv-reachtime+padv-needtime)/padv-needtime; padv=padv-next; while(padv!=NULL);void final() /最后打印作业的平均周转时间,平均带权周转时间 float s,t; t=T1/n; s=T2/n;

10、 getch(); printf(nn作业已经全部完成!); printf(n%d个作业的平均周转时间是:%f,n,t); printf(n%d个作业的平均带权周转时间是%f:nnn,n,s); void hrn(int m) /高响应比算法 JCB *min; int i,iden; system(cls); inital(); for(i=0;istate=W&p-reachtimesupermin-super) min=p; p=p-next; while(p!=NULL); if(iden) i-;times+;/printf(ntime=%d:tno JCB submib.wait.

11、,time); if(times1000)printf(nruntime is too long.error.);getch(); else running(min,m); /调用running()函数 /for final(); /调用running()函数void sjf(int m) / 最短作业优先算法 JCB *min; int i,iden; system(cls); inital(); for(i=0;istate=W&p-reachtimeneedtimeneedtime) min=p; p=p-next; while(p!=NULL) ; if(iden) i-; /prin

12、tf(ntime=%d:tno JCB submib.wait.,time); times+; if(times100)printf(nruntime is too long.error);getch(); else running(min,m); /调用running()函数 /for final(); /调用running()函数void fcfs(int m) /先来先服务算法 int i,iden; system(cls); inital(); for(i=0;istate=W&p-reachtimenext; while(p!=NULL&iden) ; if(iden) i-; pr

13、intf(n没有满足要求的进程,需等待); times+; if(times100)printf(n时间过长);getch(); else running(p,m); /调用running()函数 final(); /调用running()函数void mune() int m; system(cls); printf(nntt*ttn); printf(tttt作业调度演示n); printf(tt*ttn); printf(nnnttt1.先来先服务算法.); printf(nttt2.最短作业优先算法.); printf(nttt3.响应比高者优先算法); printf(nttt0.退出

14、程序.); printf(nntttt选择所要操作:); scanf(%d,&m);switch(m) case 1: fcfs(m); getch(); system(cls); mune(); break; case 2: sjf(m); getch(); system(cls); mune(); break; case 3: hrn(m); getch(); system(cls); mune(); break; case 0: system(cls); break; default: printf(选择错误,重新选择.); getch(); system(cls); mune(); m

15、ain() /主函数 inize(); mune();实验截图2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。 实验代码:#include #include #define getjch(type) (type*)malloc(sizeof(type)#define N 10struct jcb /* 定义作业控制块PCB */ char name10; float needtime; /*运行时间*/ float arri

16、vetime;/*提交时刻*/ float storageN;/*系统资源*/ struct jcb* link;*ready=NULL,*pb=NULL,*p;typedef struct jcb JCB;float Tc,Ti,Wi,T=0;/*完成时刻,周转时间,带权周转时间,时间量*/float TiSum=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/float sourceN;int n;void input(); /*输入作业信息*/int space(); /* 返回就绪队列中作业的数目*/void fcfs(); /*先来先服务算法*/void disp(JCB

17、 *pr); /* 显示相应的作业*/void running(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(请输入所拥有的资源种类:); scanf(%d,&n); printf(输入系统所拥有资源数:n); for(i=0;in;i+) printf(资源%d:,i); scanf(%f,&sourcei); printf(n 输入作业数量:); scanf(%d,&num); for(i=0;iname); printf(输入提交时间:); scanf(%f,&p-

18、arrivetime); printf(输入运行时间:); scanf(%f,&p-needtime); printf(输入所需资源数:n); for(k=0;kstoragek); 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) /*建立作业显示函数,用于显示当前作业*/ int i; printf(n%6st%6st%6st,作业名,运行时间,提交时刻); for(i=0;inam

19、e,pr-needtime,pr-arrivetime); for(i=0;istoragei); printf(n);void destroy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ free(p);void check() JCB *first,*fir,*p; int flag=0,i,test=0; first=pb; while(first&(T=first-arrivetime)&(flag=0) for(i=0;i=first-storagei) sourcei=sourcei-first-storagei; else test=1; if(test=0) p=f

20、irst; first=first-link; p-link=NULL; if(ready=NULL) ready=p; else fir=ready; while(fir-link!=NULL) fir=fir-link; fir-link=p; else flag=1; pb=first;void fcfs() JCB *first,*second; int ins=0; if(pb=NULL)|(p-arrivetimearrivetime) p-link=pb; pb=p; else first=pb; second=first-link; while(second!=NULL) if

21、(p-arrivetimearrivetime) p-link=second; second=NULL; first-link=p; ins=1; else first=first-link; second=second-link; if(ins=0) first-link=p; void running() JCB *pr; int i; printf(正在运行的作业是:%sn,p-name); disp(p); if(ready!=NULL) printf(就绪队列如下:n); pr=ready; while(pr!=NULL) disp(pr); pr=pr-link; else pri

22、ntf(就绪队列为空队列!n); if(pb!=NULL) printf(后备队列如下:n); pr=pb; while(pr!=NULL) disp(pr); pr=pr-link; else printf(后备队列为空队列!n); printf(作业%s的开始运行时刻T:%4.2fn,p-name,T); Tc=T+p-needtime; T=Tc; Ti=Tc-p-arrivetime; Wi=Ti/(p-needtime); for(i=0;istoragei; printf(完成时刻Tc:%4.2fn,Tc); printf(周转时间Ti:%4.2fn,Ti); printf(带权周

23、转时间Wi:%4.2fn,Wi); TiSum+=Ti; WiSum+=Wi; destroy();main() /主函数 int len; char ch; input(); T=pb-arrivetime; check(); len=space(); while(len!=0)&(ready!=NULL) system(pause); p=ready; ready=p-link; p-link=NULL; running(); if(pb!=NULL) if(ready=NULL) if(Tarrivetime) T=pb-arrivetime; check(); len=space(); printf(n该作业组的平均周转时间:%4.2fn,TiSum /len); printf(该作业组的带权平均周转时间:%4.2fn,WiSum/len); ch=getchar();实验截图:3、编写并调试一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于优先级的作业调度。 可以参考课本中的例子自行设计。 实验代码:#include #include #define getjch(type) (type*)malloc(sizeof(type)#define N 10struct jcb /* 定义作业控制块PCB */

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1