要求采用先来先服务FCFS调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间; 输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等; 要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间,c++代码
时间: 2024-03-07 19:48:01 浏览: 70
好的,以下是使用C++实现FCFS调度算法并计算进程的周转时间、带权周转时间以及平均周转时间和带权平均周转时间的示例代码:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Process {
int id; // 进程ID
int arrivalTime; // 到达时间
int serviceTime; // 服务时间
int priority; // 优先级
int startTime; // 开始时间
int finishTime; // 完成时间
int turnaroundTime; // 周转时间
double weightTurnaroundTime; // 带权周转时间
};
bool cmpArrivalTime(Process a, Process b) {
return a.arrivalTime < b.arrivalTime;
}
bool cmpId(Process a, Process b) {
return a.id < b.id;
}
int main() {
int n; // 进程数
cout << "请输入进程数: ";
cin >> n;
vector<Process> processes(n);
for (int i = 0; i < n; i++) {
processes[i].id = i + 1;
cout << "请输入第" << i + 1 << "个进程的到达时间、服务时间、优先级: ";
cin >> processes[i].arrivalTime >> processes[i].serviceTime >> processes[i].priority;
}
// 按到达时间排序
sort(processes.begin(), processes.end(), cmpArrivalTime);
vector<int> finishTime(n); // 记录每个进程的完成时间
vector<int> isFinished(n); // 记录每个进程是否已完成
int currentTime = 0; // 当前时间
cout << "时刻0:所有进程均未开始运行" << endl;
for (int i = 0; i < n; i++) {
Process& p = processes[i];
if (p.arrivalTime > currentTime) {
currentTime = p.arrivalTime;
}
p.startTime = currentTime;
p.finishTime = currentTime + p.serviceTime;
p.turnaroundTime = p.finishTime - p.arrivalTime;
p.weightTurnaroundTime = (double)p.turnaroundTime / p.serviceTime;
currentTime = p.finishTime;
finishTime[i] = currentTime;
isFinished[i] = 1;
cout << "时刻" << currentTime << ":进程" << p.id << "开始运行" << endl;
}
double totalTurnaroundTime = 0; // 所有进程的周转时间之和
double totalWeightTurnaroundTime = 0; // 所有进程的带权周转时间之和
for (int i = 0; i < n; i++) {
Process p = processes[i];
totalTurnaroundTime += p.turnaroundTime;
totalWeightTurnaroundTime += p.weightTurnaroundTime;
}
double avgTurnaroundTime = totalTurnaroundTime / n; // 平均周转时间
double avgWeightTurnaroundTime = totalWeightTurnaroundTime / n; // 带权平均周转时间
cout << "每个进程的周转时间和带权周转时间如下:" << endl;
sort(processes.begin(), processes.end(), cmpId);
cout << "进程ID" << "\t" << "周转时间" << "\t" << "带权周转时间" << endl;
for (int i = 0; i < n; i++) {
Process p = processes[i];
cout << p.id << "\t" << p.turnaroundTime << "\t" << p.weightTurnaroundTime << endl;
}
cout << "所有进程的平均周转时间为:" << avgTurnaroundTime << endl;
cout << "所有进程的带权平均周转时间为:" << avgWeightTurnaroundTime << endl;
return 0;
}
```
请根据您的需求进行修改。
阅读全文