用c++实现最高响应比优先调度算法
时间: 2023-11-05 11:01:52 浏览: 188
最高响应比优先调度算法是一种动态优先级调度算法,它根据进程的等待时间和服务时间计算出每个进程的响应比,然后选择响应比最高的进程进行调度。以下是C++实现最高响应比优先调度算法的示例代码:
```c++
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
struct Process {
int pid; // 进程ID
int arrivalTime; // 到达时间
int burstTime; // 执行时间
int waitingTime; // 等待时间
int turnaroundTime; // 周转时间
int responseRatio; // 响应比
int finishTime; // 完成时间
};
void HRRN(Process *pro, int n) {
int currentTime = 0;
int sumWaitingTime = 0;
int sumTurnaroundTime = 0;
int sumResponseRatio = 0;
// 计算每个进程的响应比
for (int i = 0; i < n; i++) {
pro[i].responseRatio = (pro[i].waitingTime + pro[i].burstTime) / pro[i].burstTime;
}
// 按照响应比从大到小排序
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (pro[i].responseRatio < pro[j].responseRatio) {
swap(pro[i], pro[j]);
}
}
}
// 执行进程调度
for (int i = 0; i < n; i++) {
if (currentTime < pro[i].arrivalTime) {
currentTime = pro[i].arrivalTime;
}
pro[i].waitingTime = currentTime - pro[i].arrivalTime;
pro[i].turnaroundTime = pro[i].waitingTime + pro[i].burstTime;
pro[i].finishTime = currentTime + pro[i].burstTime;
sumWaitingTime += pro[i].waitingTime;
sumTurnaroundTime += pro[i].turnaroundTime;
sumResponseRatio += pro[i].responseRatio;
currentTime = pro[i].finishTime;
}
// 输出结果
cout << "进程ID\t到达时间\t执行时间\t完成时间\t等待时间\t周转时间\t响应比" << endl;
for (int i = 0; i < n; i++) {
cout << pro[i].pid << "\t" << pro[i].arrivalTime << "\t\t" << pro[i].burstTime << "\t\t" << pro[i].finishTime << "\t\t" << pro[i].waitingTime << "\t\t" << pro[i].turnaroundTime << "\t\t" << pro[i].responseRatio << endl;
}
cout << endl;
cout << "平均等待时间:" << (double)sumWaitingTime / n << endl;
cout << "平均周转时间:" << (double)sumTurnaroundTime / n << endl;
cout << "平均响应比:" << (double)sumResponseRatio / n << endl;
}
int main() {
int n;
cout << "请输入进程数量:";
cin >> n;
Process *pro = new Process[n];
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个进程的到达时间和执行时间:";
cin >> pro[i].arrivalTime >> pro[i].burstTime;
pro[i].pid = i + 1;
}
HRRN(pro, n);
delete[] pro;
return 0;
}
```
在该示例代码中,我们首先定义了一个进程结构体,包含进程ID、到达时间、执行时间、等待时间、周转时间、响应比和完成时间等信息。然后,我们实现了最高响应比优先调度算法的主要逻辑,首先计算每个进程的响应比,然后按照响应比从大到小排序,最后执行进程调度并输出结果。
阅读全文