用c++实现fcfs算法,输入进程数量,到达时刻,服务时间,开始执行的时刻,完成时刻,计算出各自的周转时间和带权周转时间
时间: 2024-10-18 18:13:34 浏览: 121
FCFS(First-Come, First-Served,先到先服务)算法是一种简单的进程调度策略,用于确定进程的运行顺序。在C++中实现这个算法,你需要创建一个数据结构来存储进程信息,并按照它们的到达时刻对进程进行排序。
以下是一个简单的步骤:
1. 定义一个进程类(Process),包含成员变量如pid(进程ID)、arrival_time(到达时刻)、service_time(服务时间)等。
```cpp
class Process {
public:
int pid;
int arrival_time;
int service_time;
int start_time; // 开始执行的时间,默认为到达时刻
int completion_time; // 结束执行的时间
// 构造函数和获取方法省略...
};
```
2. 创建一个vector来存储进程列表,然后按到达时刻排序。
```cpp
std::vector<Process> processes;
// 添加进程实例并保持到达时刻递增排序
```
3. 实现FCFS算法的核心部分,遍历进程列表,给每个进程分配CPU,更新开始时间和完成时间。
```cpp
void fcfs() {
for (auto& process : processes) {
if (process.start_time == 0) { // 初始状态(未启动)
process.start_time = process.arrival_time;
}
process.completion_time = process.start_time + process.service_time;
// 如果所有进程都已处理完,跳出循环
if (process.completion_time > last_completion_time) break;
last_completion_time = std::max(last_completion_time, process.completion_time);
}
}
```
4. 计算周转时间和带权周转时间。周转时间是从到达时间到完成时间。带权周转时间则是考虑了服务时间后的平均等待时间,可以用一个辅助数组或map来保存每个进程的等待时间。
```cpp
double calculateTurnaroundTime() {
double turnaround_sum = 0;
for (const auto& process : processes) {
turnaround_sum += process.completion_time - process.arrival_time;
}
return turnaround_sum / processes.size();
}
double calculateWeightedTurnaroundTime() {
double wait_times[processes.size()];
for (size_t i = 0; i < processes.size(); ++i) {
wait_times[i] = process.completion_time - process.arrival_time - process.service_time;
}
double weighted_sum = 0;
for (int time : wait_times) {
weighted_sum += time * process.service_time;
}
return weighted_sum / processes.size();
}
```
阅读全文