FCFS作业调度算法

操作系统单道批处理系统
FCFS作业调度算法


#include #include#define getjcb(type) (type*)malloc(sizeof(type)) int counter=0; typedef struct node { char name[20]; int InTime; int StartTime; int EndTime; int NeedTime; int RunTime; float X; char state; struct node *link; }JCB; JCB *line = NULL, *run = NULL, *finish, *p ; void Sort(JCB *q) { JCB *fst, *sed; fst = sed = line; int flag = 0; if (line == NULL) { q->link = line; line = q; } else { if (q->InTime < fst->InTime) { // printf("1"); q->link = fst; fst = q; line = q; flag = 1; } else while (fst->link != NULL) { fst = fst->link; if (q->InTime < fst->InTime) { q->link = fst; sed->link = q; flag = 1; } else sed = sed->link; } if ((fst->link == NULL) && (flag == 0)) { q->link = fst->link; fst->link = q; flag = 1; } } }void OutPut() { run->X = (run->StartTime - run->InTime + run->RunTime)*1.0 / (run->NeedTime); printf("作业名\t进入时间\t开始时间\t完成时间\t周转时间\t带权周转时间\n"); printf("%s \t %d \t %d \t %d \t %d \t %f \t \n",run->name,run->InTime,run->StartTime,run->StartTime+run->RunTime,run->RunTime,run->X); //run = NULL; //if (finish == NULL) //{ run->link = finish; finish = run; //} //else //{ // run->link = finish->link; // finish->link = run; //} if (line == NULL) { float ARound = 0, AwRound = 0, count = 0; while (finish != NULL) { ARound += finish->RunTime; AwRound += finish->X; count++; finish = finish->link; } ARound /= count; AwRound /= count; printf("平均周转时间\t平均带权周转时间\n"); printf("%f \t %f \t \n", ARound,AwRound); } }void InPut() { int num; JCB *tmp; printf("请输入作业个数:"); scanf_s("%d", &num); for (int i = 1; i <= num; i++) { if ((tmp = (JCB *)malloc(sizeof(JCB))) == NULL) { perror("malloc"); exit(1); } printf("作业 %d\n", i); printf("请输入作业名称:"); scanf_s("%s", tmp->name, 20); printf("请输入作业到达时间:"); scanf_s("%d", &(tmp->InTime)); printf("请输入作业所需运行时间:"); scanf_s("%d", &(tmp->NeedTime)); // printf("1.1"); tmp->state = 'W'; // printf("1.2"); tmp->X = 0; // printf("1.3"); tmp->RunTime = 0; // printf("1"); Sort(tmp); } /* JCB *x; x = line; for (int j = 1; j <= num; j++) { printf("%s \t",x->name); x = x->link; } printf("\n"); */ }void GetFirst() { run = line; if (line != NULL) { run->state = 'R'; line = line->link; run->link = NULL; } //printf("%s \n", run->name); }void Insert(JCB *in) { JCB *q; q = line; while (q->link != NULL) { q = q->link; } in->link = q->link; q->link = in; }void Run(int T) { //GetFirst(); //run->state = 'R'; if (T > run->InTime)run->StartTime = T; else run->StartTime=run->InTime; run->RunTime = run->NeedTime; OutPut(); //else Insert(run); }int main() { InPut(); int T=0; while (line != NULL) { //printf("XXX\n"); GetFirst(); Run(T); T += run->NeedTime; run == NULL; //printf("YYY\n"); } //getchar(); system("pause"); return 0; }

【FCFS作业调度算法】FCFS作业调度算法
文章图片

    推荐阅读