先来先服务调度算法和短作业优先调度算法.doc

上传人:wj 文档编号:2143387 上传时间:2023-05-02 格式:DOC 页数:8 大小:151KB
下载 相关 举报
先来先服务调度算法和短作业优先调度算法.doc_第1页
第1页 / 共8页
先来先服务调度算法和短作业优先调度算法.doc_第2页
第2页 / 共8页
先来先服务调度算法和短作业优先调度算法.doc_第3页
第3页 / 共8页
先来先服务调度算法和短作业优先调度算法.doc_第4页
第4页 / 共8页
先来先服务调度算法和短作业优先调度算法.doc_第5页
第5页 / 共8页
先来先服务调度算法和短作业优先调度算法.doc_第6页
第6页 / 共8页
先来先服务调度算法和短作业优先调度算法.doc_第7页
第7页 / 共8页
先来先服务调度算法和短作业优先调度算法.doc_第8页
第8页 / 共8页
亲,该文档总共8页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

先来先服务调度算法和短作业优先调度算法.doc

《先来先服务调度算法和短作业优先调度算法.doc》由会员分享,可在线阅读,更多相关《先来先服务调度算法和短作业优先调度算法.doc(8页珍藏版)》请在冰点文库上搜索。

先来先服务调度算法和短作业优先调度算法.doc

先来先服务调度算法和短作业优先调度算法

#include

structfcfs //定义进程的结构体

{

charname[10]; //进程名

floatarrivetime; //到达时间

floatservicetime; //服务时间

floatstarttime; //开始时间

floatfinishtime; //完成时间

floatzztime; //周转时间

floatdqzztime; //带权周转时间

};

structsjf //定义进程的结构体

{

charname[10]; //进程名

floatarrivetime; //到达时间

floatservicetime; //服务时间

floatstarttime; //开始时间

floatfinishtime; //完成时间

floatzztime; //周转时间

floatdqzztime; //带权周转时间

};

fcfsa[100]; //定义先来先服务算法进程的最大数量

sjfb[100]; //定义短作业优先算法进程的最大数量

voidFinput(fcfs*p,intN) //输入函数

{

inti;

printf("intputtheprocess'sname&arrivetime&servicetime:

\nforexmple:

a0100\n");

for(i=0;i<=N-1;i++)

{

printf("inputthe%dthprocess'sinformation:

\n",i+1);

scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);

}

}

//输出函数

voidFPrint(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN)

{

intk;

printf("\nrunorder:

\n");

printf("%s",p[0].name);

for(k=1;k

{

printf("-->%s",p[k].name);

}

printf("\n\ntheprocess'sinformation:

\n");

printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n\n");

for(k=0;k<=N-1;k++)

{

printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);

}

}

voidFsort(fcfs*p,intN) //按到达时间排序,先到达排在前面

{

for(inti=0;i<=N-1;i++)

for(intj=0;j<=i;j++)

if(p[i].arrivetime

{

fcfstemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

//运行结果

voidFdeal(fcfs*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float&dqzztime,intN)

{

intk;

for(k=0;k<=N-1;k++)

{

if(k==0)

{

p[k].starttime=p[k].arrivetime;

p[k].finishtime=p[k].arrivetime+p[k].servicetime;

}

else

{

p[k].starttime=p[k-1].finishtime; //开始时间=前一个进程的完成时间

p[k].finishtime=p[k-1].finishtime+p[k].servicetime; //结束时间=前一个进程的完成时间+现在进程的服务时间

}

}

for(k=0;k<=N-1;k++)

{

p[k].zztime=p[k].finishtime-p[k].arrivetime; //周转时间=完成时间-到达时间

p[k].dqzztime=p[k].zztime/p[k].servicetime; //带权周转时间=周转时间/服务时间

}

}

//先来先服务

voidFCFS(fcfs*p,intN)

{

floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;

Fsort(p,N);

Fdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

FPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

}

voidSinput(sjf*p,intN) //输入函数

{

inti;

printf("intputtheprocess'sname&arrivetime&servicetime:

\nforexmple:

a0100\n\n");

for(i=0;i<=N-1;i++)

{

printf("inputthe%dthprocess'sinformation:

\n",i+1);

scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);

}

}

//输出函数

voidSPrint(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN)

{

intk;

printf("\nrunorder:

\n");

printf("%s",p[0].name);

for(k=1;k

{

printf("-->%s",p[k].name);

}

printf("\n\ntheprocess'sinformation:

\n");

printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n");

for(k=0;k<=N-1;k++)

{

printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n\n",p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);

}

}

voidSsort(sjf*p,intN) //按短作业优先算法排序

{

for(inti=1;i<=N-1;i++)

for(intj=1;j<=i;j++)

if(p[i].servicetime

{

sjftemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

//运行结果

voidSdeal(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&zztime,float&dqzztime,intN)

{

intk;

for(k=0;k<=N-1;k++)

{

if(k==0)

{

p[k].starttime=p[k].arrivetime;

p[k].finishtime=p[k].arrivetime+p[k].servicetime;

}

else

{

p[k].starttime=p[k-1].finishtime; //开始时间=前一个进程的完成时间

p[k].finishtime=p[k-1].finishtime+p[k].servicetime; //结束时间=前一个进程的完成时间+现在进程的服务时间

}

}

for(k=0;k<=N-1;k++)

{

p[k].zztime=p[k].finishtime-p[k].arrivetime; //周转时间=完成时间-到达时间

p[k].dqzztime=p[k].zztime/p[k].servicetime; //带权周转时间=周转时间/服务时间

}

}

voidSJF(sjf*p,intN)

{

floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;

Ssort(p,N);

Sdeal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

SPrint(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N);

}

voidmain() //主函数

{

while

(1)

{

intn;

printf("选择哪种算法?

1、先来先服务算法(FCFS)2、段作业优先算法(SJF)\n");

scanf("%d",&n);

if(n==1)//先来先服务算法(FCFS)

{

intN;

printf("------先来先服务调度算法------\n");

printf("inputtheprocess'snumber:

\n");

scanf("%d",&N);

Finput(a,N);

FCFS(a,N);

}

if(n==2)//短作业优先算法(SJF)

{

intM;

printf("------短作业优先调度算法------\n");

printf("inputtheprocess'snumber:

\n");

scanf("%d",&M);

Sinput(b,M);

SJF(b,M);

}

charo;

printf("继续工作吗?

(Y/N):

");

scanf("%s",&o);

if(o=='Y')

continue;

if(o=='N')

break;

}

}

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

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2