先来先服务代码:
public class FCFS {
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].arrivetime = sc.nextFloat();
}
System.out.println("请输入"+pcb.length+"个进程需要运行的时间:");
for(int i=0; i<pcb.length; i++) {
pcb[i].needtime = sc.nextFloat();
}
FCFS(pcb);
}
public static void FCFS(PCB[] pcb) {
for(int i=0;i<pcb.length-1;i++) {//按照到达时间进入就绪队列
for(int j=0;j<pcb.length-1-i;j++) {
if(pcb[j].arrivetime>pcb[j+1].arrivetime) {
PCB temp=pcb[j];
pcb[j]=pcb[j+1];
pcb[j+1]=temp;
}
}
}
pcb[0].starttime=pcb[0].arrivetime;
pcb[0].finishtime=pcb[0].starttime+pcb[0].needtime;//第一个作业完成时间
for(int i=1;i<pcb.length;i++) {
pcb[i].starttime=pcb[i-1].finishtime;
pcb[i].finishtime=pcb[i].starttime+pcb[i].needtime;
}
System.out.println("先来先服务算法:");
dispPCB(pcb);
}
public static void dispPCB(PCB[] pcb) {
System.out.println("——————————————————————");
System.out.println("进程名"+" 到达时间"+" 开始运行时间"+" 需要运行时间"+" 完成时间");
for (int i=0;i<pcb.length;i++) {
System.out.println(pcb[i].name +
" "+ pcb[i].arrivetime +
" "+ pcb[i].starttime +
" "+ pcb[i].needtime +
" "+ pcb[i].finishtime );
}
System.out.println("——————————————————————");
}
}
PCB类:
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);
}
}