实验2 - 作业调度实验.docx
- 文档编号:249463
- 上传时间:2022-10-07
- 格式:DOCX
- 页数:24
- 大小:65.86KB
实验2 - 作业调度实验.docx
《实验2 - 作业调度实验.docx》由会员分享,可在线阅读,更多相关《实验2 - 作业调度实验.docx(24页珍藏版)》请在冰豆网上搜索。
实验二作业调度实验
一.实验目的要求
用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。
二.实验要求
1、编写并调试一个单道处理系统的作业等待模拟程序。
作业等待算法:
分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。
2、编写并调度一个多道程序系统的作业调度模拟程序。
作业调度算法:
采用基于先来先服务的调度算法。
可以参考课本中的方法进行设计。
对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。
3、编写并调试一个多道程序系统的作业调度模拟程序。
作业调度算法:
采用基于优先级的作业调度。
三、实验过程
1.单道处理系统的作业等待模拟程序(分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
)
实习代码:
#include"stdio.h"#include"stdlib.h"
#definegetjcb(type)(type*)malloc(sizeof(type))#defineNULL0
structjcb{charname[10];inthtime;
intntime;
charstate;structjcb*link;
}*ready=NULL,*p;typedefstructjcbJCB;intinput()
{intnum,i,t=0;voidsort();
printf("\n请输入作业个数:
");
scanf("%d",&num);for(i=1;i<=num;i++)
{printf("\n作业%d",i);
p=(JCB*)malloc(sizeof(JCB));
printf("\n作业名:
");
scanf("%s",p->name);
printf("\n作业运行时间:
");scanf("%d",&p->ntime);
p->htime=t;p->state='w';p->link=NULL;
sort();t++;
}
returnt;
}
voidsort()
{JCB*flag;if(ready==NULL)ready=p;else{flag=ready;while(flag->link!
=NULL)flag=flag->link;
flag->link=p;
}
}
voidshow()
{JCB*pr;
printf("\n***正在运行的作业是:
%s",p->name);printf("\nname\thtime\tntime\tstate\n");printf("%s\t",p->name);
printf("%d\t",p->htime);
printf("%d\t",p->ntime);printf("%c\t",p->state);
printf("\n\n***就绪队列");
for(pr=ready;pr!
=NULL;pr=pr->link)
{
printf("\nname\thtime\tntime\tstate\n");
printf("%s\t",pr->name);printf("%d\t",pr->htime);printf("%d\t",pr->ntime);printf("%c\t",pr->state);
}
}
voidrunning()
{printf("\n作业[%s]已经完成\n",p->name);free(p);
}
main()
{
charc;
intt=0;inttb,tc,ti,wi;inttis=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("\npressanykeytocontinue...");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周转时间:
%d\n",ti);
printf("\n带权周转时间:
%d\n",wi);t=t+p->ntime;
//printf("\npressanykeytocontinue...");
c=getchar();
}
printf("\n***所有作业都已经完成");
printf("\n总周转时间:
%d\n",tis/i);
printf("\n总带权周转时间:
%d\n",wis/i);
//printf("\npressanykeytocontinue...");c=getchar();
}
运行结果:
2.多道程序系统的作业调度模拟程序(采用基于先来先服务的调度算法)
实习代码:
#include
#definegetjch(type)(type*)malloc(sizeof(type))
#defineN10
structjcb{/*定义作业控制块PCB*/charname[10];
floatneedtime;/*运行时间*/
floatarrivetime;/*提交时刻*/floatstorage[N];/*系统资源*/
structjcb*link;
}*ready=NULL,*pb=NULL,*p;typedefstructjcbJCB;
floatTc,Ti,Wi,T=0;/*完成时刻,周转时间,带权周转时间,时间量*/
floatTiSum=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/
floatsource[N];intn;
voidinput(); /*输入作业信息*/
intspace(); /*返回就绪队列中作业的数目*/
voidfcfs(); /*先来先服务算法*/
voiddisp(JCB*pr);/*显示相应的作业*/
voidrunning(); /*运行作业组*/voiddestroy(); /*撤销作业*/voidinput()/*建立作业控制块函数*/
{
inti,k,num;
printf("请输入所拥有的资源种类:
");scanf("%d",&n);
printf("输入系统所拥有资源数:
\n");
for(i=0;i { printf("资源[%d]: ",i); scanf("%f",&source[i]); } printf("\n输入作业数量: ");scanf("%d",&num);for(i=0;i { printf("\n作业号[%d]: \n",i);p=getjch(JCB); printf("输入作业名: "); scanf("%s",p->name); printf("输入提交时间: ");scanf("%f",&p->arrivetime); printf("输入运行时间: "); scanf("%f",&p->needtime); printf("输入所需资源数: \n");for(k=0;k { printf("资源[%d]: ",i); scanf("%f",&p->storage[k]); } printf("\n");p->link=NULL;fcfs(); } } intspace() { intl=0; JCB*pr=ready;while(pr! =NULL) { l++; pr=pr->link; } return(l); } voiddisp(JCB*pr)/*建立作业显示函数,用于显示当前作业*/ { inti; printf("\n%6s\t%6s\t%6s\t","作业名","运行时间","提交时刻"); for(i=0;i printf("资源[%d]\t",i); printf("\n%6s\t%6.2f\t\t%6.2f\t",pr->name,pr->needtime,pr- >arrivetime);for(i=0;i printf("\t%6.2f",pr->storage[i]); printf("\n"); } voiddestroy()/*建立作业撤消函数(作业运行结束,撤消作业)*/ { free(p); } voidcheck() { JCB*first,*fir,*p;intflag=0,i,test=0;first=pb; while(first&&(T>=first->arrivetime)&&(flag==0)) { for(i=0;i { if(source[i]>=first->storage[i])source[i]=source[i]-first->storage[i]; else test=1; } if(test==0) { p=first;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; } voidfcfs() { JCB*first,*second;intins=0; if((pb==NULL)||(p->arrivetime { p->link=pb;pb=p; } else { first=pb;second=first->link;while(second! =NULL) { if(p->arrivetime { p->link=second;second=NULL;first->link=p;ins=1; } else { first=first->link;second=second->link; } } i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验2 作业调度实验 实验 作业 调度