用c++写HPF的进程调度,输入:进程名 到达时间 服务时间 优先级 输出:进程名 开始时间 完成时间 周转时间 等待时间(不抢占)
时间: 2023-11-14 17:08:26 浏览: 96
操作系统中,进程调度,C++语言实现
以下是用 C++ 写的 HPF 进程调度的程序,可以满足你的需求:
```cpp
#include<iostream>
#include<algorithm>
using namespace std;
struct Process {
string name; // 进程名
int arrive_time; // 到达时间
int service_time; // 服务时间
int priority; // 优先级
int start_time; // 开始时间
int finish_time;// 完成时间
int turnaround_time; // 周转时间
int waiting_time; // 等待时间
};
bool cmp(Process a, Process b) {
return a.priority < b.priority;
}
int main() {
int n;
cout << "请输入进程数量:";
cin >> n;
Process p[n];
int sum_service_time = 0;
for(int i = 0; i < n; i++) {
cout << "请输入第 " << i+1 << " 个进程的信息:\n";
cout << "进程名:";
cin >> p[i].name;
cout << "到达时间:";
cin >> p[i].arrive_time;
cout << "服务时间:";
cin >> p[i].service_time;
cout << "优先级:";
cin >> p[i].priority;
sum_service_time += p[i].service_time;
}
// 按照优先级排序
sort(p, p+n, cmp);
int clock = p[0].arrive_time; // 计时器
for(int i = 0; i < n; i++) {
// 如果当前时间小于进程的到达时间,则更新计时器
if(clock < p[i].arrive_time) {
clock = p[i].arrive_time;
}
// 记录进程开始时间
p[i].start_time = clock;
// 更新计时器和完成时间
clock += p[i].service_time;
p[i].finish_time = clock;
// 计算周转时间和等待时间
p[i].turnaround_time = p[i].finish_time - p[i].arrive_time;
p[i].waiting_time = p[i].turnaround_time - p[i].service_time;
}
// 输出结果
cout << "进程名\t开始时间\t完成时间\t周转时间\t等待时间\n";
for(int i = 0; i < n; i++) {
cout << p[i].name << "\t" << p[i].start_time << "\t\t" << p[i].finish_time << "\t\t" << p[i].turnaround_time << "\t\t" << p[i].waiting_time << endl;
}
// 计算平均周转时间和平均等待时间
float avg_turnaround_time = 0, avg_waiting_time = 0;
for(int i = 0; i < n; i++) {
avg_turnaround_time += p[i].turnaround_time;
avg_waiting_time += p[i].waiting_time;
}
avg_turnaround_time /= n;
avg_waiting_time /= n;
cout << "平均周转时间:" << avg_turnaround_time << endl;
cout << "平均等待时间:" << avg_waiting_time << endl;
return 0;
}
```
程序先读入进程的数量和每个进程的信息,然后按照优先级排序,依次计算每个进程的开始时间、完成时间、周转时间和等待时间,并输出这些结果。最后计算平均周转时间和平均等待时间并输出。
阅读全文