SRTF java代码
时间: 2023-09-07 11:17:10 浏览: 46
以下是使用Java语言实现SRTF(最短剩余时间优先)算法的代码示例:
```java
import java.util.*;
public class SRTF {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入进程数量:");
int n = sc.nextInt();
int[] pid = new int[n]; // 进程ID
int[] at = new int[n]; // 到达时间
int[] bt = new int[n]; // 执行时间
int[] ct = new int[n]; // 完成时间
int[] tat = new int[n]; // 周转时间
int[] wt = new int[n]; // 等待时间
int[] rt = new int[n]; // 响应时间
int[] rem_bt = new int[n]; // 剩余执行时间
// 输入进程信息
for (int i = 0; i < n; i++) {
System.out.println("请输入进程 " + (i + 1) + " 的信息:");
System.out.print("进程ID:");
pid[i] = sc.nextInt();
System.out.print("到达时间:");
at[i] = sc.nextInt();
System.out.print("执行时间:");
bt[i] = sc.nextInt();
rem_bt[i] = bt[i]; // 剩余执行时间初始值等于总执行时间
}
int t = 0; // 当前时间
int complete = 0; // 已完成的进程数量
int min_bt_index; // 最短剩余时间的进程ID
while (complete != n) { // 所有进程都完成时结束循环
min_bt_index = -1;
// 找到剩余执行时间最短的进程
for (int i = 0; i < n; i++) {
if (at[i] <= t && rem_bt[i] > 0 && (min_bt_index == -1 || rem_bt[i] < rem_bt[min_bt_index])) {
min_bt_index = i;
}
}
if (min_bt_index == -1) { // 当前时间没有进程可执行
t++;
continue;
}
// 执行进程
rem_bt[min_bt_index]--;
t++;
// 如果进程已经执行完毕
if (rem_bt[min_bt_index] == 0) {
complete++;
// 计算完成时间、周转时间、等待时间、响应时间
ct[min_bt_index] = t;
tat[min_bt_index] = ct[min_bt_index] - at[min_bt_index];
wt[min_bt_index] = tat[min_bt_index] - bt[min_bt_index];
rt[min_bt_index] = ct[min_bt_index] - bt[min_bt_index] - at[min_bt_index];
}
}
// 输出结果
System.out.println("进程ID\t到达时间\t执行时间\t完成时间\t周转时间\t等待时间\t响应时间");
for (int i = 0; i < n; i++) {
System.out.println(pid[i] + "\t\t" + at[i] + "\t\t" + bt[i] + "\t\t" + ct[i] + "\t\t" + tat[i] + "\t\t" + wt[i] + "\t\t" + rt[i]);
}
// 计算平均周转时间和平均等待时间
float avg_tat = 0, avg_wt = 0;
for (int i = 0; i < n; i++) {
avg_tat += tat[i];
avg_wt += wt[i];
}
avg_tat /= n;
avg_wt /= n;
System.out.println("平均周转时间:" + avg_tat);
System.out.println("平均等待时间:" + avg_wt);
}
}
```
在上述代码中,我们使用了一个 `rem_bt` 数组来保存每个进程的剩余执行时间,每次选择剩余执行时间最短的进程来执行,直到所有进程都执行完毕。在每个进程执行完毕时,计算完成时间、周转时间、等待时间、响应时间,并最终输出结果和平均值。