操作系统-处理机调度-先来先服务算法

时间:2022-04-13 07:50:09 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

#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