体现高响应比算法调度的C语言代码
时间: 2023-12-06 22:44:20 浏览: 102
高响应比算法主要是为了减少长作业在等待CPU时间的过程中造成的平均等待时间增加,因此在实现上需要考虑作业的响应比,即作业等待时间与作业需要运行时间的比值。
以下是一个简单的示例代码,用高响应比算法调度作业:
```c
#include <stdio.h>
struct process {
int id; // 进程ID
int arrival_time; // 到达时间
int burst_time; // 运行时间
int wait_time; // 等待时间
int response_ratio; // 响应比
};
void swap(struct process *a, struct process *b) {
struct process temp = *a;
*a = *b;
*b = temp;
}
int main() {
int n;
printf("请输入进程数:");
scanf("%d", &n);
struct process processes[n];
for (int i = 0; i < n; i++) {
printf("请输入第%d个进程的到达时间和运行时间:", i + 1);
scanf("%d%d", &processes[i].arrival_time, &processes[i].burst_time);
processes[i].id = i + 1;
processes[i].wait_time = 0;
processes[i].response_ratio = 0;
}
// 根据到达时间排序
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (processes[i].arrival_time > processes[j].arrival_time) {
swap(&processes[i], &processes[j]);
}
}
}
int current_time = 0;
int total_wait_time = 0;
printf("\n进程执行顺序:");
for (int i = 0; i < n; i++) {
// 计算响应比
for (int j = 0; j <= i; j++) {
processes[j].response_ratio = (current_time - processes[j].arrival_time + processes[j].burst_time) / processes[j].burst_time;
}
// 找到响应比最高的进程
int max = -1;
int max_index = -1;
for (int j = 0; j <= i; j++) {
if (processes[j].response_ratio > max) {
max = processes[j].response_ratio;
max_index = j;
}
}
// 更新等待时间和当前时间
processes[max_index].wait_time = current_time - processes[max_index].arrival_time;
total_wait_time += processes[max_index].wait_time;
current_time += processes[max_index].burst_time;
// 输出进程执行顺序
printf("P%d ", processes[max_index].id);
// 从数组中删除已执行的进程
for (int j = max_index; j < n - 1; j++) {
processes[j] = processes[j + 1];
}
n--;
i--;
}
printf("\n平均等待时间:%f\n", (float)total_wait_time / (float)n);
return 0;
}
```
以上代码实现了一个简单的高响应比算法调度作业,具体实现过程如下:
1. 输入进程数和每个进程的到达时间和运行时间。
2. 根据到达时间排序,保证进程按照到达时间的顺序执行。
3. 计算每个进程的响应比。
4. 找到响应比最高的进程,更新等待时间和当前时间。
5. 输出进程执行顺序,从数组中删除已执行的进程。
6. 循环执行步骤 3 - 5 直到所有进程都执行完毕。
7. 计算平均等待时间并输出。
需要注意的是,以上代码只是一个简单的示例,实际应用中可能需要考虑更多的情况和细节。
阅读全文