c语言实现SRTF算法
时间: 2023-07-25 08:03:37 浏览: 27
SRTF(Shortest Remaining Time First)算法是一种短作业优先调度算法,也称为最短剩余时间优先算法。其主要思想是在进程执行过程中,根据每个进程的剩余执行时间来动态地调整进程的执行顺序,使得剩余时间最短的进程先执行。
下面是使用C语言实现SRTF算法的示例代码:
```c
#include <stdio.h>
struct process {
int pid; // 进程号
int arrival_time; // 到达时间
int burst_time; // 执行时间
int remaining_time; // 剩余执行时间
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
};
int main() {
int n, i, j, time = 0, total_waiting_time = 0, total_turnaround_time = 0;
float avg_waiting_time, avg_turnaround_time;
struct process p[10], temp;
printf("Enter the number of processes: ");
scanf("%d", &n);
// 输入进程信息
for (i = 0; i < n; i++) {
printf("Enter the arrival time and burst time of process %d: ", i + 1);
scanf("%d%d", &p[i].arrival_time, &p[i].burst_time);
p[i].pid = i + 1;
p[i].remaining_time = p[i].burst_time;
}
// 按到达时间升序排序
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (p[i].arrival_time > p[j].arrival_time) {
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
// 执行进程
for (i = 0; i < n; i++) {
while (p[i].remaining_time > 0) {
// 找到剩余执行时间最短的进程
int shortest = i;
for (j = i + 1; j < n; j++) {
if (p[j].arrival_time <= time && p[j].remaining_time < p[shortest].remaining_time) {
shortest = j;
}
}
// 更新等待时间和剩余执行时间
p[shortest].waiting_time = time - p[shortest].arrival_time;
p[shortest].remaining_time--;
time++;
}
// 更新周转时间
p[i].turnaround_time = p[i].burst_time + p[i].waiting_time;
total_waiting_time += p[i].waiting_time;
total_turnaround_time += p[i].turnaround_time;
}
// 计算平均等待时间和平均周转时间
avg_waiting_time = (float) total_waiting_time / n;
avg_turnaround_time = (float) total_turnaround_time / n;
// 输出结果
printf("Process\t Arrival Time\t Burst Time\t Waiting Time\t Turnaround Time\n");
for (i = 0; i < n; i++) {
printf("%d\t %d\t\t %d\t\t %d\t\t %d\n", p[i].pid, p[i].arrival_time, p[i].burst_time, p[i].waiting_time, p[i].turnaround_time);
}
printf("Average waiting time: %.2f\n", avg_waiting_time);
printf("Average turnaround time: %.2f\n", avg_turnaround_time);
return 0;
}
```
在上述代码中,首先输入进程信息,并按到达时间升序排序。然后依次执行进程,每次找到剩余执行时间最短的进程,并更新等待时间和剩余执行时间。最后计算平均等待时间和平均周转时间,并输出结果。
相关推荐















