用c++写spf的进程调度,输入:进程名 到达时间 服务时间 优先级 输出:进程名 开始时间 完成时间 周转时间 等待时间(不抢占)
时间: 2023-11-14 07:13:57 浏览: 38
以下是一个简单的用C++实现SPF(最短进程优先)的进程调度程序,仅供参考:
```c++
#include <iostream>
#include <vector>
#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.arrive_time < b.arrive_time; // 按到达时间升序排序
}
int main() {
int n;
cout << "请输入进程数:";
cin >> n;
vector<Process> processes(n);
cout << "请按进程到达时间、服务时间、优先级的顺序输入进程信息:" << endl;
for (int i = 0; i < n; i++) {
cin >> processes[i].name >> processes[i].arrive_time >> processes[i].service_time >> processes[i].priority;
}
sort(processes.begin(), processes.end(), cmp); // 排序
int current_time = 0;
for (int i = 0; i < n; i++) {
current_time = max(current_time, processes[i].arrive_time); // 更新当前时间
processes[i].start_time = current_time; // 记录开始时间
processes[i].finish_time = current_time + processes[i].service_time; // 计算完成时间
processes[i].turnaround_time = processes[i].finish_time - processes[i].arrive_time; // 计算周转时间
processes[i].waiting_time = processes[i].turnaround_time - processes[i].service_time; // 计算等待时间
current_time = processes[i].finish_time; // 更新当前时间
}
// 输出结果
cout << "进程名\t开始时间\t完成时间\t周转时间\t等待时间" << endl;
for (int i = 0; i < n; i++) {
cout << processes[i].name << "\t" << processes[i].start_time << "\t\t" << processes[i].finish_time << "\t\t" << processes[i].turnaround_time << "\t\t" << processes[i].waiting_time << endl;
}
return 0;
}
```
以上程序实现了SPF的进程调度,根据输入的进程信息,按照到达时间升序排序,依次计算开始时间、完成时间、周转时间和等待时间,并输出结果。