#include<iostream>
using namespace std;
//定义PCB的结果,分别包括:作业号、作业名称、运行状态、提交作业时间、作业开始时间、作业结束时间、需要时间、和下一个作业的指针等。
struct JCB
{
char num[2];
char name[10];
char state;
int tijiaotime;
int starttime;
int finishtime;
int needtime;
JCB *next;
};
//定义并初始化计时器和指针
int time=10000,n;
JCB*head=NULL,*p,*q;
void run_course(JCB *p1)
{
time = p1->tijiaotime > time? p1->tijiaotime:time;
p1->starttime=time;
cout<<"\n现在时间是:"<<time<<"\t现开始运行:"<<p1->name<<endl;
time+=p1->needtime;
p1->state='F';
p1->finishtime=time;
cout<<"作业号 作业名 开始时间 所需时间 结束时间\n";
cout<<p1->num<<"\t"<<p1->name<<"\t"<<p1->starttime<<"\t"<<p1->needtime<<"\t"<<p1->finishtime<<endl;
}
//就绪的队列用W(WAIT)表示,这个算法查找当前未完成的作业
void search_unfinished()
{
int i,j,t;
for(j=0;j<n;j++)
{
p=head;
t=10000;
for(i=0;i<n;i++)
{
if(p->tijiaotime<t&&p->state=='W')
{
t=p->tijiaotime;
q=p;
}
p=p->next;
}
run_course(q);
}
}
//创建进程算法,根据输入作业的个数存储到作业队列中,新创建的作业状态初始化为W,然后在主函数中调用fcfo函数进行处理。
void create_course()
{
int num;
cout<<"\n作业个数:";
cin>>n;
for(num=0;num<n;num++)
{
p=(JCB*)malloc(sizeof(JCB));
if(head==NULL)
{
head=p;
q=p;
}
cout<<"对于每个作业依次输入:\n作业号、作业名、提交时间、所需cpu时间\n";
cin>>p->num>>p->name>>p->tijiaotime>>p->needtime;
if(p->tijiaotime<time)
time=p->tijiaotime;
q->next=p;
p->starttime=0;
p->finishtime=0;
p->next=NULL;
p->state='W';
q=p;
}
}
int main()
{
cout<<"先来先服务算法模拟\n";
create_course();
search_unfinished();
return 0;
}
本文来源:https://www.wddqw.com/doc/1a4b5921753231126edb6f1aff00bed5b9f373ff.html
正在阅读:
操作系统-处理机调度-先来先服务算法01-01
形容桃花的比喻句01-01
劳动法规定离职后工资什么时候发01-01
拼音版赤壁赋 01-01
对学校很满意的短文01-01
杜甫诗词《诸将五首》(其二)的诗意赏析01-01
自己坐一桌菜发朋友圈说说01-01
万科集团财务风险研究与防范01-01
我的鸡娃作文01-01