任务调度实验Word文件下载.docx
《任务调度实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《任务调度实验Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
main.o:
main.cmon.h
gcc-cmain.c
fcfs_sjf.o:
fcfs_sjf.cmon.h
gcc-cfcfs_sjf.c
cl.o:
cl.cmon.h
gcc-ccl.c
mon.h
#include<
stdio.h>
#include"
stdio.h"
string.h"
#defineNULL0
/*定义结构*/
typedefstructquen
{
charpname[8];
inttime1;
inttime2;
charstate;
structquen*next;
}QUEN;
floatt,d;
struct{
intid;
floatArriveTime;
floatRequestTime;
floatStartTime;
floatEndTime;
floatRunTime;
floatDQRunTime;
intstatus;
}arrayTask[4];
voidGetTask();
ntfcfs();
intsjf();
voidnew_n(ints);
voidPrintresult(intj);
voidcl();
fcfs_sjf.c
voidGetTask()
inti;
floata;
for(i=0;
i<
=4;
i++)
arrayTask[i].id=i+1;
printf("
inputthenumber"
);
inputtheArriveTimeofarrayTask[%d]:
"
i);
scanf("
%f"
&
a);
arrayTask[i].ArriveTime=a;
inputtheRequestTimeofarrayTask[%d]:
arrayTask[i].RequestTime=a;
arrayTask[i].StartTime=0;
arrayTask[i].EndTime=0;
arrayTask[i].RunTime=0;
arrayTask[i].status=0;
}
/*定义FCFS中寻找未执行的进程的最先到达时间*/
intfcfs()
inti,j,w;
if(arrayTask[i].status==0)
t=arrayTask[i].ArriveTime;
w=1;
if(w==1)
break;
i++)/*查找数组中到达时间最小未执行的进程*/
if(arrayTask[i].ArriveTime<
t&
&
arrayTask[i].status==0)
i++)/*返回最小到达时间的数组的下标*/
if(arrayTask[i].ArriveTime==t)
returni;
//最短作业优先算法SJF
intsjf()/*定义FCFS中寻找未执行的进程的最先到达时间*/
inti,x=0,a=0,b=0;
/*判断是不是第一个执行的进程*/
floatg;
if(arrayTask[i].status==1)
g=arrayTask[i].EndTime;
x=1;
if(x==0)
t=arrayTask[0].ArriveTime;
t)
a=i;
returna;
else
if(arrayTask[i].EndTime>
g)
if(arrayTask[i].status==0&
arrayTask[i].ArriveTime<
=g)
t=arrayTask[i].RequestTime;
b=1;
}/*判断有没有进程在前个进程完成前到达*/
if(b!
=0)/*有进程到达则按SJF*/
=g&
arrayTask[i].RequestTime<
/*否则按FCFS*/
voidnew_n(ints)/*定义执行进程后相关数据的修改*/
inti,g=0;
continue;
g=1;
if(g==0)/*当处理的是第一个未执行的进程时执行*/
arrayTask[s].StartTime=arrayTask[s].ArriveTime;
arrayTask[s].EndTime=arrayTask[s].RequestTime+arrayTask[s].ArriveTime;
arrayTask[s].RunTime=arrayTask[s].RequestTime;
arrayTask[s].status=1;
g=2;
if(g==1)/*当处理的不是第一个未执行的进程时执行*/
d=arrayTask[i].EndTime;
i++)/*查找最后执行的进程的完成时间*/
d&
arrayTask[i].status==1)
if(arrayTask[s].ArriveTime<
d)/*判断修改的进程的到达时间是否在前一个执行的进程的完成时间前面*/
arrayTask[s].StartTime=d;
arrayTask[s].EndTime=arrayTask[s].StartTime+arrayTask[s].RequestTime;
arrayTask[s].RunTime=arrayTask[s].EndTime-arrayTask[s].ArriveTime;
arrayTask[s].DQRunTime=arrayTask[s].RunTime/arrayTask[s].RequestTime;
voidPrintresult(intj)/*定义打印函数*/
%d\t"
arrayTask[j].id);
%5.2f\t"
arrayTask[j].ArriveTime);
arrayTask[j].RequestTime);
arrayTask[j].StartTime);
arrayTask[j].EndTime);
arrayTask[j].RunTime);
%5.2f\n"
arrayTask[j].DQRunTime);
cl.c
voidcl()
QUEN*q,*p,*head,*m;
charstr[8],f;
intt,d,n;
Enterthemaxnumberofnodes(n):
\n"
/*输入进程数*/
%d"
n);
d=n;
if(d>
0)
enterthepname:
%s"
str);
entertheneedtime:
t);
head=p=(QUEN*)malloc(sizeof(QUEN));
strcpy(p->
pname,str);
p->
time1=t;
time2=0;
state='
R'
;
next=NULL;
head=p;
getchar();
--d;
while(d>
/*构建队列表*/
enterneedtime:
q=(QUEN*)malloc(sizeof(QUEN));
strcpy(q->
q->
next=q;
p=q;
next=head;
q=head;
processnameneedtimerunnedstatic\n"
do
%s%d%d%c\n"
q->
pname,q->
time1,q->
time2,q->
state);
q=q->
next;
}while(q!
=head);
do{
if(head->
time2<
head->
time1)
time2++;
time2==head->
E'
Therunningprocessis%s\n"
pname);
processnamelefttimerunnedstatic\n"
/*输入队列表*/
head=head->
p=p->
Isitneedingnewprocess?
(yorn)\n"
/*是否加入新的进程*/
%c"
f);
if(f=='
Y'
||f=='
y'
)
Enterthenewpname:
Enterthenewneededtime:
m=(QUEN*)malloc(sizeof(QUEN));
strcpy(m->
m->
if(q->
next->
state=='
p=m;
head=m;
next=m;
}while(q->
state!
='
Theprocessesarefinished\n"
main.c
intmain(void)
inti,b,k,c=0;
chara;
intd[4];
//clrscr();
//cls();
\t1.FCFS\n"
\t2.SFJ\n"
\t3.EXIT\n"
\t4.cl\n"
if(c)
pleaseinputthenumbera:
switch(a)
case3:
c=1;
case1:
pleaseinputthedifferent-ArriveTimeofarrayTasks\n"
GetTask();
*******************************theresultoffcfs\n"
Number\tArrive\tServer\tStart\tFinish\tTurnove\tTakepowerturnovertime\n"
for(b=0;
b<
b++)
k=fcfs();
d[b]=k;
new_n(k);
Printresult(d[b]);
/*调用打印函数打出结果*/
case2:
pleaseinputthedifferent-RequestTimeofarrayTasks\n"
******************************theresultofsjf\n"
Number\tArrive\tRequest\tStart\tEnd\tRun\tDQRuntime\n"
k=sjf();
4;
case4:
cl();
default:
thenumberError.pleaseinputanothernumber!
return0;