任务调度实验Word文件下载.docx

上传人:b****5 文档编号:20546909 上传时间:2023-01-23 格式:DOCX 页数:17 大小:185.01KB
下载 相关 举报
任务调度实验Word文件下载.docx_第1页
第1页 / 共17页
任务调度实验Word文件下载.docx_第2页
第2页 / 共17页
任务调度实验Word文件下载.docx_第3页
第3页 / 共17页
任务调度实验Word文件下载.docx_第4页
第4页 / 共17页
任务调度实验Word文件下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

任务调度实验Word文件下载.docx

《任务调度实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《任务调度实验Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。

任务调度实验Word文件下载.docx

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;

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

当前位置:首页 > 初中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1