最高优先数优先
代码:
import java.util.Scanner;
public class PSA {
private static int i;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入进程的数量:");
int num = sc.nextInt();
PCB pcb[]=new PCB[num];
System.out.println("请输入"+pcb.length+"个进程的名称:");
for(int i=0; i<pcb.length; i++) {
pcb[i]=new PCB();
pcb[i].name = sc.next();
}
System.out.println("请输入"+pcb.length+"个进程的优先级:");
for(int i=0; i<pcb.length; i++) {
pcb[i].priority = sc.nextInt();
}
System.out.println("请输入"+pcb.length+"个进程的需要运行时间:");
for(int i=0; i<pcb.length; i++) {
pcb[i].needtime = sc.nextFloat();
}
for (int i=0;i<pcb.length;i++) {
System.out.println("进程:" + pcb[i].name + " 的优先级为:" + pcb[i].priority);
}
PSA(pcb);
}
public static void PSA(PCB[] pcb) {//高优先数优先调度
for(int i=0;i<pcb.length-1;i++) {//按照优先数从大到小进入就绪队列
for(int j=0;j<pcb.length-1-i;j++) {
if(pcb[j].priority<pcb[j+1].priority) {
PCB temp=pcb[j];
pcb[j]=pcb[j+1];
pcb[j+1]=temp;
}
}
}
for(int i=0;i<pcb.length;i++) {
System.out.println(pcb[i].name);
}
int Length=pcb.length;
while(Length>0) {//就绪队列不为空
pcb[0].runtime++;
pcb[0].priority--;
if(pcb[0].runtime<pcb[0].needtime){//当前进程没运行结束时
System.out.println("进程" + pcb[0].name + "正在运行!已经运行"+pcb[0].runtime+"个时间片");
for(int i=1;i<Length;i++) {//将已经运行完的进程插入到就绪队列中适当位置
if(pcb[0].priority<pcb[i].priority){
for(int j=0;j<i;j++){
PCB temp=pcb[0];
pcb[j]=pcb[j+1];
pcb[i]=temp;
}
}
}
}
else{//运行结束
System.out.println("进程" + pcb[0].name + "运行结束!一共运行了"+pcb[0].runtime+"个时间片");
for(int i=0;i<Length-1;i++){
pcb[i]=pcb[i+1];
}
Length--;
pcb[Length-1]=null;
}
}
}
}
pcb类
代码:
import java.util.LinkedList;
public class PCB {
public String name;//进程名
public boolean state= false;//状态
public int priority;//优先数
public float needtime;//需要运行时间
public float runtime;//已经运行时间
public float arrivetime;//到达时间
public float starttime;//开始运行时间
public float finishtime;//完成时间
//public static LinkedList<PCB> link = new LinkedList<>();
public float response;//响应比=1+等待时间/需要运行时间
public float waittime;//等待时间
public PCB() {
this.priority = (int)(Math.random() * 5);
}
}