高响应比调度算法 代码
时间: 2023-11-08 18:06:10 浏览: 36
以下是一个简单的高响应比调度算法的代码示例,使用C语言编写:
```c
#include <stdio.h>
#define MAX_PROCESS 10
// 进程结构体
typedef struct {
int pid; // 进程ID
int burst_time; // 执行时间
int arrival_time; // 到达时间
int waiting_time; // 等待时间
int turnaround_time; // 周转时间
int response_ratio; // 响应比
int executed; // 已执行的时间
} Process;
// 计算等待时间、周转时间和响应比
void calculate(Process *processes, int n) {
int total_waiting_time = 0, total_turnaround_time = 0;
for (int i = 0; i < n; i++) {
processes[i].turnaround_time = processes[i].burst_time + processes[i].waiting_time;
total_waiting_time += processes[i].waiting_time;
total_turnaround_time += processes[i].turnaround_time;
processes[i].response_ratio = (processes[i].burst_time + processes[i].waiting_time) / processes[i].burst_time;
}
printf("\nAverage waiting time: %.2f", (float) total_waiting_time / (float) n);
printf("\nAverage turnaround time: %.2f\n", (float) total_turnaround_time / (float) n);
}
// 高响应比调度算法
void hrrn(Process *processes, int n) {
int time = 0, completed = 0;
while (completed != n) {
int highest_response_ratio = -1, selected_process = -1;
for (int i = 0; i < n; i++) {
if (processes[i].arrival_time <= time && processes[i].executed < processes[i].burst_time) {
processes[i].waiting_time = time - processes[i].arrival_time;
processes[i].response_ratio = (processes[i].burst_time + processes[i].waiting_time) / processes[i].burst_time;
if (processes[i].response_ratio > highest_response_ratio) {
highest_response_ratio = processes[i].response_ratio;
selected_process = i;
}
}
}
if (selected_process == -1) {
time++;
continue;
}
processes[selected_process].executed++;
time++;
if (processes[selected_process].executed == processes[selected_process].burst_time) {
completed++;
}
}
calculate(processes, n);
}
int main() {
Process processes[MAX_PROCESS];
int n;
printf("Enter the number of processes: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("Enter burst time and arrival time of process %d: ", i + 1);
scanf("%d %d", &processes[i].burst_time, &processes[i].arrival_time);
processes[i].pid = i + 1;
processes[i].executed = 0;
}
hrrn(processes, n);
return 0;
}
```
该算法首先计算每个进程的响应比,然后选择响应比最高的进程来执行。如果有多个进程的响应比相同,则选择最早到达的进程。在执行过程中,等待时间和已执行时间也会被计算,最终计算出平均等待时间和平均周转时间。