您的位置:首页 > 其它

FCFS算法以及FJF算法实现

2018-01-07 15:32 197 查看
对于作业调度有很多种调度算法,今天就来实现一下两个各个调度算法里面最简单的两个调度算法.先来先服务和短作业优先算法.

本人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
.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;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐