在时间片轮转调度算法中,做了一个隐含的假设,即系统中所有进程的紧迫性是相同的。但实际情况并非如此,为了能满足实际情况的需要,在进程调度算法中引入优先级,而形成优先级调度算法。
本例中实现的优先级的定义为:
优先数 = 50 - 运行时间
每运行一次优先数减3,重新竞争。
实现效果:(只列出输入和最终输出,省略中间过程)
Java实现过程
PCB类在比起时间片轮转算法中新增一个priorityNumber(省略了各个变量的getter与setter)
public class PCB { String name; int priorityNumber=50; int cpuTime=0; int needTime; char state='W'; public PCB(String name,int needTime){ this.name = name; this.needTime = needTime; this.priorityNumber = 50-needTime; } public void printInformation(){ System.out.println(this.getName() +"\t" + this.getCpuTime() + "\t" + this.getNeedTime() + "\t\t" + this.getState()); } ...... }
循环一下处理过程并输出
// 找出优先级最高的进程 int maxPriorityNumber = 0; for (PCB tempPCB : currentQueue) { if(tempPCB.getPriorityNumber()>maxPriorityNumber){ maxPriorityNumber=tempPCB.getPriorityNumber(); } } // 把优先级最高的进程调配到队首 while(currentQueue.peek().getPriorityNumber() < maxPriorityNumber){ currentQueue.offer(currentQueue.peek()); currentQueue.poll(); }进程调度处理
PCB processingPCB = currentQueue.poll(); if (processingPCB.state != 'F') { waitQueue.poll(); processingPCB.setState('R'); if (processingPCB.getNeedTime() > round) { processingPCB .setCpuTime(processingPCB.getCpuTime() + round); processingPCB.setNeedTime(processingPCB.getNeedTime() - round); processingPCB.setState('W'); } else { processingPCB.setCpuTime(processingPCB.getCpuTime() + processingPCB.getNeedTime()); processingPCB.setNeedTime(0); processingPCB.setState('F'); } // 执行完毕竞争数减3 } currentQueue.offer(processingPCB);遍历输出结果(略)