用c++写spf的进程调度,输入:进程名 到达时间 服务时间 优先级 输出:进程名 开始时间 完成时间 周转时间 等待时间
时间: 2023-11-14 07:21:35 浏览: 152
操作系统进程调度(先来先服务、短进程调度、优先级调度c++实现)
以下是基于SPF(Shortest Process First)算法的C++进程调度程序。这个程序接受用户的输入,对输入的进程进行调度,并打印出每个进程的开始时间、完成时间、周转时间和等待时间。
```c++
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct process{
string name; // 进程名
int arrive_time; // 到达时间
int service_time; // 服务时间
int priority; // 优先级
};
bool cmp(process a, process b){
return a.arrive_time < b.arrive_time;
}
int main(){
int n; // 进程数
cout << "请输入进程数: ";
cin >> n;
vector<process> p(n);
for(int i = 0; i < n; i++){
cout << "请输入第" << i+1 << "个进程的信息(进程名 到达时间 服务时间 优先级): ";
cin >> p[i].name >> p[i].arrive_time >> p[i].service_time >> p[i].priority;
}
// 按照到达时间排序
sort(p.begin(), p.end(), cmp);
vector<int> finish_time(n); // 完成时间
vector<int> turn_around_time(n); // 周转时间
vector<int> waiting_time(n); // 等待时间
vector<int> visited(n, 0); // 标记进程是否被访问过
int current_time = p[0].arrive_time; // 当前时间
int total_time = 0; // 总时间
int min_service_time, min_index; // 最短服务时间和对应的进程下标
// 循环调度进程
for(int i = 0; i < n; i++){
min_service_time = 1000000; // 初始化最短服务时间
min_index = -1; // 初始化最短服务时间的进程下标
for(int j = 0; j < n; j++){
if(!visited[j] && p[j].arrive_time <= current_time && p[j].service_time < min_service_time){
min_service_time = p[j].service_time;
min_index = j;
}
}
if(min_index == -1){
current_time++;
i--;
continue;
}
visited[min_index] = 1;
finish_time[min_index] = current_time + p[min_index].service_time;
turn_around_time[min_index] = finish_time[min_index] - p[min_index].arrive_time;
waiting_time[min_index] = turn_around_time[min_index] - p[min_index].service_time;
current_time = finish_time[min_index];
total_time += turn_around_time[min_index];
}
// 打印每个进程的开始时间、完成时间、周转时间和等待时间
cout << "进程名\t开始时间\t完成时间\t周转时间\t等待时间\n";
for(int i = 0; i < n; i++){
cout << p[i].name << "\t" << p[i].arrive_time << "\t\t" << finish_time[i] << "\t\t" << turn_around_time[i] << "\t\t" << waiting_time[i] << endl;
}
cout << "平均周转时间: " << total_time / n << endl;
return 0;
}
```
阅读全文