码迷,mamicode.com
首页 > 编程语言 > 详细

短作业调度算法

时间:2017-11-01 00:04:25      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:输出   print   最大数   调用   开始   struct   定义   算法   rtt   

#include <stdio.h>
struct sjf //定义进程的结构体
{
 char name[10]; //进程名
 float arrivetime; //到达时间
 float servicetime; //服务时间
 float starttime;  //开始时间
 float finishtime; //完成时间
 float zztime; //周转时间
 float dqzztime; //带权周转时间
 };
 sjf b[100]; //定义短作业优先算法进程的最大数量
 void Sinput(sjf *p,int N)  //输入函数
 {
   int i;
 printf("输入进程的名称、到达时间、服务时间:\n");
 for(i=0;i<=N-1;i++)
 {
 printf("输入第%d进程的名称、到达时间、服务时间:",i+1);
 scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);
 
}
}  //输出每个进程的信息

 void
SPrint(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N)
{
 int k;
 printf("\n执行顺序:\n");
 printf("%s",p[0].name);
 for(k=1;k<N;k++)
 {
 printf("-%s",p[k].name);
 }
 printf("\n进程名\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);
 }
}//输出执行顺序
 
void Ssort(sjf *p,int N) //按短作业优先算法排序
{
 for(int i=1;i<=N-1;i++)
 for(int j=1;j<=i;j++)
 if(p[i].servicetime<p[j].servicetime)
 {
 sjf temp;
 temp=p[i];
 p[i]=p[j];
 p[j]=temp;
 }
} //运行结果(冒泡排序)
 
void Sdeal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,int N)
{
 int k;
 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;  //带权周转时间=周转时间/服务时间
 }
}  //计算各种时间

void SJF(sjf *p,int N)
{
float arrivetime=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);//输出结果

void main() //主函数
 {
  int M;
 printf("短作业优先调度算法\n");
 printf("输入进程数:");
 scanf("%d",&M);
 Sinput(b,M);
 SJF(b,M); 
}

短作业调度算法

标签:输出   print   最大数   调用   开始   struct   定义   算法   rtt   

原文地址:http://www.cnblogs.com/s1104119631/p/7764286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!