体现高响应比优先调度算法调度的C语言代码
时间: 2023-08-13 17:10:48 浏览: 94
高响应比优先调度算法是一种非抢占式调度算法,它根据任务等待时间和执行时间的比值来决定下一个要执行的任务。具体实现时,需要记录每个任务的等待时间和执行时间,然后计算出每个任务的响应比,最后选择响应比最高的任务执行。
以下是一个简单的用C语言实现高响应比优先调度算法的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_TASKS 10
struct task {
int id;
int exec_time;
int wait_time;
float response_ratio;
};
int main() {
struct task tasks[MAX_TASKS];
int num_tasks;
int i, j, current_task;
int total_wait_time = 0;
float total_response_ratio = 0.0;
printf("Enter the number of tasks: ");
scanf("%d", &num_tasks);
// 输入每个任务的执行时间
for (i = 0; i < num_tasks; i++) {
tasks[i].id = i + 1;
printf("Enter the execution time for Task %d: ", tasks[i].id);
scanf("%d", &tasks[i].exec_time);
tasks[i].wait_time = 0;
tasks[i].response_ratio = 0.0;
}
// 计算每个任务的响应比
for (i = 0; i < num_tasks; i++) {
tasks[i].response_ratio = 1 + (float)tasks[i].wait_time / tasks[i].exec_time;
}
// 按照响应比排序
for (i = 0; i < num_tasks - 1; i++) {
for (j = i + 1; j < num_tasks; j++) {
if (tasks[i].response_ratio < tasks[j].response_ratio) {
struct task temp = tasks[i];
tasks[i] = tasks[j];
tasks[j] = temp;
}
}
}
// 执行任务
printf("\nExecution order: ");
for (i = 0; i < num_tasks; i++) {
current_task = tasks[i].id;
printf("T%d ", current_task);
tasks[i].wait_time = total_wait_time;
total_wait_time += tasks[i].exec_time;
total_response_ratio += tasks[i].response_ratio;
}
// 输出每个任务的等待时间和平均响应比
printf("\n");
for (i = 0; i < num_tasks; i++) {
printf("Task %d wait time: %d\n", tasks[i].id, tasks[i].wait_time);
}
printf("Average response ratio: %.2f\n", total_response_ratio / num_tasks);
return 0;
}
```
上述代码中,首先输入每个任务的执行时间,然后计算每个任务的响应比,并按照响应比从高到低排序。最后按照排序后的顺序依次执行每个任务,并输出每个任务的等待时间和平均响应比。
阅读全文