设计一个按照优先级调度算法实现处理机调度的程序

时间:2025-02-15 12:56:26
package pcb; import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; public class Priority { public static void getMax(Queue<PCB> queue) { //找出优先级最高(优先级数最小)的进程 int minPriorityNum = 100; int minArrivalTime = 100; for(PCB q : queue ) { if(q.getPriorityNum() < minPriorityNum) { minPriorityNum = q.getPriorityNum(); } } //找出优先级最高且到达时间最早的进程 for(PCB q : queue ) { if(q.getPriorityNum() == minPriorityNum && q.getArrivalTime() < minArrivalTime) { minArrivalTime = q.getArrivalTime(); } } PCB first = queue.peek(); for(int i = 0;i < queue.size();i++) { while(queue.peek().getPriorityNum() > minPriorityNum) { queue.offer(queue.peek()); queue.poll(); } PCB q = ((LinkedList<PCB>) queue).get(i); if(!q.equals(first)) { if((q.getPriorityNum() == queue.peek().getPriorityNum()) && q.getArrivalTime() < queue.peek().getArrivalTime()) { while(queue.peek().getArrivalTime() != minArrivalTime) { queue.offer(queue.peek()); queue.remove(queue.peek()); queue.remove(0); //i--; } }else { continue; } }else { continue; } } } public static void main(String[] args) { System.out.println("名字\t"+"到达时间\t"+"运行时间\t"+"优先级数\t"+"状态"); Queue<PCB> queue = new LinkedList<PCB>(); // (new PCB("a1",1,9,9)); // (new PCB("a2",2,5,10)); // (new PCB("a3",5,7,10)); // (new PCB("a4",2,4,6)); queue.offer(new PCB("a1")); queue.offer(new PCB("a2")); queue.offer(new PCB("a3")); // (new PCB("a4")); // (new PCB("a5")); // (new PCB("a6")); // (new PCB("a7")); // (new PCB("a8")); // (new PCB("a9")); // (new PCB("a10")); // (new PCB("a11")); // (new PCB("a12")); // (new PCB("a13")); // (new PCB("a14")); // (new PCB("a15")); // (new PCB("a16")); // ("======================================="); while(!queue.isEmpty()) { //把优先级最高(优先级数小)的进程调到队首 if(queue.size() > 1) { getMax(queue); } if(!queue.isEmpty()) { //遍历队列,设置进程状态 for(PCB q : queue) { if(q.equals(queue.peek())) { //队首 q.setStatus("Working"); }else { //非队首 if(q.getStatus().equals("Working")) { q.setStatus("Ready"); } } //打印信息 q.printInformation(); } //进程运行 queue.peek().run(); } for(PCB q : queue) { if(q.getRunTime() == 0) { q.setStatus("End"); } if(q.getStatus().equals("End")) { System.out.println(); //打印信息 q.printInformation(); System.out.print("==============="+q.getName()+"进程结束================"); queue.poll(); break; } } System.out.println(); } } }