高响应比优先(HRRN),输出各个进程的完成时间、周转时间,使用C语言编写
时间: 2024-02-11 22:06:00 浏览: 17
以下是使用 C 语言编写 HRRN 调度算法并输出各个进程的完成时间和周转时间的示例代码:
```c
#include <stdio.h>
// 定义作业结构体
struct job {
int id; // 作业编号
int arrival_time; // 到达时间
int service_time; // 服务时间
int wait_time; // 等待时间
int finish_time; // 完成时间
int turnaround_time; // 周转时间
float response_ratio; // 响应比
};
int main() {
int n; // 作业数
struct job jobs[100]; // 最多支持 100 个作业
int i, j;
printf("请输入作业数:");
scanf("%d", &n);
// 输入作业信息
for (i = 0; i < n; i++) {
printf("请输入第 %d 个作业的到达时间和服务时间:", i + 1);
scanf("%d %d", &jobs[i].arrival_time, &jobs[i].service_time);
jobs[i].id = i + 1;
jobs[i].wait_time = 0;
jobs[i].finish_time = 0;
jobs[i].turnaround_time = 0;
jobs[i].response_ratio = 0;
}
// 计算响应比
int current_time = 0;
for (i = 0; i < n; i++) {
current_time += jobs[i].service_time;
jobs[i].wait_time = current_time - jobs[i].arrival_time - jobs[i].service_time;
jobs[i].response_ratio = (float) (jobs[i].wait_time + jobs[i].service_time) / jobs[i].service_time;
}
// 按照响应比排序
struct job tmp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (jobs[j].response_ratio < jobs[j + 1].response_ratio) {
tmp = jobs[j];
jobs[j] = jobs[j + 1];
jobs[j + 1] = tmp;
}
}
}
// 计算完成时间和周转时间
current_time = jobs[0].arrival_time;
for (i = 0; i < n; i++) {
jobs[i].finish_time = current_time + jobs[i].service_time;
jobs[i].turnaround_time = jobs[i].finish_time - jobs[i].arrival_time;
current_time = jobs[i].finish_time;
}
// 输出作业执行顺序、等待时间、完成时间和周转时间
printf("作业执行顺序:\n");
for (i = 0; i < n; i++) {
printf("作业 %d\n", jobs[i].id);
printf("等待时间:%d\n", jobs[i].wait_time);
printf("完成时间:%d\n", jobs[i].finish_time);
printf("周转时间:%d\n", jobs[i].turnaround_time);
}
return 0;
}
```
在这个示例代码中,我们在原有的 HRRN 调度算法基础上,增加了计算完成时间和周转时间的逻辑。最后输出作业的执行顺序、等待时间、完成时间和周转时间。