进程调度算法模拟程序(C++描述)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

进程调度算法模拟程序(C++描述)(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段:进程标识数ID。进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。进程已占用CPU时间CPUTIME。进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态。进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。进程状态STATE。队列指针NEXT,用来将PCB排成队列。(3)优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加1。进程每运行一个时间片,优先数减3。(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5)分析程序运行的结果,谈一下自己的认识。实验代码#includeiostream.h#includewindows.h//#defineN3typedefstruct{intID;intPRIORITY;intCPUTIME;intALLTIME;intSTARTBLOCK;intBLOCKTIME;intSTATE;//0-运行1-阻塞2-就绪3-结束4-未到达intREACH;intTIME;}PROCESS;voidtextcolor(intcolor){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);}voidmain(){inti,time,max,l,l1,time1,flag=0,total=0,N,server[10],sum=0;PROCESSpro[10];textcolor(13);cout注意:本程序中状态代表如下endl0-运行1-阻塞2-就绪3-结束4-未到达endlendl;textcolor(15);cout请输入进程数:;cinN;cout请设置时间片长度:;cintime;cout请输入各进程初始状态:endl;coutIDPRIORITYREACHALLTIMESTARTBLOCKBLOCKTIMEendl;for(i=0;iN;i++){pro[i].CPUTIME=0;pro[i].TIME=0;cinpro[i].IDpro[i].PRIORITYpro[i].REACH;cinpro[i].ALLTIMEpro[i].STARTBLOCKpro[i].BLOCKTIME;server[i]=pro[i].ALLTIME;if(pro[i].REACH==0)pro[i].STATE=0;elsepro[i].STATE=4;}do{coutendl当前时刻为:total;textcolor(12);coutendl========================各进程状态为======================endl;textcolor(15);coutIDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATEendl;for(i=0;iN;i++){coutpro[i].IDpro[i].PRIORITYpro[i].CPUTIME;coutpro[i].ALLTIMEpro[i].STARTBLOCKpro[i].BLOCKTIMEpro[i].STATE;coutendl;}total+=time;for(i=0;iN;i++){if(pro[i].STATE==4&&pro[i].REACHtotal){pro[i].STATE=1;}}for(i=0;iN;i++){time1=pro[i].ALLTIME;if(pro[i].STATE==0){if(pro[i].ALLTIME=time){//pro[i].CPUTIME+=time1;pro[i].ALLTIME=0;pro[i].STATE=3;pro[i].TIME=total-time+time1;}else{//pro[i].CPUTIME+=time;pro[i].ALLTIME-=time;pro[i].STARTBLOCK--;if(pro[i].STARTBLOCK==0){pro[i].STATE=1;pro[i].BLOCKTIME=time1;pro[i].STARTBLOCK=time1;}pro[i].PRIORITY-=3;pro[i].TIME=total;}}if(pro[i].STATE==1){pro[i].BLOCKTIME--;if(pro[i].BLOCKTIME==0)pro[i].STATE=2;pro[i].TIME=total;}if(pro[i].STATE==2){//pro[i].CPUTIME+=time;pro[i].PRIORITY++;pro[i].TIME=total;}}max=-100;l1=-1;l=-1;for(i=0;iN;i++){if(pro[i].PRIORITYmax&&(pro[i].STATE==0||pro[i].STATE==2)){l=i;max=pro[i].PRIORITY;}if(pro[i].STATE==0)l1=i;}if(l!=-1&&l!=l1)pro[l].STATE=0;if(l1!=-1)pro[l1].STATE=2;flag=0;for(i=0;iN;i++){if(pro[i].STATE!=3){flag=1;break;}}if(flag==0)break;}while(1);coutendl当前时刻:total;textcolor(12);coutendl========================各进程状态为======================endl;textcolor(15);coutIDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATEendl;for(i=0;iN;i++){coutpro[i].IDpro[i].PRIORITYpro[i].CPUTIME;coutpro[i].ALLTIMEpro[i].STARTBLOCKpro[i].BLOCKTIMEpro[i].STATE;coutendl;}coutendl各进程运行结束!endl;cout进程号到达时间结束时间周转时间带权周转时间endl;textcolor(10);for(i=0;iN;i++){coutpro[i].IDpro[i].REACHpro[i].TIMEpro[i].TIME-pro[i].REACH(float)(pro[i].TIME-pro[i].REACH)/server[i]endl;sum+=pro[i].TIME-pro[i].REACH;}cout平均周转时间为:(float)sum/Nendl;textcolor(15);}实验结果注意:本程序中状态代表如下0-运行1-阻塞2-就绪3-结束4-未到达请输入进程数:3请设置时间片长度:2请输入各进程初始状态:IDPRIORITYREACHALLTIMESTARTBLOCKBLOCKTIME145783260728732626当前时刻为:0========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE140783426072807306264当前时刻为:2========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE140783423051827306264当前时刻为:4========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE140783424051807306251当前时刻为:6========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE140782121035417306241当前时刻为:8========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE140781121035317306231当前时刻为:10========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE150780021035217306221当前时刻为:12========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE120570221035117306211当前时刻为:14========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE130570222035027406200当前时刻为:16========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE140570023035027104102当前时刻为:18========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE110360224035007204102当前时刻为:20========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE120360221014027304100当前时刻为:22========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE130360022014027002431当前时刻为:24========================各进程状态为======================IDPRIORITYCPUTIMEALLTIMESTARTBLOCKBLOCKTIMESTATE10015

1 / 11
下载文档,编辑使用

©2015-2020 m.111doc.com 三一刀客.

备案号:赣ICP备18015867号-1 客服联系 QQ:2149211541

×
保存成功