实验二作业调度实验.doc

上传人:土8路 文档编号:9972929 上传时间:2021-04-07 格式:DOC 页数:22 大小:121KB
返回 下载 相关 举报
实验二作业调度实验.doc_第1页
第1页 / 共22页
实验二作业调度实验.doc_第2页
第2页 / 共22页
实验二作业调度实验.doc_第3页
第3页 / 共22页
实验二作业调度实验.doc_第4页
第4页 / 共22页
实验二作业调度实验.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《实验二作业调度实验.doc》由会员分享,可在线阅读,更多相关《实验二作业调度实验.doc(22页珍藏版)》请在三一文库上搜索。

1、实验二作业调度实验一. 实验目的要求 用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。 二. 实验要求 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统

2、中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。3、编写并调试一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于优先级的作业调度。 三、实验过程1.单道处理系统的作业等待模拟程序(分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 )实习代码:#include stdio.h#include stdlib.h#define getjcb(type)(type*)malloc(sizeof(type)#define NULL 0struct jcbchar name10;int htime;int ntime;char stat

3、e;struct jcb *link; *ready=NULL,*p;typedef struct jcb JCB;int input()int num,i,t=0;void sort();printf(n请输入作业个数:);scanf(%d,&num);for(i=1;iname);printf(n作业运行时间:);scanf(%d,&p-ntime);p-htime=t; p-state=w; p-link=NULL;sort();t+;return t;void sort()JCB *flag;if(ready=NULL)ready=p;elseflag=ready;while(flag

4、-link!=NULL)flag=flag-link;flag-link=p;void show()JCB *pr;printf(n*正在运行的作业是 :%s ,p-name);printf(nnamethtimetntimetstaten);printf(%st,p-name);printf(%dt,p-htime);printf(%dt,p-ntime);printf(%ct,p-state);printf(nn*就绪队列);for(pr=ready;pr!=NULL;pr=pr-link)printf(nnamethtimetntimetstaten);printf(%st,pr-nam

5、e);printf(%dt,pr-htime);printf(%dt,pr-ntime);printf(%ct,pr-state);void running()printf(n作业 %s已经完成n,p-name);free(p);main()char c;int t=0; int tb,tc,ti,wi;int tis=0,wis=0,i=0;t=input();while(ready!=NULL)c=getchar();+i;p=ready;ready=p-link;p-link=NULL;p-state=r;tb=t;show();/printf(npress any key to con

6、tinue.);c=getchar();running();tc=tb+p-ntime;/完成时间ti=tc-p-htime;/周转时间tis+=ti;wi=ti/p-ntime;/平均带权周转wis+=wi;printf(n作业 %d 开始: n, t);printf(n作业%d 完成:n,t);printf(n周转时间:%dn,ti);printf(n带权周转时间: %dn,wi);t=t+p-ntime;/printf(npress any key to continue.);c=getchar();printf(n*所有作业都已经完成);printf(n总周转时间:%dn,tis/i)

7、;printf(n总带权周转时间:%dn,wis/i);/printf(npress any key to continue.);c=getchar();运行结果: 2. 多道程序系统的作业调度模拟程序(采用基于先来先服务的调度算法)实习代码:#include #include #define getjch(type) (type*)malloc(sizeof(type) #define N 10struct jcb /* 定义作业控制块PCB */ char name10; float needtime; /*运行时间*/float arrivetime;/*提交时刻*/float stor

8、ageN;/*系统资源*/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 *pr); /* 显示相应的作业*/void

9、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-arrivetime);printf(输入运行时间:);sca

10、nf(%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;iname,pr-needtime,pr-arrivetime);for(i=

11、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;elsetest=1;if(test=0)p=first;first=first-link;p-link=NULL;if(ready=NU

12、LL)ready=p;elsefir=ready;while(fir-link!=NULL)fir=fir-link;fir-link=p;elseflag=1;pb=first;void fcfs()JCB *first,*second;int ins=0;if(pb=NULL)|(p-arrivetimearrivetime)p-link=pb;pb=p;elsefirst=pb;second=first-link;while(second!=NULL)if(p-arrivetimearrivetime)p-link=second;second=NULL;first-link=p;ins=

13、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;elseprintf(就绪队列为空队列!n);if(pb!=NULL)printf(后备队列如下:n);pr=pb;while(pr!=NULL)disp(pr);pr=pr-link;e

14、lseprintf(后备队列为空队列!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(带权周转时间Wi:%4.2fn,Wi);TiSum+=Ti;WiSum+=Wi;destroy();main() /主函数int len; char ch;input(); T=pb-arrivetime;chec

15、k();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.多道程序系统的作业调度模拟程序。

16、(采用基于优先级的作业调度) 实习代码:#include #include #define getjch(type) (type*)malloc(sizeof(type) #define N 10struct jcb /* 定义作业控制块PCB */ char name10; float needtime; /*运行时间*/float arrivetime;/*提交时刻*/float storageN;/*系统资源*/struct jcb* link; *ready=NULL,*pb=NULL,*p; typedef struct jcb JCB; float Tc,Ti,Wi,T=0;/*完

17、成时刻,周转时间,带权周转时间,时间量*/float TiSum=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/float sourceN;int n;void input(); /*输入作业信息*/int space(); /* 返回就绪队列中作业的数目*/void fcfs(); /*先来先服务算法*/void disp(JCB *pr); /* 显示相应的作业*/void running(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(请输入所拥有的资源

18、种类:);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-arrivetime);printf(输入运行时间:);scanf(%f,&p-needtime); printf(输入所需资源数:n);for(k=0;kstoragek); printf(n); p-link=NULL; fcfs(); int space()

19、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;iname,pr-needtime,pr-arrivetime);for(i=0;istoragei);printf(n); void destroy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ free(p); void check()JCB *first,*fir,

20、*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;elsetest=1;if(test=0)p=first;first=first-link;p-link=NULL;if(ready=NULL)ready=p;elsefir=ready;while(fir-link!=NULL)fir=fir-link;fir-link=p;elseflag=1;pb=first;void fcfs()J

21、CB *first,*second;int ins=0;if(pb=NULL)|(p-arrivetimearrivetime)p-link=pb;pb=p;elsefirst=pb;second=first-link;while(second!=NULL)if(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(正

22、在运行的作业是:%sn,p-name);disp(p);if(ready!=NULL)printf(就绪队列如下:n);pr=ready;while(pr!=NULL)disp(pr);pr=pr-link;elseprintf(就绪队列为空队列!n);if(pb!=NULL)printf(后备队列如下:n);pr=pb;while(pr!=NULL)disp(pr);pr=pr-link;elseprintf(后备队列为空队列!n);printf(作业%s的开始运行时刻T:%4.2fn,p-name,T);Tc=T+p-needtime;T=Tc;Ti=Tc-p-arrivetime;Wi=

23、Ti/(p-needtime);for(i=0;istoragei;printf(完成时刻Tc:%4.2fn,Tc);printf(周转时间Ti:%4.2fn,Ti);printf(带权周转时间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(); 运行结果:调

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1