FCFS算法以及FJF算法实现,fcfs算法fjf


对于作业调度有很多种调度算法,今天就来实现一下两个各个调度算法里面最简单的两个调度算法.先来先服务和短作业优先算法.

本人C语言程序的代码量不是很多,毕竟入门就学的java所以有不完善的地方还请多指教咯.

文本末尾是两个示范输入数据

#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
void  fcfsSort();
void myFun(int i);
struct Job_type
{ 
  char num;  //作业号
  int arrival_time;  //到达时间
  int runtime;  //服务时间
  int timeStart; //执行时间
  int timeFinished; //结束时间
  int timeServe; //周转时间
} x,job[SIZE];

/*
*load()
*加载函数:输入各个作业的作业号,到达时间,运行时间
*
*/
void load()
{
	int i;
    printf("\nEnter the Jobs' datas:\n");
    for(i=0;i<SIZE;i++)
      scanf("%c,%d,%d;",&job[i].num,&job[i].arrival_time,&job[i].runtime);
 }

/*
*FCFS算法:
*
*/
void fcfs()
{ 
	fcfsSort();  //对作业的到达按时间顺序进行排序
	int i;
	job[0].timeStart = job[0].arrival_time;
	job[0].timeFinished = job[0].arrival_time + job[0].runtime;
	job[0].timeServe = job[0].timeFinished - job[0].timeStart;

	for(i=0;i<SIZE-1;i++){
	myFun(i);
 }
}

//输出函数
void show(){
int i;
for(i=0;i<SIZE;i++){
printf("NUM=%c,ARR=%d,STR=%d,FIN=%d,SER=%d\n",job[i].num,job[i].arrival_time,
         job[i].timeStart,job[i].timeFinished,job[i].timeServe);
   }
}


//按时间顺序进行排序
void fcfsSort(){
int i,j;

for(i=0;i<SIZE;i++){
    for(j=i+1;j<SIZE;j++){
          if(job[i].arrival_time>job[j].arrival_time){
                  struct  Job_type temp = job[i];
                     job[i] = job [j];
                     job[j] = temp;
                
                 }
         }
   }
}

/*
*shf(int n,int tc)
*短作业优先算法
*
*
*/

void sjf(int n,int tc)    //短作业调度函数
{ 
	int i,j,k=n,t=n;
	if(k==0){
	job[0].timeStart = job[0].arrival_time;
	job[0].timeFinished = job[0].arrival_time + job[0].runtime;
	job[0].timeServe = job[0].timeFinished - job[0].timeStart;
}else{
		myFun(tc);
}
k++;   

//判断上一个作业结束后在集合里面按时间到达的作业个数
for(i=k;i<SIZE;i++){
if(job[i].arrival_time <= job[n].timeFinished){
      t = i;
    }
}
//对已经到达的作业进行排序
for(i=k;i<t+1;i++){
    for(j=i+1;j<t+1;j++){
          if(job[i].runtime>job[j].runtime){
                  struct  Job_type temp = job[i];
                     job[i] = job [j];
                     job[j] = temp;
                 }
         }
  }
  //如果作业伟全部执行完则递归进行程序
  if(t<SIZE){
		sjf(k,t);
}else{
//printf("first :%d\n",t);
  for(i=0;i<SIZE-1;i++){
  myFun(i);
  }
 }
}


//抽取公共函数
void myFun(int i){
if(job[i+1].arrival_time < job[i].timeFinished)
job[i+1].timeStart = job[i].timeFinished;
else
job[i+1].timeStart = job[i+1].arrival_time;

job[i+1].timeFinished = job[i+1].timeStart + job[i+1].runtime;
job[i+1].timeServe = job[i+1].timeFinished - job[i+1].arrival_time;
}



 int main()
{
  load();
  printf("FCFS algorithm:\n");
  fcfs();
  show();
  printf("SJF algorithm:\n");
  sjf(0,0);
  show();
  return 0;
}

//  A,0,4;B,1,3;C,2,5;D,20,1;E,19,2; 


//  A,0,4;B,1,3;C,2,5;D,3,2;E,4,4; 



相关内容