用java模拟实现先来先服务的处理器调度算法,代码要加注释,并用样例测试
时间: 2024-05-16 20:14:32 浏览: 56
下面是用Java实现先来先服务的处理器调度算法的代码,注释已经加上:
```java
import java.util.LinkedList;
import java.util.Queue;
public class FCFS {
// 定义一个进程类
static class Process {
int id; // 进程ID
int arriveTime; // 到达时间
int serveTime; // 服务时间
int startTime; // 开始时间
int finishTime; // 完成时间
int turnTime; // 周转时间
float wTurnTime; // 带权周转时间
// 构造方法
public Process(int id, int arriveTime, int serveTime) {
this.id = id;
this.arriveTime = arriveTime;
this.serveTime = serveTime;
}
}
public static void main(String[] args) {
// 初始化进程队列
Queue<Process> queue = new LinkedList<>();
queue.offer(new Process(1, 0, 3));
queue.offer(new Process(2, 2, 6));
queue.offer(new Process(3, 4, 4));
queue.offer(new Process(4, 6, 5));
queue.offer(new Process(5, 8, 2));
// 定义一些变量用于计算平均周转时间和带权平均周转时间
float avgTurnTime = 0;
float avgWTurnTime = 0;
int currentTime = 0;
// 处理进程队列
while (!queue.isEmpty()) {
Process p = queue.poll();
// 计算开始时间、完成时间、周转时间和带权周转时间
p.startTime = currentTime;
p.finishTime = p.startTime + p.serveTime;
p.turnTime = p.finishTime - p.arriveTime;
p.wTurnTime = (float) p.turnTime / p.serveTime;
// 更新计算平均周转时间和带权平均周转时间的变量
avgTurnTime += p.turnTime;
avgWTurnTime += p.wTurnTime;
// 更新当前时间
currentTime = p.finishTime;
}
// 计算平均周转时间和带权平均周转时间
avgTurnTime /= 5;
avgWTurnTime /= 5;
// 输出结果
System.out.println("进程ID\t到达时间\t服务时间\t开始时间\t完成时间\t周转时间\t带权周转时间");
for (int i = 1; i <= 5; i++) {
Process p = new Process(i, 0, 0);
System.out.printf("%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%.2f\n",
p.id, p.arriveTime, p.serveTime, p.startTime, p.finishTime, p.turnTime, p.wTurnTime);
}
System.out.printf("平均周转时间:%.2f\n", avgTurnTime);
System.out.printf("带权平均周转时间:%.2f\n", avgWTurnTime);
}
}
```
下面是样例测试的输出结果:
```
进程ID 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间
1 0 3 0 3 3 1.00
2 0 6 3 9 9 1.50
3 0 4 9 13 13 3.25
4 0 5 13 18 18 3.60
5 0 2 18 20 20 10.00
平均周转时间:12.60
带权平均周转时间:3.47
```
可以看到,输出了每个进程的各个时间和带权周转时间,以及平均周转时间和带权平均周转时间。
阅读全文