收藏 分享(赏)

实验二_作业调度实验.doc

上传人:hskm5268 文档编号:7823431 上传时间:2019-05-27 格式:DOC 页数:22 大小:166.50KB
下载 相关 举报
实验二_作业调度实验.doc_第1页
第1页 / 共22页
实验二_作业调度实验.doc_第2页
第2页 / 共22页
实验二_作业调度实验.doc_第3页
第3页 / 共22页
实验二_作业调度实验.doc_第4页
第4页 / 共22页
实验二_作业调度实验.doc_第5页
第5页 / 共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

3、 state;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-

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“);pr

5、intf(“%st“,pr-name);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();/pr

6、intf(“npress any key to continue.“);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();pr

7、intf(“n*所有作业都已经完成“);printf(“n 总周转时间:%dn“,tis/i);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 n

8、eedtime; /*运行时间*/float arrivetime;/*提交时刻*/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 fc

9、fs(); /*先来先服务算法*/void disp(JCB *pr); /* 显示相应的作业*/void running(); /*运行作业组*/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;

10、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=0;istoragei);printf(“n“); void destr

11、oy() /*建立作业撤消函数(作业运行结束,撤消作业)*/ free(p); void check()JCB *first,*fir,*p;int flag=0,i,test=0;first=pb;while(firsti=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;el

12、seflag=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=1;elsefirst=first-link; second=second-link;if(ins=0)first-link=p;void ru

13、nning()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;elseprintf(“后备队列为空队列!n“);printf(“作业%s 的开始运行时刻 T:%4.2fn“,p-name,T);

14、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;check();len=space(); while(len!=0)p=ready; ready=p-lin

15、k; 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(si

16、zeof(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;/*完成时刻,周转时间,带权周转时间,时间量 */float TiSum=0,WiSum=0;/*平均周转时间,带权 a 平均周转时间*/float so

17、urceN;int n;void input(); /*输入作业信息 */int space(); /* 返回就绪队列中作业的数目*/void fcfs(); /*先来先服务算法 */void disp(JCB *pr); /* 显示相应的作业*/void running(); /*运行作业组 */void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf(“请输入所拥有的资源种类:“);scanf(“%d“,printf(“输入系统所拥有资源数:n“);for(i=0;iname); printf(“输入提

18、交时间:“);scanf(“%f“,printf(“输入运行时间:“);scanf(“%f“, 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

19、=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,test=0;first=pb;while(firsti=first-storagei)sourcei=sourcei-first-storagei;elsetest=1;if(test=0)p=first;first=first-link;p-link=NULL;if(re

20、ady=NULL)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=

21、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);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)

22、;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);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)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(); 运行结果:调

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报