用c++实现最高响应比优先调度算法的函数
时间: 2024-03-25 17:18:21 浏览: 134
以下是用 C++ 实现最高响应比优先调度算法的函数的示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Process {
int pid; // 进程标识符
int arrival; // 到达时间
int burst; // 执行时间
int response; // 响应时间
int waiting; // 等待时间
int turnaround; // 周转时间
};
bool cmp(Process a, Process b) {
return a.arrival < b.arrival;
}
void HRRN(vector<Process>& processes) {
int n = processes.size();
sort(processes.begin(), processes.end(), cmp);
int current_time = 0;
int completed = 0;
while (completed < n) {
int idx = -1;
double max_ratio = -1.0;
for (int i = 0; i < n; i++) {
if (processes[i].arrival <= current_time && processes[i].burst > 0) {
double ratio = (current_time - processes[i].arrival + processes[i].burst) / (double)processes[i].burst;
if (ratio > max_ratio) {
max_ratio = ratio;
idx = i;
}
}
}
if (idx == -1) {
current_time++;
continue;
}
processes[idx].response = current_time - processes[idx].arrival;
processes[idx].burst--;
current_time++;
if (processes[idx].burst == 0) {
processes[idx].turnaround = current_time - processes[idx].arrival;
processes[idx].waiting = processes[idx].turnaround - processes[idx].response;
completed++;
}
}
}
int main() {
vector<Process> processes = {
{1, 0, 5, 0, 0, 0},
{2, 1, 3, 0, 0, 0},
{3, 2, 8, 0, 0, 0},
{4, 3, 6, 0, 0, 0},
{5, 4, 4, 0, 0, 0}
};
HRRN(processes);
cout << "PID\tArrival\tBurst\tResponse\tWaiting\tTurnaround\n";
for (auto p : processes) {
cout << p.pid << "\t" << p.arrival << "\t" << p.burst << "\t";
cout << p.response << "\t\t" << p.waiting << "\t" << p.turnaround << endl;
}
return 0;
}
```
该函数使用 `vector` 存储进程信息,其中 `cmp` 函数用于按到达时间对进程进行排序。`HRRN` 函数实现了最高响应比优先调度算法,它首先将进程按到达时间排序,然后在每个时间步中选择响应比最高的进程进行执行,直到所有进程完成执行。
该函数遍历所有就绪进程,计算它们的响应比,并选择响应比最高的进程进行执行。如果没有找到就绪进程,则当前时间加一。当一个进程完成执行时,计算它的周转时间、等待时间和响应时间,并将已完成进程数加一。
最后,输出每个进程的进程标识符、到达时间、执行时间、响应时间、等待时间和周转时间。
阅读全文