进程调度算法(时间片轮转法+优先级)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程调度算法时间片轮转法+优先级

#include

#include

#include

#define P_NUM 5//进程数

#define P_TIME 50//时间片数

//状态

enum state{

ready,//就绪

execute,//执行

block,//阻塞

finish//结束

};

//PCB结构体

struct pcb{

char name[5];//进程名ID

int priority;//优先级

int cputime;//进程已占用时间片

int alltime;//还需占用时间片

state process;//进程状态

pcb * next;//队列指针next,用来将多个进程控制块PCB链接为队列

}PCB;

pcb * get_process(){

pcb *q;

pcb *t;

pcb *p;

int i=0;

cout<<"input ID and ALLTIME"<

while (i

q=(struct pcb *)malloc(sizeof(pcb));//申请

cin>>q->name;

cin>>q->alltime;//输入名字及时间

q->cputime=0;//初始

q->priority=P_TIME-q->alltime;//优先数越大,优先级越高

q->process=ready;//就绪

q->next=NULL;

if (i==0){

p=q;

t=q;

}

else{

t->next=q;

t=q;

}

i++;

}

return p;

}

//输出过程

void display(pcb *p){

cout<<" ID"<<" "<<"CPUTIME"<<" "<<"ALLTIME"<<" "<<"PRIORITY"<<" "<<"STATE"<

while(p){

cout<<" "<name<<" "<cputime<<" "<alltime<<" "<priority<<" ";

switch(p->process){

case ready:cout<<"ready"<

case execute:cout<<"execute"<

case block:cout<<"block"<

case finish:cout<<"finish"<

}

p=p->next;

cout<<"\n";

}

}

//状态的函数

//结束

int process_finish(pcb *q){

int a=1;

while(a&&q){

a=a&&q->alltime==0;

q=q->next;

}

return a;

}

//执行

void cpuexe(pcb *q){

pcb *t=q;

int tp=0;

while(q){

if (q->process!=finish){

q->process=ready;

if(q->alltime==0){

q->process=finish;

}

}

if(tppriority&&q->process!=finish){

tp=q->priority;

t=q;

}

q=q->next;

}

if(t->alltime!=0){

t->priority-=3;//进程每运行一个时间片,优先数减3

t->alltime--;

t->process=execute;

t->cputime++;

}

}

//进程调度

void process_way(){

pcb * p;

p=get_process();

display(p);

int cpu=0;

while(!process_finish(p)){

cpu++;

cout<<"cputime:"<

cpuexe(p);

display(p);

}

printf("All processes have finished"); }

void main(){

process_way();

}

结果:

相关文档
最新文档