采用先来先服务FCFS调度进程运行,计算每个进程的周转时间,带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间; 要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程B开始运行”等等; 要求输出计算出来的每个进程的周转时间,带权周转时间,所有进程的平均周转时间,带权平均周转时间,c++代码
时间: 2024-03-07 13:48:22 浏览: 51
好的,我会帮您回答这个问题。下面是一个 C++ 实现的 FCFS 调度算法模拟,包括输出每个时刻的进程运行状态、计算每个进程的周转时间、带权周转时间,并且计算所有进程的平均周转时间,带权平均周转时间。
```
#include <iostream>
#include <vector>
using namespace std;
struct Process {
int pid; // 进程 ID
int arrive_time; // 到达时间
int burst_time; // 执行时间
int start_time; // 开始时间
int finish_time; // 结束时间
int turnaround_time; // 周转时间
float weighted_turnaround_time; // 带权周转时间
};
vector<Process> processes;
// 根据到达时间排序
bool cmp(Process a, Process b) {
return a.arrive_time < b.arrive_time;
}
void fcfs() {
int n = processes.size();
int current_time = 0; // 当前时间
float total_turnaround_time = 0; // 总周转时间
float total_weighted_turnaround_time = 0; // 总带权周转时间
// 按照到达时间排序
sort(processes.begin(), processes.end(), cmp);
cout << "时刻0:系统开始运行" << endl;
for (int i = 0; i < n; i++) {
// 进程到达时间在当前时间之后,需要等待
if (processes[i].arrive_time > current_time) {
cout << "时刻" << current_time << ":CPU空闲" << endl;
current_time = processes[i].arrive_time;
cout << "时刻" << current_time << ":进程" << processes[i].pid << "开始运行" << endl;
processes[i].start_time = current_time;
processes[i].finish_time = current_time + processes[i].burst_time;
current_time = processes[i].finish_time;
}
// 进程到达时间在当前时间之前,直接运行
else {
cout << "时刻" << current_time << ":进程" << processes[i].pid << "开始运行" << endl;
processes[i].start_time = current_time;
processes[i].finish_time = current_time + processes[i].burst_time;
current_time = processes[i].finish_time;
}
processes[i].turnaround_time = processes[i].finish_time - processes[i].arrive_time; // 计算周转时间
total_turnaround_time += processes[i].turnaround_time;
processes[i].weighted_turnaround_time = (float) processes[i].turnaround_time / processes[i].burst_time; // 计算带权周转时间
total_weighted_turnaround_time += processes[i].weighted_turnaround_time;
cout << "时刻" << current_time << ":进程" << processes[i].pid << "运行结束" << endl;
}
float avg_turnaround_time = total_turnaround_time / n; // 平均周转时间
float avg_weighted_turnaround_time = total_weighted_turnaround_time / n; // 平均带权周转时间
// 输出结果
cout << "进程\t到达时间\t执行时间\t开始时间\t结束时间\t周转时间\t带权周转时间" << endl;
for (int i = 0; i < n; i++) {
cout << processes[i].pid << "\t" << processes[i].arrive_time << "\t\t" << processes[i].burst_time << "\t\t"
<< processes[i].start_time << "\t\t" << processes[i].finish_time << "\t\t" << processes[i].turnaround_time
<< "\t\t" << processes[i].weighted_turnaround_time << endl;
}
cout << "平均周转时间:" << avg_turnaround_time << endl;
cout << "平均带权周转时间:" << avg_weighted_turnaround_time << endl;
}
int main() {
// 输入进程信息
int n;
cout << "请输入进程数量:" << endl;
cin >> n;
for (int i = 0; i < n; i++) {
Process process;
process.pid = i + 1;
cout << "请输入进程" << process.pid << "的到达时间和执行时间:" << endl;
cin >> process.arrive_time >> process.burst_time;
processes.push_back(process);
}
// 执行 FCFS 调度算法
fcfs();
return 0;
}
```
希望这个代码可以帮到您,如果有任何问题请随时提出。
阅读全文