处理机调度算法的实现程序设计思路:自定义结构体PCB表(进程名name,进程优先数priority,进程执行时间time)以及进程就绪队列Queue_Process(data[MAXSIZE]数组存放PCB,front,rear队首队尾指针),通过每次对进程就绪队列进行进程优先数从大到小排序来确定进程执行的选择,并且是采用动态优先数调度算法(每次优先数减1,执行时间减1),每次输出进程执行情况时只需要将队首PCB调出执行,其他进程都处于动态就绪状态,等进程执行结束后重新对进程就绪队列排序。程序中,采用结构体、队列等数据结构,其中对队列每次排序是采用冒泡排序算法实现。源代码:#include#includeusingnamespacestd;#defineMAXSIZE10structPCB{intname;//进程名intpriority;//进程优先数inttime;//进程执行时间};structQueue_Process{PCBdata[MAXSIZE];//PCB队列intfront;//队首intrear;//队尾};voidInitQueue(Queue_Process*Q){Q->front=Q->rear=0;}boolIsQueueEmpty(Queue_ProcessQ)//队空判断函数{return(Q.front==Q.rear)?true:false;}boolIsQueueFull(Queue_ProcessQ)//队满判断函数{return(Q.front==(Q.rear+1)%MAXSIZE)?true:false;}voidEnQueue(Queue_Process*Q,PCBx)//入队函数{if(IsQueueFull(*Q))//判断队列是否为满{cout<<"队满,入队操作失败!"<data[Q->rear].name=x.name;Q->data[Q->rear].priority=x.priority;Q->data[Q->rear].time=x.time;Q->rear=(Q->rear+1)%MAXSIZE;//队列队尾指针后移}voidDeleQueue(Queue_Process*Q){if(IsQueueEmpty(*Q))//判断队列是否为空{cout<<"队空,出队操作失败!"<front=(Q->front+1)%MAXSIZE;//将队列首指针后移}voidSortPCB(PCB*pcb,intn)//PCB优先数大小从大到小排列函数{PCBtemp;boolexchange=true;//交换标志for(inti=n-1;i>0&&exchange;i--)//冒泡排序算法排序{exchange=false;for(intj=0;j>p>>t;pcb[i].name=i;pcb[i].priority=p;pcb[i].time=t;}}voidDisplay(Queue_Process*queue)//输出每个时刻的进程运行情况函数{cout<<"进程名\t"<<"优先数\t"<<"执行时间\t"<<"进程状态"<data[queue->front].time>1){cout<<""<data[queue->front].name<<"\t"<<""<data[queue->front].priority<<"\t\t"<<""<data[queue->front].time<<"\t\t"<<"执行中..."<data[queue->front].priority-=1;queue->data[queue->front].time-=1;for(inti=1;irear-queue->front;i++)cout<<""<data[queue->front+i].name<<"\t"<<""<data[queue->front+i].priority<<"\t\t"<<""<data[queue->front+i].time<<"\t\t"<<"等待中..."<data[queue->front].name<<"\t"<<""<data[queue->front].priority<<"\t\t"<<""<data[queue->front].time<<"\t\t"<<"执行中..."<rear-queue->front;i++)cout<<""<data[queue->front+i].name<<"\t"<<""<data[queue->front+i].priority<<"\t\t"<<""<data[queue->front+i].time<<"\t\t"<<"等待中..."<data[queue->front].name<<"执行完毕!"<data,queue->rear-queue->front);//对队列中的优先数进程重新排序}while(!IsQueueEmpty(*queue));}voidmain(){PCBprocess[MAXSIZE-1];//进程数组Queue_Processqueue;//进程队列intnum;//要输入的进程数cout<<"请输入进程同步数num:"<>num;InitQueue(&queue);//初始化队列Input(process,num);for(inti=0;i