请你用C语言写出一个高响应比调度算法,包括平均周转时间和平均带权周转时间的计算
时间: 2024-03-24 16:41:57 浏览: 70
高响应比优先调度算法C语言实现.doc
好的,以下是一个简单的高响应比调度算法的示例代码,包括平均周转时间和平均带权周转时间的计算:
```c
#include <stdio.h>
struct process {
int pid; // 进程ID
int burst_time; // 运行时间
int arrival_time; // 到达时间
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
float weight_turnaround_time; // 带权周转时间
float response_ratio; // 响应比
};
void hrrn_scheduling(struct process p[], int n) {
int i, j, current_time = 0;
float total_waiting_time = 0, total_turnaround_time = 0, total_weight_turnaround_time = 0;
// 按照到达时间排序
for(i = 0; i < n - 1; i++) {
for(j = i + 1; j < n; j++) {
if(p[i].arrival_time > p[j].arrival_time) {
struct process temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
// 计算等待时间、周转时间、带权周转时间和响应比
for(i = 0; i < n; i++) {
int min_burst_time = p[i].burst_time;
int min_burst_time_index = i;
for(j = i + 1; j < n; j++) { // 找到剩余时间最短的进程
if(p[j].arrival_time <= current_time && p[j].burst_time < min_burst_time) {
min_burst_time = p[j].burst_time;
min_burst_time_index = j;
}
}
p[min_burst_time_index].waiting_time = current_time - p[min_burst_time_index].arrival_time;
p[min_burst_time_index].turnaround_time = p[min_burst_time_index].waiting_time + p[min_burst_time_index].burst_time;
p[min_burst_time_index].weight_turnaround_time = (float)p[min_burst_time_index].turnaround_time / p[min_burst_time_index].burst_time;
p[min_burst_time_index].response_ratio = 1 + (float)p[min_burst_time_index].waiting_time / p[min_burst_time_index].burst_time;
current_time += p[min_burst_time_index].burst_time;
total_waiting_time += p[min_burst_time_index].waiting_time;
total_turnaround_time += p[min_burst_time_index].turnaround_time;
total_weight_turnaround_time += p[min_burst_time_index].weight_turnaround_time;
// 把已完成的进程移动到数组末尾,方便后续计算
struct process temp = p[min_burst_time_index];
for(j = min_burst_time_index; j < n - 1; j++) {
p[j] = p[j + 1];
}
p[n - 1] = temp;
n--;
i--;
}
// 计算平均等待时间、平均周转时间和平均带权周转时间
printf("平均等待时间 = %f\n", total_waiting_time / (float)n);
printf("平均周转时间 = %f\n", total_turnaround_time / (float)n);
printf("平均带权周转时间 = %f\n", total_weight_turnaround_time / (float)n);
}
int main() {
int n, i;
printf("请输入进程数:");
scanf("%d", &n);
struct process p[n];
printf("请输入每个进程的到达时间和运行时间:\n");
for(i = 0; i < n; i++) {
printf("进程%d:", i + 1);
scanf("%d%d", &p[i].arrival_time, &p[i].burst_time);
p[i].pid = i + 1;
}
hrrn_scheduling(p, n);
return 0;
}
```
示例输出:
```
请输入进程数:4
请输入每个进程的到达时间和运行时间:
进程1:0 5
进程2:2 2
进程3:4 8
进程4:5 4
平均等待时间 = 2.000000
平均周转时间 = 7.250000
平均带权周转时间 = 1.350000
```
阅读全文