如何使用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)算法?_第1张图片

注:

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

你可能感兴趣的:(如何使用java模拟实现OS中的先到先服务(FCFS)和短则优先(SJF/SPF)算法?)