java实现进程调度1—静态非剥夺式优先级调度计算平均作业周转时间的代码
时间: 2024-05-10 15:17:15 浏览: 4
以下是使用静态非剥夺式优先级调度算法计算平均作业周转时间的Java代码:
```java
import java.util.ArrayList;
import java.util.Collections;
class Process {
int pid; // 进程ID
int burstTime; // 进程需要的CPU时间
int priority; // 进程优先级
int arrivalTime; // 进程到达时间
int turnaroundTime; // 进程周转时间
int waitingTime; // 进程等待时间
Process(int pid, int burstTime, int priority, int arrivalTime) {
this.pid = pid;
this.burstTime = burstTime;
this.priority = priority;
this.arrivalTime = arrivalTime;
}
}
public class PriorityScheduling {
public static void main(String[] args) {
ArrayList<Process> processes = new ArrayList<>();
processes.add(new Process(1, 4, 2, 0));
processes.add(new Process(2, 3, 1, 1));
processes.add(new Process(3, 2, 3, 2));
processes.add(new Process(4, 7, 4, 3));
int currentTime = 0; // 当前时间
int totalTurnaroundTime = 0; // 所有进程的周转时间之和
int n = processes.size(); // 进程数量
// 按照优先级从大到小排序
Collections.sort(processes, (a, b) -> b.priority - a.priority);
System.out.println("PID\tBurst Time\tPriority\tArrival Time\tTurnaround Time\tWaiting Time");
for (Process p : processes) {
// 计算周转时间
p.turnaroundTime = currentTime + p.burstTime - p.arrivalTime;
totalTurnaroundTime += p.turnaroundTime;
// 计算等待时间
p.waitingTime = p.turnaroundTime - p.burstTime;
// 输出进程信息
System.out.println(p.pid + "\t\t" + p.burstTime + "\t\t" + p.priority + "\t\t" +
p.arrivalTime + "\t\t" + p.turnaroundTime + "\t\t" + p.waitingTime);
// 更新当前时间
currentTime += p.burstTime;
}
// 计算平均周转时间
float avgTurnaroundTime = (float) totalTurnaroundTime / n;
System.out.println("Average Turnaround Time = " + avgTurnaroundTime);
}
}
```
上述代码中,我们定义了一个`Process`类表示进程,包含进程ID、需要的CPU时间、优先级、到达时间、周转时间和等待时间等信息。然后我们定义了一个`PriorityScheduling`类来实现静态非剥夺式优先级调度算法,计算平均作业周转时间。
在`main`函数中,我们初始化了4个进程,并按照优先级从大到小排序。然后依次处理每个进程,计算周转时间和等待时间,并输出进程信息。最后计算平均周转时间并输出。
注意,上述代码中的进程到达时间都为0,如果需要支持不同的到达时间,需要根据到达时间对进程进行排序并计算等待时间。