c语言实现响应比高者优先算法
时间: 2023-07-26 20:33:13 浏览: 123
响应比高者优先算法是一种动态优先级调度算法,它根据作业的等待时间和服务时间来计算响应比,响应比高者优先被调度。下面是使用C语言实现响应比高者优先算法的示例代码:
```c
#include <stdio.h>
struct Process {
int pid; // 进程号
int at; // 到达时间
int bt; // 执行时间
int wt; // 等待时间
int tt; // 周转时间
int rb; // 剩余执行时间
float rr; // 响应比
};
// 计算响应比
float calcResponseRatio(struct Process p, int time) {
return (float)(time - p.at + p.bt) / p.bt;
}
int main() {
int n, i, j;
float totalWt = 0, totalTt = 0;
struct Process p[100], temp;
printf("输入进程数: ");
scanf("%d", &n);
// 输入每个进程的信息
for (i = 0; i < n; i++) {
printf("进程 %d 到达时间和执行时间: ", i + 1);
scanf("%d%d", &p[i].at, &p[i].bt);
p[i].pid = i + 1;
p[i].rb = p[i].bt; // 剩余执行时间初始化为执行时间
p[i].wt = p[i].tt = 0;
p[i].rr = -1; // 响应比初始化为-1
}
// 计算每个进程的响应比
int time = p[0].at;
for (i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (p[j].at <= time && p[j].rr == -1) {
p[j].rr = calcResponseRatio(p[j], time);
}
}
// 找出响应比最大的进程
int max = i;
for (j = i + 1; j < n; j++) {
if (p[j].rr > p[max].rr) {
max = j;
}
}
// 执行该进程
p[max].wt = time - p[max].at; // 计算等待时间
p[max].tt = p[max].wt + p[max].bt; // 计算周转时间
totalWt += p[max].wt; // 累加等待时间
totalTt += p[max].tt; // 累加周转时间
time += p[max].bt; // 更新时间
p[max].rr = -1; // 响应比重置为-1
}
// 输出每个进程的信息
printf("进程号 到达时间 执行时间 等待时间 周转时间\n");
for (i = 0; i < n; i++) {
printf("%-8d %-8d %-8d %-8d %-8d\n", p[i].pid, p[i].at,
p[i].bt, p[i].wt, p[i].tt);
}
// 输出平均等待时间和平均周转时间
printf("平均等待时间: %.2f\n", totalWt / n);
printf("平均周转时间: %.2f\n", totalTt / n);
return 0;
}
```
该程序先输入进程数和每个进程的到达时间和执行时间,然后计算每个进程的响应比并按响应比从高到低排序,依次执行每个进程并计算等待时间和周转时间,最后输出每个进程的信息以及平均等待时间和平均周转时间。
阅读全文