#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "iostream.h"
typedef struct node
{ char name[10];
int prio;
int round; /*进程时间轮转时间片*/
int cputime; /*进程占用 CPU 时间*/
int needtime; /*进程到完成还要的时间*/
int count; /*计数器*/
char state; /*进程的状态*/
struct node *next; /*链指针*/
}PCB; PCB *finish,*ready,*tail,*run; /*队列指针*/
int N; /*进程数*/
/*将就绪队列中的第一个进程投入运行*/
void firstin()
{ run=ready; /*就绪队列头指针赋值给运行头指针*/
run->state='R'; /*进程状态变为运行态*/
ready=ready->next; /*就绪对列头指针后移到下一进程*/
}
/*标题输出函数*/
void prt1(char a)
{ if(toupper(a)=='P') /*优先级法*/
cout<<" "<<endl;
cout<<"进程名 占用 CPU 时间 到完成还要的时间 优先级 状态"<<endl;
}
/*进程 PCB 输出*/
void prt2(char a,PCB *q)
{ if(toupper(a)=='P') /*优先级法的输出*/
cout<<q->name<<" "<<q->cputime<<" "<<q->needtime<<" "<<q->prio<<" "<<q->state<<endl;
}
/*输出函数*/
void prt(char algo)
{ PCB *p;
prt1(algo); /*输出标题*/
if(run!=NULL) /*如果运行指针不空*/
prt2(algo,run); /*输出当前正在运行的 PCB*/
p=ready; /*输出就绪队列 PCB*/
while(p!=NULL)
{ prt2(algo,p);
p=p->next;
}
p=finish; /*输出完成队列的 PCB*/
while(p!=NULL)
{ prt2(algo,p);
p=p->next;
}
getchar(); /*按下任意键继续*/
}
/*优先级的插入算法,按优先级大小排队的就绪队列*/
void insert(PCB *q)
{ PCB *p1,*s,*r;
int b;
s=q; /*待插入的 PCB 指针*/
p1=ready; /*就绪队列头指针*/
r=p1; /*r 做 p1 的前驱指针*/
b=1;
while((p1!=NULL)&&b) /*根据优先级确定插入位置*/
if(p1->prio>=s->prio)
{ r=p1;
p1=p1->next;
}
else
b=0;
if(r!=p1) /*如果条件成立说明插入在 r 与 p1 之间*/
{ r->next=s;
s->next=p1;
}
else
{ s->next=p1; /*否则插入在就绪队列的头*/
ready=s;
}
}
/*创建初始 PCB 信息*/
void create(char alg)
{
PCB *p;
int i,time;
char na[10];
ready=NULL; /*就绪队列头指针*/
finish=NULL; /*完成队列头指针*/
run=NULL; /*运行队列指针*/
cout<<"输入进程名及其需要运行的时间:"<<endl; /*输入进程标识和所需时间创
建 PCB*/
for(i=1;i<=N;i++)
{ p=new PCB;
cin>>na;
cin>>time;
strcpy(p->name,na);
p->cputime=0;
p->needtime=time;
p->state='w';
p->prio=100-time;
if(ready!=NULL) /*就绪队列不空,调用插入函数插入*/
insert(p);
else
{ p->next=ready; /*创建就绪队列的第一个 PCB*/
ready=p;
}
cout<<"输入进程名及其需要运行的时间:"<<endl;
/*输入进程标识和所需时间创建 PCB*/
}
prt(alg); /*输出进程 PCB 信息*/
run=ready; /*将就绪队列的第一个进程投入运行*/
ready=ready->next;
run->state='R';
}
/*优先级调度算法*/
void priority(char alg)
{
while(run!=NULL) /*当运行队列不空时,有进程正在运行*/
{ run->cputime=run->cputime+17;
run->needtime=run->needtime-17;
run->prio=run->prio-17; /*每运行一次优先级降低 10 个单位*/
if(run->needtime<=0) /*如所需时间为 0 将其插入完成队列*/
{ run->cputime=run->;
run->needtime=0;
run->next=finish;
finish=run;
run->state='F'; /*置状态为完成态*/
run=NULL; /*运行队列头指针为空*/
if(ready!=NULL) /*如就绪队列不空*/
firstin(); /*将就绪队列的第一个进程投入运行*/
}
else /*没有运行完同时优先级不是最大,则将其变为就绪态插入到就绪队列*/
if((ready!=NULL)&&(run->prio<ready->prio))
{
run->state='W';
insert(run);
firstin(); /*将就绪队列的第一个进程投入运行*/
}
prt(alg); /*输出进程 PCB 信息*/
}
}
/*主函数*/
void main()
{
char algo='p'; /*算法标记*/
cout<<"输入进程的个数:";
cin>>N; /*输入进程数*/
create(algo); /*创建进程*/
priority(algo); /*优先级法调度*/
} //main()
当到完成还要的时间”小于等于 0 时
run->cputime=应该怎么赋值才能等于输入的占用cpu时间(cputime);
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。