教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

四种进程调度算法 先到先服务,优先级,短作业优先,时间片轮转

来源:网络收集 时间:2026-07-26
导读: VC6.0实现四种进程调度算法 测试成功 #includestdio.h #define N 50 int n; int sj; struct Gzuo{ int id; //进程名字 int dt; //到达时刻 int st; //服务时间 int wct; //完成时刻 int yxj; //优先级 int st2; //标志是否完成 float zt; //周转时间 float d

VC6.0实现四种进程调度算法 测试成功

#include"stdio.h" #define N 50

int n;

int sj; struct Gzuo{

int id; //进程名字 int dt; //到达时刻

int st; //服务时间

int wct; //完成时刻

int yxj; //优先级

int st2; //标志是否完成

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N]; void input(Gzuo a[])

{

printf("请输入进程个数:");

scanf("%d",&n);

for(int i=0;i<n;i++) {

a[i].id=i+1;

printf("\t到达时间: ");

scanf("%d",&a[i].dt);

printf("\t服务时间: ");

scanf("%d",&a[i].st); a[i].st2 = a[i].st;

printf("\n");

} printf("\t请输入时间片大小(0<sjp):\t");

scanf("%d",&sj);

}

void sjp(Gzuo a[],int sj)//时间片轮转调度

{

int i,j,min,time;

float sum1,sum2;

bool flag=true;

/*printf("\t请输入进程数(0<n<=50):\t");

scanf("%d",&n);

while(n>50||n<=0)

{

printf("n\t请重新输入: ");

scanf("%d",&n);

VC6.0实现四种进程调度算法 测试成功

printf("\n\n");

printf("\t请输入时间片大小(0<sjp):\t"); scanf("%d",&sjp);

while(sjp<=0)

{

printf("n\t请重新输入: ");

scanf("%d",&sjp);

} /*struct Gzuo{

int id; //进程名字

int dt; //到达时刻

int st; //服务时间

int wct; //完成时刻 int st2; //标志是否完成

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N]; for(i=0;i<n;i++)

{ a[i].id=i+1; printf("\t到达时间: "); scanf("%d",&a[i].dt);

printf("\t服务时间: "); scanf("%d",&a[i].st);

a[i].st2 = a[i].st;

printf("\n");

}*/

for(j=n-1;j>=0;j--)

{

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

{

if(a[i].dt>a[i+1].dt)

{

min=a[i].dt;

a[i].dt=a[i+1].dt;

a[i+1].dt=min;

min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

VC6.0实现四种进程调度算法 测试成功

min=a[i].st2;

a[i].st2=a[i+1].st2; a[i+1].st2=min;

min=a[i].id; a[i].id=a[i+1].id; a[i+1].id=min;

}

} }

time = a[0].dt;

//printf("赋值后TIME值为:%d\n",time);

min = 0;

while(min<n) {

flag=true;

for(i=0;i<n;i++) {

if(a[i].st2>0&&a[i].dt<=time) flag=false; }

for(i=0;i<n;i++) { if(a[i].st2 > 0 )

{ if(a[i].dt<=time)

{

//printf("当前a[%d].st2值为:%d\n",i,a[i].st2); a[i].st2 = a[i].st2 - sj;

//printf("运算后当前a[%d].st2值为:%d\n",i,a[i].st2);

//printf("当前TIME值为:%d\n",time); time = time + sj;

//printf("增加之后TIME值为:%d\n",time);

if(a[i].st2<=0) { a[i].wct = time + a[i].st2;

a[i].zt=(float)(a[i].wct-a[i].dt); a[i].dczt=a[i].zt/a[i].st; min++;

}

}else if(flag)

VC6.0实现四种进程调度算法 测试成功

for(i=0;i<n;i++)

{ if(a[i].st2>0&&a[i].dt>time) {

time = a[i].dt; break; }

} }

}

} }

printf("\n进程:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n"); sum1=0;

sum2=0; for(j=0;j<n;j++)

{

for(i=0;i<n;i++) if(a[i].id==j+1)

{

printf("%d: %d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt; sum2+=a[i].dczt;

}

}

printf("*********************************************************************\n");

}

void fcfs(Gzuo a[])//先到先服务调度

{

int i,j,min; float sum1,sum2;

/*printf("\t请输入进程数(0<n<=50):\t");

scanf("%d",&n);

while(n>50||n<=0)

VC6.0实现四种进程调度算法 测试成功

printf("n\t请重新输入: ");

scanf("%d",&n);

} printf("\n\n");

/*struct Gzuo{

int id; //进程名字

int dt; //到达时刻

int st; //服务时间

int wct; //完成时刻

float zt; //周转时间

float dczt; //带权周转时间

};

Gzuo a[N]; for(i=0;i<n;i++)

{

a[i].id=i+1;

printf("\t到达时间: ");

scanf("%d",&a[i].dt); printf("\t服务时间: "); scanf("%d",&a[i].st); printf("\n");

}*/

for(j=n-1;j>=0;j--)

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

{ if(a[i].dt>a[i+1].dt) {

min=a[i].dt; a[i].dt=a[i+1].dt;

a[i+1].dt=min; min=a[i].st;

a[i].st=a[i+1].st;

a[i+1].st=min;

min=a[i].id;

a[i].id=a[i+1].id;

a[i+1].id=min;

}

VC6.0实现四种进程调度算法 测试成功

}

a[0].wct=a[0].st+a[0].dt; a[0].zt=(float)a[0].st; a[0].dczt=a[0].zt/a[0].st;

for(i=1;i<n;i++) {

if(a[i].dt>a[i-1].wct) { a[i].wct=a[i].dt+a[i].st;

a[i].zt=(float)a[i].st; a[i].dczt=a[i].zt/a[i].st;

}

else {

a[i].wct=a[i-1].wct+a[i].st;

a[i].zt=(float)(a[i].wct-a[i].dt); a[i].dczt=a[i].zt/a[i].st;

} }

printf("\n进程:到达时间\t服务时间\t完成时间\t周转时间\t带权周转时间\n"); sum1=0; sum2=0;

for(j=0;j<n;j++) {

for(i=0;i<n;i++) if(a[i].id==j+1)

{

printf("%d: %d\t\t%d\t\t%d\t\t%.0f\t\t%.2f\n",a[i].id,a[i].dt,a[i].st,a[i].wct,a[i].zt,a[i].dczt);

sum1+=a[i].zt; sum2+=a[i].dczt; }

} printf(&qu …… 此处隐藏:3045字,全部文档内容请下载后查看。喜欢就下载吧 ……

四种进程调度算法 先到先服务,优先级,短作业优先,时间片轮转.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/115531.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)