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();