概念:作业是用户提交给系统的一项相对独立的工作。操作员把用户提交的作业通过相应的输入设备输入到磁盘存储器,并保存在一个后备作业队列中。再由作业调度程序将其从外存调入内存。
解释:系统按照作业来的时间去处理作业。
到达时间:作业到达的时间 开始时间:开始处理作业的时间 服务时间:处理该作业需要的时间 完成时间:作业处理完成的时间 周转时间:作业从进入到完成所消耗的时间 带权周转时间:作业的 周转时间 与它的 服务时间 之比
名字 | 到达时间 | 开始时间 | 服务时间 | 完成时间 | 周转时间 | 带权周转时间 |
---|---|---|---|---|---|---|
A | 1 | 1 | 2 | 3 | 2 | 1 |
B | 2 | 3 | 3 | 6 | 4 | 1.33 |
C | 4 | 6 | 4 | 10 | 6 | 1.5 |
完成时间 = 开始时间 + 服务时间 周转时间 = 完成时间 - 到达时间 带权周转时间 = 周转时间 / 服务时间
先输入一个数n,表示共有那个作业,在接下来的n行输入中,每行包含三个数据:作业名、到达时间、服务时间。输出中 W:等待状态,F:完成状态。
public class Mission implements Comparable<Mission> { String name; int ArrivalTime; //到达时间 int ServiceTime; //服务时间 int StartingTime; //开始时间 int FinishingTime; //完成时间 int TurnAroundTime; //周转时间 double WeightTurnAroundTime; //带权周转时间 String ServiceStatus; //运行状态 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getArrivalTime() { return ArrivalTime; } public void setArrivalTime(int arrivalTime) { ArrivalTime = arrivalTime; } public int getServiceTime() { return ServiceTime; } public void setServiceTime(int serviceTime) { ServiceTime = serviceTime; } public int getStartingTime() { return StartingTime; } public void setStartingTime(int startingTime) { StartingTime = startingTime; } public int getFinishingTime() { return FinishingTime; } public void setFinishingTime(int finishingTime) { FinishingTime = finishingTime; } public int getTurnAroundTime() { return TurnAroundTime; } public void setTurnAroundTime(int turnAroundTime) { TurnAroundTime = turnAroundTime; } public double getWeightTurnAroundTime() { return WeightTurnAroundTime; } public void setWeightTurnAroundTime(double weightTurnAroundTime) { WeightTurnAroundTime = weightTurnAroundTime; } public String getServiceStatus() { return ServiceStatus; } public void setServiceStatus(String serviceStatus) { ServiceStatus = serviceStatus; } @Override public int compareTo(Mission o) { if (this.ArrivalTime >= o.getArrivalTime()) { return 1; } return -1; } } 复制代码
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { List<Mission> list = new ArrayList<>(); Scanner scanner = new Scanner(System.in); System.out.println("输入任务数"); int n = scanner.nextInt(); scanner.nextLine(); System.out.println("输入作业名 到达时间 服务时间"); for (int i = 0; i < n; i++) { String s = scanner.nextLine(); String[] ss = s.split(" "); Mission mission=new Mission(); mission.setName(ss[0]); mission.setArrivalTime(Integer.parseInt(ss[1])); mission.setServiceTime(Integer.parseInt(ss[2])); mission.setServiceStatus("W"); //状态初始为W list.add(mission); } Collections.sort(list);//按到达时间排序 new Dispatch(list); //调度 } } 复制代码
import java.util.List; public class Dispatch { public Dispatch(List<Mission> list) { System.out.println("准备调度作业"); for (Mission m : list) { System.out.println(m.getName() + "-" + m.getServiceStatus()); } //第一个 //开始时间 list.get(0).setStartingTime(list.get(0).getArrivalTime()); //完成时间 list.get(0).setFinishingTime(list.get(0).getArrivalTime() + list.get(0).getServiceTime()); //周转时间 list.get(0).setTurnAroundTime(list.get(0).getFinishingTime() - list.get(0).getArrivalTime()); //带权周转时间 list.get(0).setWeightTurnAroundTime((double) list.get(0).getTurnAroundTime() / (double) list.get(0).getServiceTime()); //状态 list.get(0).setServiceStatus("F"); System.out.println("处理=" + list.get(0).getName() + " 周转时间=" + list.get(0).getTurnAroundTime() + " 带权周转时间=" + list.get(0).getWeightTurnAroundTime()); for (Mission m : list) { System.out.println(m.getName() + "-" + m.getServiceStatus()); } //第二个及以后的 for (int i = 1; i < list.size(); i++) { //开始时间 list.get(i).setStartingTime(list.get(i - 1).getFinishingTime()); //完成时间 list.get(i).setFinishingTime(list.get(i).getStartingTime() + list.get(i).getServiceTime()); //周转时间 list.get(i).setTurnAroundTime(list.get(i).getFinishingTime() - list.get(i).getArrivalTime()); //带权周转时间 list.get(i).setWeightTurnAroundTime((double)list.get(i).getTurnAroundTime() / (double) list.get(i).getServiceTime()); //状态 list.get(i).setServiceStatus("F"); System.out.println("处理=" + list.get(i).getName() + " 周转时间=" + list.get(i).getTurnAroundTime() + " 带权周转时间=" + list.get(i).getWeightTurnAroundTime()); for (Mission m : list) { System.out.println(m.getName() + "-" + m.getServiceStatus()); } } } } 复制代码
测试:
如有不足,还请指正哦~
源码在GitHub: github.com/FangWolf/si…