使用动态优先权的进程调度算法的模拟实验 下载本文

PCB *head; //head为就绪队列的头指针

PCB *run=NULL; //run为执行进程结点的指针 PCB *block=NULL; //block为阻塞进程的结点 PCB *temp;

printf(\请输入进程的个数:\scanf(\

head=CreatQueue(num); getchar(); temp=head;

while(temp!=NULL) { alltime+=temp->alltime; temp=temp->next; }

while(alltime > 0) { if(head!=NULL) { run=head; //把就绪队列中的第一个进程取出来执行 head=head->next; //就绪队列的头指针指向下一个结点 strcpy(run->state,\ //状态改为执行 run->next=NULL;

/*显示状态*/

printf(\ //显示执行进程 printf(\ //显示就绪进程 temp=head;

while(temp!=NULL) { printf(\ temp=temp->next; }

printf(\

printf(\ //显示阻塞进程 if(block!=NULL) { printf(\ } printf(\ printf(\=======\\n\ printf(\STARTBLOCK BLOCKTIME STATE\\n\ printf(\%d %d %d %d %d %s\\n\

state); temp=head; while(temp!=NULL) { printf(\%d %d %d %d %d %s\\n\time,temp->state); temp=temp->next; } if(block!=NULL) { printf(\%d %d %d %d %d %s\me,block->state); } printf(\ printf(\=======\\n\ /*显示状态*/ 1

/*改变优先数*/

run->priority-=3; //执行进程的优先数减3 temp=head;

while(temp!=NULL) //就绪进程的优先数加1 { temp->priority+=1; temp=temp->next; }

/*改变优先数*/

/*改变执行进程的有关参数*/

run->cputime+=1; //执行进程的已占用CPU时间加1 run->alltime-=1; //还需要的CPU时间减1 if(run->alltime!=0) { if(run->startblock > 0) //如果该进程会被阻塞 { run->startblock-=1; //执行完一个时间片后,开始阻塞的时间减

if(run->startblock==0) //如果阻塞的时间到了 { block=run; //执行转阻塞 strcpy(block->state,\ //状态转阻塞 alltime--; printf(\

continue; } } strcpy(run->state,\ //状态转就绪 head=InsertQueue(head,run); //执行转就绪 run=NULL; }

/*改变执行进程的有关参数*/ alltime--; } else {

/*显示状态*/ printf(\ //显示执行进程 printf(\ //显示就绪进程 printf(\ //显示阻塞进程 if(block!=NULL) { printf(\ } printf(\ printf(\=======\\n\ printf(\STARTBLOCK BLOCKTIME STATE\\n\ if(block!=NULL) { printf(\%d %d %d %d %d %s\me,block->state); } printf(\ printf(\=======\\n\

/*显示状态*/ }

/*改变阻塞进程的有关参数*/

if(block!=NULL) //如果有阻塞进程 { block->blocktime-=1; //被阻塞的时间减1 if(block->blocktime==0) //如果被阻塞的时间到了 { strcpy(block->state,\ //状态转就绪

}

}

}

}

head=InsertQueue(head,block); //阻塞转就绪 block=NULL;

/*改变阻塞进程的有关参数*/ getchar();