高响应比作业调度c++
时间: 2023-06-29 21:16:38 浏览: 44
以下是一个简单的高响应比作业调度的 C++ 代码实现:
```cpp
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct Job {
int id;
int arrival_time;
int burst_time;
int start_time;
int finish_time;
int remaining_time;
int waiting_time;
double response_ratio; // 响应比
};
bool operator<(const Job& a, const Job& b) {
return a.response_ratio < b.response_ratio;
}
int main() {
int n;
cout << "输入作业数:";
cin >> n;
vector<Job> jobs(n);
for (int i = 0; i < n; i++) {
cout << "输入第 " << i + 1 << " 个作业的到达时间和服务时间:";
cin >> jobs[i].arrival_time >> jobs[i].burst_time;
jobs[i].id = i + 1;
jobs[i].remaining_time = jobs[i].burst_time;
}
int current_time = 0;
int completed_jobs = 0;
priority_queue<Job> q;
while (completed_jobs < n) {
// 将到达时间小于等于当前时间的作业加入队列
for (int i = 0; i < n; i++) {
if (jobs[i].arrival_time <= current_time && jobs[i].remaining_time > 0) {
jobs[i].response_ratio = 1.0 * (current_time - jobs[i].arrival_time + jobs[i].burst_time) / jobs[i].burst_time;
q.push(jobs[i]);
}
}
if (q.empty()) {
current_time++;
continue;
}
Job current_job = q.top();
q.pop();
if (current_job.start_time == 0) {
current_job.start_time = current_time;
}
current_job.remaining_time--;
current_time++;
if (current_job.remaining_time == 0) {
current_job.finish_time = current_time;
current_job.waiting_time = current_job.finish_time - current_job.arrival_time - current_job.burst_time;
completed_jobs++;
}
else {
current_job.response_ratio = 1.0 * (current_time - current_job.arrival_time + current_job.remaining_time) / current_job.remaining_time;
q.push(current_job);
}
}
double total_waiting_time = 0;
double total_turnaround_time = 0;
cout << "作业\t到达时间\t服务时间\t开始时间\t完成时间\t等待时间\t周转时间" << endl;
for (int i = 0; i < n; i++) {
total_waiting_time += jobs[i].waiting_time;
total_turnaround_time += jobs[i].finish_time - jobs[i].arrival_time;
cout << jobs[i].id << "\t" << jobs[i].arrival_time << "\t\t" << jobs[i].burst_time << "\t\t" << jobs[i].start_time << "\t\t" << jobs[i].finish_time << "\t\t" << jobs[i].waiting_time << "\t\t" << jobs[i].finish_time - jobs[i].arrival_time << endl;
}
cout << "平均等待时间:" << total_waiting_time / n << endl;
cout << "平均周转时间:" << total_turnaround_time / n << endl;
return 0;
}
```
该作业调度算法使用优先队列来维护作业的响应比,每次选择响应比最高的作业执行。如果有多个作业的响应比相同,则选择到达时间最早的作业。