实验二_作业调度实验

上传人:飞*** 文档编号:24848492 上传时间:2017-12-07 格式:DOC 页数:22 大小:166.50KB
返回 下载 相关 举报
实验二_作业调度实验_第1页
第1页 / 共22页
实验二_作业调度实验_第2页
第2页 / 共22页
实验二_作业调度实验_第3页
第3页 / 共22页
实验二_作业调度实验_第4页
第4页 / 共22页
实验二_作业调度实验_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《实验二_作业调度实验》由会员分享,可在线阅读,更多相关《实验二_作业调度实验(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 sta

3、te;struct jcb *link; *ready=NULL,*p;typedef struct jcb JCB;int input()int num,i,t=0;void sort();printf(n 请输入作业个数:);scanf(%d,for(i=1;iname);printf(n 作业运行时间:);scanf(%d,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-link!=NULL)f

4、lag=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-name);printf(%dt

5、,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 continue.);c=ge

6、tchar();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);printf

7、(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 storageN;

8、/*系统资源*/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 run

9、ning(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(请输入所拥有的资源种类:);scanf(%d,printf(输入系统所拥有资源数:n);for(i=0;iname); printf(输入提交时间:);scanf(%f,printf(输入运行时间:);scanf(%f, printf(输入所需资源数:n);for(k=0;kstoragek); printf(n); p-link=NULL; fcfs(); int space() int l=0; JCB* pr=

10、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,*p;int flag=0,i,t

11、est=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()JCB *first,*second

12、;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;elsefirst=first-link; second=second-link;if(ins=0)first-link=p;void running()JCB *pr;int i;printf(正在运行的作业是:%sn,p-name

13、);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=Ti/(p-needtime);

14、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!=NUL

15、L)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 */ char name10; f

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号