进程调度算法(时间片轮转法+优先级)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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<<" "< 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(tp 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(); } 结果: