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作业调度算法】
文章图片
推荐阅读
- 17|17 关山松 第二课作业#公众号项目# D20
- 【同心同舵】郑友贤第八季思维导图武林计划No.15《点评作业5》
- 特殊的家庭作业。
- 作业没有完成仍坚持要开家庭会议|作业没有完成仍坚持要开家庭会议 44
- 2019年《家庭中的正面管教》作业七
- --木木--|--木木-- 第二课作业#翼丰会(每日一淘6+1实战裂变被动引流# 6+1模式)
- 2018-04-16动画练习作业
- 超级行动力第二次作业-行动大于学习的秘密
- 第一周作业复盘
- 端银×八正道|端银×八正道 | 21天百万实操信用卡特训营045+Dodo第5次作业