如何使用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)算法()】
可以参照这个表格录入
文章图片
注: 因为是模拟算法,并不代表实际的过程。所以将作业都放置到数组中,FCFS是按输入顺序排列;SJF是在前者确定的数组中除去第一个作业按服务时间排序。
但在短则优先算法中,由于是事先录好的数组,可能会出现后备队列中有到达时间大于第一个作业结束时间的作业(但它的服务时间却是最小),这样就会出现周转时间为负的情况,这显然是错误的。所以此数组中除去第一个作业外,所有的作业到达时间均不能大于第一个作业的结束时间。实际上,进入后备队列的作业,他们的到达时间都不会大于上一个作业的结束时间。
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 由浅入深理解AOP
- 如何寻找情感问答App的分析切入点
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解