作业调度先来先服务实验剖析Word文件下载.docx

上传人:b****2 文档编号:13497145 上传时间:2022-10-11 格式:DOCX 页数:36 大小:408.05KB
下载 相关 举报
作业调度先来先服务实验剖析Word文件下载.docx_第1页
第1页 / 共36页
作业调度先来先服务实验剖析Word文件下载.docx_第2页
第2页 / 共36页
作业调度先来先服务实验剖析Word文件下载.docx_第3页
第3页 / 共36页
作业调度先来先服务实验剖析Word文件下载.docx_第4页
第4页 / 共36页
作业调度先来先服务实验剖析Word文件下载.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

作业调度先来先服务实验剖析Word文件下载.docx

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

作业调度先来先服务实验剖析Word文件下载.docx

对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。

实验代码:

#include<

stdio.h>

stdlib.h>

conio.h>

#definegetpch(type)(type*)malloc(sizeof(type))

#defineNULL0

intn;

floatT1=0,T2=0;

inttimes=0;

structjcb//作业控制块

{

charname[10];

//作业名

intreachtime;

//作业到达时间

intstarttime;

//作业开始时间

intneedtime;

//作业需要运行的时间

floatsuper;

//作业的响应比

intfinishtime;

//作业完成时间

floatcycletime;

//作业周转时间

floatcltime;

//作业带权周转时间

charstate;

//作业状态

structjcb*next;

//结构体指针

}*ready=NULL,*p,*q;

typedefstructjcbJCB;

voidinize()//初始化界面

printf("

\n\n\t\t*********************************************\t\t\n"

);

\t\t\t\t单道批处理作业调度系统\n"

\t\t*********************************************\t\t\n"

\n\n\n\t\t\t\t软件143赵媛媛\n\n"

\t\t\t\t\t\n"

\n\n\n\t\t请输入任意键进入……\n"

getch();

}

voidinital()//建立作业控制块队列,先将其排成先来先服务的模式队列

inti;

printf("

\n输入作业数:

"

scanf("

%d"

&

n);

for(i=0;

i<

n;

i++)

{

p=getpch(JCB);

\n输入作业名:

scanf("

%s"

p->

name);

p->

reachtime=i;

作业默认到达时间:

i);

\n输入作业要运行的时间:

p->

needtime);

state='

W'

;

next=NULL;

if(ready==NULL)ready=q=p;

else{

q->

next=p;

q=p;

}

voiddisp(JCB*q,intm)//显示作业运行后的周转时间及带权周转时间等

if(m==3)//显示高响应比算法调度作业后的运行情况

\n作业%s正在运行,估计其运行情况:

\n"

q->

开始运行时刻:

%d\n"

starttime);

完成时刻:

finishtime);

周转时间:

%f\n"

cycletime);

带权周转时间:

cltime);

相应比:

super);

else//显示先来先服务,最短作业优先算法调度后作业的运行情况

voidrunning(JCB*p,intm)//运行作业

if(p==ready)//先将要运行的作业从队列中分离出来

ready=p->

next;

else

q=ready;

while(q->

next!

=p)q=q->

next=p->

starttime=times;

//计算作业运行后的完成时间,周转时间等等

R'

finishtime=p->

starttime+p->

needtime;

cycletime=(float)(p->

finishtime-p->

reachtime);

cltime=(float)(p->

cycletime/p->

T1+=p->

cycletime;

T2+=p->

cltime;

disp(p,m);

//调用disp()函数,显示作业运行情况

times+=p->

F'

\n%shasbeenfinished!

\npressanykeytocontinue...\n"

free(p);

//释放运行后的作业

voidsuper()//计算队列中作业的高响应比

JCB*padv;

padv=ready;

do{

if(padv->

state=='

&

padv->

reachtime<

=times)

padv->

super=(float)(times-padv->

reachtime+padv->

needtime)/padv->

padv=padv->

}while(padv!

=NULL);

voidfinal()//最后打印作业的平均周转时间,平均带权周转时间

floats,t;

t=T1/n;

s=T2/n;

\n\n作业已经全部完成!

\n%d个作业的平均周转时间是:

%f"

n,t);

\n%d个作业的平均带权周转时间是%f:

\n\n\n"

n,s);

voidhrn(intm)//高响应比算法

JCB*min;

inti,iden;

system("

cls"

inital();

for(i=0;

p=min=ready;

iden=1;

super();

if(p->

if(iden)

min=p;

iden=0;

elseif(p->

super>

min->

super)min=p;

p=p->

}while(p!

i--;

times++;

//printf("

\ntime=%d:

\tnoJCBsubmib...wait..."

time);

if(times>

1000)

{printf("

\nruntimeistoolong...error..."

getch();

running(min,m);

//调用running()函数

}//for

final();

voidsjf(intm)//最短作业优先算法

if(iden){

needtime<

needtime)min=p;

=NULL);

if(iden){

//printf("

times++;

100){printf("

\nruntimeistoolong...error"

voidfcfs(intm)//先来先服务算法

p=ready;

=times)iden=0;

if(iden)p=p->

=NULL&

iden);

\n没有满足要求的进程,需等待"

\n时间过长"

running(p,m);

//调用running(

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

当前位置:首页 > 解决方案 > 学习计划

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

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