用Java语言写一个完整可运行的程序,最短进程优先(sjf) 程序要求: 能正常运行,输入进程名称,到达时间,和运行时间,输出平均周转时间,输出调度顺序
时间: 2024-10-16 11:03:02 浏览: 30
JAVA操作系统实验进程调度图形化模拟程序
在Java中编写一个简单的 SJF (Shortest Job First) 短进程优先调度算法程序,可以按以下步骤完成:
```java
import java.util.ArrayList;
import java.util.Collections;
class Process {
String name;
int arrivalTime, burstTime;
public Process(String name, int arrivalTime, int burstTime) {
this.name = name;
this.arrivalTime = arrivalTime;
this.burstTime = burstTime;
}
@Override
public String toString() {
return "Process{" +
"name='" + name + '\'' +
", arrivalTime=" + arrivalTime +
", burstTime=" + burstTime +
'}';
}
}
public class SJFScheduler {
private ArrayList<Process> processes = new ArrayList<>();
public void addProcess(String name, int arrivalTime, int burstTime) {
processes.add(new Process(name, arrivalTime, burstTime));
}
public void scheduleAndPrint() {
Collections.sort(processes, (p1, p2) -> p1.arrivalTime - p2.arrivalTime);
int totalTurnaroundTime = 0;
for (Process process : processes) {
System.out.println("Processing " + process + ":");
// 假设所有进程立即进入就绪队列
process.arrivalTime = 0;
totalTurnaroundTime += process.burstTime;
System.out.println("\tTurnaround Time: " + (process.burstTime + process.arrivalTime));
// 假设当前进程完成后,系统会切换到下一个就绪进程
}
double averageTurnaroundTime = (double) totalTurnaroundTime / processes.size();
System.out.println("Average Turnaround Time: " + averageTurnaroundTime);
}
public static void main(String[] args) {
SJFScheduler scheduler = new SJFScheduler();
// 示例进程添加
scheduler.addProcess("P1", 1, 5);
scheduler.addProcess("P2", 2, 3);
scheduler.addProcess("P3", 4, 7);
System.out.println("Scheduling Order:");
scheduler.scheduleAndPrint();
}
}
```
这个程序首先定义了一个`Process`类表示每个进程,包含名字、到达时间和运行时间。然后创建一个`SJFScheduler`类,负责添加进程并按照SJF算法排序。在`scheduleAndPrint`方法中,我们按照到达时间对进程进行排序,并计算总周转时间。最后,在`main`函数中示例了如何创建并调度进程。
阅读全文