FCFS算法以及FJF算法实现,fcfs算法fjf
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;
评论暂时关闭