如何使用java模拟实现OS中的先到先服务(FCFS)和短则优先(SJF/SPF)算法()

代码:

public class JobControlBlock{ float time_Sever; //服务时间 float time_Arrive; //到达时间 float time_Start; //开始时间 float time_Finish; //完成时间 float time_Turnover; //周转时间 float time_WeightedTurnover; //带权周转时间 public JobControlBlock(){ } public JobControlBlock(float time_Sever,float time_Arrive){ this.time_Sever=time_Sever; this.time_Arrive=time_Arrive; }//传服务时间,到达时间 public void set_time_Start(float time_Start){ this.time_Start=time_Start; }//设置开始时间 public float get_time_Start(){ return time_Start; } public void set_time_Arrive(float time_Arrive){ this.time_Arrive=time_Arrive; }//设置到达时间 public float get_time_Arrive(){ return time_Arrive; } public void set_time_Finish(){ time_Finish=time_Start+time_Sever; }//设置结束时间 public float get_time_Finish(){ return time_Finish; } public void set_time_Turnover(){ time_Turnover=time_Finish-time_Arrive; }//计算周转时间 public float get_time_Turnover() { return time_Turnover; } public void set_time_WeightedTurnover(){ time_WeightedTurnover=time_Turnover/time_Sever; }//计算带权周转时间 public float get_time_WeightedTurnover(){ return time_WeightedTurnover; } } /*----------------------------------------------------------------------------------------------------------*/ public class Process { String Process_Name; JobControlBlock jbc; Process(){ } Process(String name,JobControlBlock jbc){ this.Process_Name=name; this.jbc=jbc; }//传进程名,分配JBC } /*----------------------------------------------------------------------------------------------------------*/ import java.util.Scanner; public class Test1 { public static void main(String[] args) { //确定进程数 Scanner sc = new Scanner(System.in); System.out.println("请输入进程数:"); int n = sc.nextInt(); Process PList1[]=new Process[n]; for(int i=0; i【如何使用java模拟实现OS中的先到先服务(FCFS)和短则优先(SJF/SPF)算法()】

可以参照这个表格录入 如何使用java模拟实现OS中的先到先服务(FCFS)和短则优先(SJF/SPF)算法()
文章图片

注: 因为是模拟算法,并不代表实际的过程。所以将作业都放置到数组中,FCFS是按输入顺序排列;SJF是在前者确定的数组中除去第一个作业按服务时间排序。
但在短则优先算法中,由于是事先录好的数组,可能会出现后备队列中有到达时间大于第一个作业结束时间的作业(但它的服务时间却是最小),这样就会出现周转时间为负的情况,这显然是错误的。所以此数组中除去第一个作业外,所有的作业到达时间均不能大于第一个作业的结束时间。实际上,进入后备队列的作业,他们的到达时间都不会大于上一个作业的结束时间。

    推荐阅读