您好,欢迎访问三七文档
进程调度算法代码//process.cpp:Definestheentrypointfortheconsoleapplication.//#includestdafx.h#includestdio.h#includestdlib.h#includeiostream#defineNULL0#definefalse0#definetrue1bool_state=0;structPCB{intID;intpriority;intCPUtime;intALLtime;intState;PCB*next;};voidinit();/*产生idle进程,输入用户进程数目,调用insert()*/voidprint(PCB*pcb);/*输出进程属性信息*/voidprint_init(PCB*pcb);/*输出所有PCB的初始值*/voidinsert();/*生成进程属性信息,插入进程就绪队列*/voidRun_priority(PCB*pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/voidblock(PCB*pcb);/*调用destroy()将进程插入阻塞队列*/voidwakeup();/*唤醒进程,插入就绪队列*/voidproc_priority();/*优先权调度算法模拟*///voidRun_loop(PCB*pcb);voidproc_loop();/*轮转法调度算法模拟*/voidupdate(PCB*pcb);/*更新进程信息*/voidpushback_queue(PCB*queue,PCB*item);/*将item插入到队列的尾部*/voidinsert_queue(PCB*queue,PCB*item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/voidsort_queue(PCB*&queue);/*对queue中的结点进行排序,按照优先级从大到小*/PCB*ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/intmain(intargc,char*argv[]){inti=0;while(1){cout\\**********PROCESS**********/;cout(\nPleaseselectanumin(1,2,0));cout(\n1--priority);cout(\n2--loop);cout(\n0--exit\n);coutPleaseselectanum:;cini;while(i){if(i==1){cout(\nThisisaexampleforpriorityprocessing:\n);init();proc_priority();}elseif(i==2){cout(\nThisisaexampleforroundrobinprocessing:\n);init();proc_loop();}else{coutPleaseselectanumin(1,2,0)\n;}coutPleaseselectanum:;cini;}return0;}}///////输出所有PCB的初始值voidprint_init(PCB*pcb){PCB*temp=pcb-next;cout(\nIDpriorityCPUtimeALLtimeState);while(temp!=NULL){cout\ntemp-IDtemp-prioritytemp-CPUtimetemp-ALLtime;if(temp-State==0)cout(ready);elseif(temp-State==1)cout(running);elsecout(blocked);temp=temp-next;}}///////输出进程属性信息voidprint(PCB*pcb){PCB*temp;temp=pcb;if(pcb-ID==0)cout(\nTheidlepeocessidrunning!);else{cout\ntemp-IDtemp-prioritytemp-CPUtimetemp-ALLtime;if(temp-State==0)cout(ready);elseif(temp-State==1)cout(running);elsecout(blocked);}}///////将item插入到队列中,使得插入后,队列中按照优先级从高到低有序voidinsert_queue(PCB*queue,PCB*item){PCB*p,*q;q=queue;p=q-next;while(p!=0&&p-priority=item-priority){q=p;p=p-next;}if(p==0){item-next=0;q-next=item;}else{item-next=p;q-next=item;}}///////将item插入到阻塞队列的尾部voidpushback_queue(PCB*queue,PCB*item){PCB*p,*q;q=queue,p=q-next;while(p!=0){q=p;p=p-next;}item-next=q-next;q-next=item;}///////对queue中的结点进行排序,按照优先级从大到小voidsort_queue(PCB*&queue){PCB*temp=newPCB;temp-next=0;while(queue-next){PCB*p;p=queue-next;queue-next=p-next;insert_queue(temp,p);}queue-next=temp-next;deletetemp;}///////生成进程属性信息,插入进程就绪队列,显示进程信息voidinsert(){PCB*newp=0;staticlongid=0;newp=newPCB;id++;newp-ID=id;newp-State=0;newp-CPUtime=0;newp-priority=rand()%3+1;newp-ALLtime=rand()%3+1;newp-next=NULL;pushback_queue(ready_queue,newp);//print(newp);//cout(建立:Creating-ready\n);}////////生成n个进程属性信息,插入进程就绪队列,显示进程信息voidinsert(intn){for(inti=0;in;i++)insert();}///////产生idle进程,输入用户进程数目,调用insert()voidinit(){block_queue=newPCB;block_queue-next=0;ready_queue=newPCB;ready_queue-next=0;inti=0,pcb_number=-1;//闲逛进程放入就绪队列idleprocess=NULL;idleprocess=(PCB*)malloc(sizeof(PCB));idleprocess-ID=0;idleprocess-State=0;idleprocess-CPUtime=0;idleprocess-priority=0;idleprocess-ALLtime=0;idleprocess-next=NULL;idleprocess-next=ready_queue-next;//闲逛进程放入就绪队列ready_queue-next=idleprocess;//也可以假定初始时系统中只有一个idle进程//输入初始进程的个数while(pcb_number0){cout(InputthenumberofPCBtobestart:);cinpcb_number;}cout(\nIDpriorityCPUtimeALLtimeState\n);for(;ipcb_number;i++)insert();cout*就绪队列初始化成功endl;::print_init(ready_queue);coutendl;}///////调用destroy()将进程插入阻塞队列voidblock(PCB*pcb){pcb-State=2;pcb-CPUtime-=2;if(pcb-CPUtime=0){pcb-CPUtime+=2;}cout\nTheprocessnopcb-IDisblocked!;print(pcb);cout(变迁2:running-blocked\n);pcb-next=block_queue-next;block_queue-next=pcb;}///////更新进程信息,就绪队列中进程的优先级均增加1voidupdate(PCB*pcb){PCB*temp=pcb-next;while(temp&&temp-next){temp-priority++;temp=temp-next;}}///////唤醒进程,插入就绪队列voidwakeup(){if(block_queue-next==0)/*此时没有阻塞的进程,无所谓的唤醒*/return;PCB*q,*p;while(true){q=block_queue;p=q-next;while(p&&rand()%20!=1){q=p;p=p-next;}if(p!=0){q-next=p-next;break;}}p-State=0;coutendl;print(p);cout变迁3:blocked-readyendl;insert_queue(ready_queue,p);}///////运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程voidRun_priority(PCB*pcb){if(pcb-ID==0){insert_queue(ready_queue,pcb);print(pcb);cout变迁1:ready-running\n;}else{pcb-State=1;pcb-CPUtime+=4;pcb-priority=pcb-priority-3;/*每运行一个时间片,其优先数减3*/if(pcb-priority1)pcb-priority=1;print(pcb);printf(变迁1:ready-running\n);if(rand()%3==1)/*PCB不是闲逛进程,满足条件侧阻塞此进程*/{if(pcb-CPUtime-2pcb-ALLtime)block(pcb);else/*已执行完毕,应该销毁进程*/{cout'\n';coutTheprocessnopcb-IDiscompleted!销毁:running-Destroyendl;deletepcb;}}else/*否则看该进程是否执行完毕,如果执行完,则释放,否则再次放入就绪队列*/{if(pcb-CPUtime=pcb-ALLtime)/*释放*/{cout'\n';coutTheprocessnopcb-IDifcompleted!销毁:running-Destroryendl;deletepcb;}else{::insert_queue(::ready_queue,pcb);}}}update(ready_queue);/*更新就绪队列的优先级数*/if(rand()%5==1){insert(3);::sort_queue(ready_queue);}if(rand()%7=
本文标题:进程调度算法代码
链接地址:https://www.777doc.com/doc-5139185 .html