使用c语言实现高响应比优先算法
时间: 2023-10-04 09:12:42 浏览: 47
高响应比优先(Highest Response Ratio Next,简称HRRN)调度算法是一种动态优先级调度算法,它是基于作业的响应比来选择下一个要执行的作业。响应比是指作业等待时间与作业服务时间之和与作业服务时间之比。响应比越高,说明该作业等待时间越长,应该优先执行。
下面是使用C语言实现HRRN调度算法的代码:
```c
#include<stdio.h>
struct process{
int pid; //进程编号
int arrival; //到达时间
int burst; //服务时间
int wait; //等待时间
int turnaround; //周转时间
float ratio; //响应比
};
int main(){
int n, i, j;
float avgwait = 0, avgturn = 0;
printf("Enter the number of processes: ");
scanf("%d", &n);
struct process p[n], temp;
//输入进程信息
for(i = 0; i < n; i++){
printf("Enter the arrival time and burst time of process %d: ", i+1);
scanf("%d%d", &p[i].arrival, &p[i].burst);
p[i].pid = i+1;
}
//计算等待时间和响应比
for(i = 0; i < n; i++){
p[i].wait = 0;
for(j = 0; j < i; j++){
p[i].wait += p[j].burst;
}
p[i].wait -= p[i].arrival;
if(p[i].wait < 0)
p[i].wait = 0;
p[i].ratio = (float)(p[i].wait + p[i].burst) / (float)p[i].burst;
}
//按响应比排序
for(i = 0; i < n-1; i++){
for(j = 0; j < n-i-1; j++){
if(p[j].ratio < p[j+1].ratio){
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}
//计算周转时间和平均等待时间、周转时间
for(i = 0; i < n; i++){
p[i].turnaround = p[i].wait + p[i].burst;
avgwait += p[i].wait;
avgturn += p[i].turnaround;
}
avgwait /= n;
avgturn /= n;
//输出结果
printf("PID\tArrival\tBurst\tWait\tTurnaround\n");
for(i = 0; i < n; i++){
printf("%d\t%d\t%d\t%d\t%d\n", p[i].pid, p[i].arrival, p[i].burst, p[i].wait, p[i].turnaround);
}
printf("Average Wait Time: %f\n", avgwait);
printf("Average Turnaround Time: %f\n", avgturn);
return 0;
}
```
代码中定义了一个名为process的结构体,用于存储进程的信息。程序首先输入进程的到达时间和服务时间,然后计算出等待时间和响应比。之后按照响应比进行排序,最后计算出周转时间和平均等待时间、周转时间,并输出结果。
需要注意的是,在计算等待时间和响应比时,我们假设第一个进程的到达时间为0。如果实际情况中第一个进程的到达时间不为0,则需要将所有进程的到达时间都减去第一个进程的到达时间。