最高响应比优先算法c语言
时间: 2023-10-26 21:22:29 浏览: 86
最高响应比优先算法(Highest Response Ratio Next,HRRN)是一种用于进程调度的算法。它是基于优先级调度算法的改进,考虑了等待时间和服务时间两个因素。
以下是一个简单的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct Process {
int pid; // 进程 ID
int arrival; // 到达时间
int burst; // 执行时间
int wait; // 等待时间
int turnaround; // 周转时间
float ratio; // 响应比
};
int main() {
int n, i, j;
float avg_wait = 0, avg_turnaround = 0;
printf("Enter the number of processes: ");
scanf("%d", &n);
struct Process *p = malloc(n * sizeof(struct Process));
printf("Enter arrival time and burst time for each process:\n");
for (i = 0; i < n; i++) {
printf("Process %d: ", i + 1);
scanf("%d %d", &p[i].arrival, &p[i].burst);
p[i].pid = i + 1;
p[i].wait = p[i].turnaround = 0;
p[i].ratio = 0;
}
int time = 0, completed = 0, max_ratio_index;
while (completed < n) {
max_ratio_index = -1;
float max_ratio = -1;
for (i = 0; i < n; i++) {
if (p[i].arrival <= time && p[i].turnaround == 0) {
p[i].wait = time - p[i].arrival;
p[i].ratio = (float) (p[i].burst + p[i].wait) / p[i].burst;
if (p[i].ratio > max_ratio) {
max_ratio = p[i].ratio;
max_ratio_index = i;
}
}
}
if (max_ratio_index == -1) {
time++;
continue;
}
p[max_ratio_index].turnaround = p[max_ratio_index].burst + p[max_ratio_index].wait;
completed++;
time += p[max_ratio_index].burst;
avg_wait += p[max_ratio_index].wait;
avg_turnaround += p[max_ratio_index].turnaround;
printf("Process %d: Wait time=%d, Turnaround time=%d\n", p[max_ratio_index].pid, p[max_ratio_index].wait, p[max_ratio_index].turnaround);
}
printf("Average wait time: %.2f\n", avg_wait / n);
printf("Average turnaround time: %.2f\n", avg_turnaround / n);
free(p);
return 0;
}
```
该实现首先从用户处获取进程的数量和每个进程的到达时间和执行时间。然后,它计算每个进程的等待时间和响应比,选择响应比最高的进程进行执行,直到所有进程都被执行完毕。最后,它计算平均等待时间和平均周转时间,并输出结果。