实验二作业调度实验

上传人:无*** 文档编号:41612234 上传时间:2021-11-22 格式:DOC 页数:22 大小:166.50KB
收藏 版权申诉 举报 下载
实验二作业调度实验_第1页
第1页 / 共22页
实验二作业调度实验_第2页
第2页 / 共22页
实验二作业调度实验_第3页
第3页 / 共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 0str

3、uct jcbchar name10;int htime;int ntime;char state;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;i<=num;i+)printf("n作业 %d",i);p=(JCB*)malloc(sizeof(JCB);printf("n作业名:&

4、quot;);scanf("%s",p->name);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->link!=NULL)flag=flag->link;flag->link=p

5、;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!=

6、NULL;pr=pr->link)printf("nnamethtimetntimetstaten");printf("%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; i

7、nt 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=getchar();running();tc=tb+p->ntime;/完成时间ti=tc-p->htime;/周转时间tis+=ti;wi=ti/p->ntime;/平均

8、带权周转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);prin

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

10、edtime; /*运行时间*/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 fcfs(

11、); /*先来先服务算法*/void disp(JCB *pr); /* 显示相应的作业*/void running(); /*运行作业组*/void destroy(); /* 撤销作业*/void input() /* 建立作业控制块函数*/ int i,k,num; printf("请输入所拥有的资源种类:");scanf("%d",&n);printf("输入系统所拥有资源数:n");for(i=0;i<n;i+)printf("资源%d:",i);scanf("%f",&

12、amp;sourcei); printf("n 输入作业数量:");scanf("%d",&num); for(i=0;i<num;i+) printf("n 作业号%d:n",i);p=getjch(JCB); printf("输入作业名:");scanf("%s",p->name); printf("输入提交时间:");scanf("%f",&p->arrivetime);printf("输入运行时间:&qu

13、ot;);scanf("%f",&p->needtime); printf("输入所需资源数:n");for(k=0;k<n;k+)printf("资源%d:",i);scanf("%f",&p->storagek); printf("n"); p->link=NULL; fcfs(); int space() int l=0; JCB* pr=ready; while(pr!=NULL) l+; pr=pr->link; return(l); vo

14、id disp(JCB * pr) /*建立作业显示函数,用于显示当前作业*/ int i;printf("n%6st%6st%6st","作业名","运行时间","提交时刻");for(i=0;i<n;i+)printf("资源%dt",i);printf("n%6st%6.2ftt%6.2ft",pr->name,pr->needtime,pr->arrivetime);for(i=0;i<n;i+)printf("t%6.2f&q

15、uot;,pr->storagei);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<n;i+)if(sourcei>=first->storagei)sourcei=sourcei-first->

16、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;int ins=0;if(pb=NULL)|(p->arrivetime<pb->arrivetime)p->link=pb;pb=p;el

17、sefirst=pb;second=first->link;while(second!=NULL)if(p->arrivetime<second->arrivetime)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);di

18、sp(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->n

19、ame,T);Tc=T+p->needtime;T=Tc;Ti=Tc-p->arrivetime;Wi=Ti/(p->needtime);for(i=0;i<n;i+)sourcei=sourcei+p->storagei;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;in

20、put(); 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(T<pb->arrivetime)T=pb->arrivetime;check();len=space(); printf("n该作业组的平均周转时间:%4.2fn",TiS

21、um /len); printf("该作业组的带权平均周转时间:%4.2fn",WiSum/len);ch=getchar(); 运行结果:3.多道程序系统的作业调度模拟程序。 (采用基于优先级的作业调度) 实习代码:#include <stdio.h>#include <stdlib.h> #define getjch(type) (type*)malloc(sizeof(type) #define N 10struct jcb /* 定义作业控制块PCB */ char name10; float needtime; /*运行时间*/float

22、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 fcfs(); /*先来先服务算法*/void dis

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

24、quot;n 输入作业数量:");scanf("%d",&num); for(i=0;i<num;i+) printf("n 作业号%d:n",i);p=getjch(JCB); printf("输入作业名:");scanf("%s",p->name); printf("输入提交时间:");scanf("%f",&p->arrivetime);printf("输入运行时间:");scanf("%f&qu

25、ot;,&p->needtime); printf("输入所需资源数:n");for(k=0;k<n;k+)printf("资源%d:",i);scanf("%f",&p->storagek); 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) /*建立

26、作业显示函数,用于显示当前作业*/ int i;printf("n%6st%6st%6st","作业名","运行时间","提交时刻");for(i=0;i<n;i+)printf("资源%dt",i);printf("n%6st%6.2ftt%6.2ft",pr->name,pr->needtime,pr->arrivetime);for(i=0;i<n;i+)printf("t%6.2f",pr->storagei);

27、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<n;i+)if(sourcei>=first->storagei)sourcei=sourcei-first->storagei;elsetest=1;if

28、(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;int ins=0;if(pb=NULL)|(p->arrivetime<pb->arrivetime)p->link=pb;pb=p;elsefirst=pb;second=firs

29、t->link;while(second!=NULL)if(p->arrivetime<second->arrivetime)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)p

30、rintf("就绪队列如下: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->need

31、time;T=Tc;Ti=Tc-p->arrivetime;Wi=Ti/(p->needtime);for(i=0;i<n;i+)sourcei=sourcei+p->storagei;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->arrive

32、time;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(T<pb->arrivetime)T=pb->arrivetime;check();len=space(); printf("n该作业组的平均周转时间:%4.2fn",TiSum /len); printf("该作业组的带权平均周转时间:%4.2fn",WiSum/len);ch=getchar(); 运行结果:调

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!