实验2 - 作业调度实验Word格式文档下载.docx
《实验2 - 作业调度实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验2 - 作业调度实验Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。
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));
\n作业名:
%s"
p->
name);
\n作业运行时间:
scanf("
p->
ntime);
htime=t;
p->
state='
w'
;
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;
\n***正在运行的作业是:
%s"
printf("
\nname\thtime\tntime\tstate\n"
%s\t"
%d\t"
htime);
%c\t"
state);
\n\n***就绪队列"
for(pr=ready;
pr!
=NULL;
pr=pr->
link)
{
pr->
voidrunning()
\n作业[%s]已经完成\n"
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->
r'
tb=t;
show();
//printf("
\npressanykeytocontinue..."
c=getchar();
running();
tc=tb+p->
ntime;
//完成时间ti=tc-p->
htime;
//周转时间tis+=ti;
wi=ti/p->
//平均带权周转
wis+=wi;
\n作业%d开始:
\n"
t);
\n作业[%d]完成:
\n"
t);
\n周转时间:
%d\n"
ti);
\n带权周转时间:
%d\n"
wi);
t=t+p->
c=getchar();
\n***所有作业都已经完成"
\n总周转时间:
tis/i);
\n总带权周转时间:
wis/i);
运行结果:
2.多道程序系统的作业调度模拟程序(采用基于先来先服务的调度算法)
#include<
stdio.h>
#include<
stdlib.h>
#definegetjch(type)(type*)malloc(sizeof(type))
#defineN10
structjcb{/*定义作业控制块PCB*/charname[10];
floatneedtime;
/*运行时间*/
floatarrivetime;
/*提交时刻*/floatstorage[N];
/*系统资源*/
structjcb*link;
}*ready=NULL,*pb=NULL,*p;
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;
请输入所拥有的资源种类:
n);
输入系统所拥有资源数:
for(i=0;
n;
资源[%d]:
%f"
source[i]);
\n输入作业数量:
for(i=0;
num;
\n作业号[%d]:
p=getjch(JCB);
输入作业名:
输入提交时间:
arrivetime);
输入运行时间:
needtime);
输入所需资源数:
for(k=0;
k<
k++)
storage[k]);
fcfs();
intspace()
intl=0;
JCB*pr=ready;
while(pr!
l++;
return(l);
voiddisp(JCB*pr)/*建立作业显示函数,用于显示当前作业*/
inti;
\n%6s\t%6s\t%6s\t"
"
作业名"
运行时间"
提交时刻"
资源[%d]\t"
\n%6s\t%6.2f\t\t%6.2f\t"
name,pr->
needtime,pr-
>
\t%6.2f"
storage[i]);
voiddestroy()/*建立作业撤消函数(作业运行结束,撤消作业)*/
free(p);
voidcheck()
JCB*first,*fir,*p;
intflag=0,i,test=0;
first=pb;
while(first&
&
(T>
=first->
arrivetime)&
(flag==0))
if(source[i]>
storage[i])source[i]=source[i]-first->
storage[i];
else
test=1;
if(test==0)
p=first;
first=first->
if(ready==NULL)
ready=p;
else
fir=ready;
while(fir->
fir=fir->
fir->
flag=1;
pb=first;
voidfcfs()
JCB*first,*second;
intins=0;
if((pb==NULL)||(p->
arrivetime<
pb->
arrivetime))
link=pb;
pb=p;
first=pb;
second=first->
while(second!
if(p->
second->
arrivetime)
link=second;
second=NULL;
first->
ins=1;
first=first->
second=second->
i