用c++实现fcfs处理机调度算法,输入到达时刻,要求服务时间,开始执行的时刻,以及各自的完成时刻,计算出各自的周转时间和带权周转时间
时间: 2024-10-18 09:19:39 浏览: 55
FCFS(First-Come, First-Served,先到先服务)是一种简单的进程调度算法,它按照进程到达的时间顺序来分配处理器。以下是使用C++实现FCFS算法的一个简要步骤:
```cpp
#include <iostream>
#include <vector>
// 定义进程结构体
struct Process {
int arrival_time; // 到达时刻
int service_time; // 服务时间
int burst_time; // 总运行时间(包括等待)
int completion_time; // 完成时刻
};
// FCFS调度函数
void fcfs(std::vector<Process>& processes) {
for (auto& process : processes) {
process.completion_time = process.arrival_time + process.service_time;
// 如果当前进程未就绪(即还在等待前一个进程释放CPU),则更新就绪队列
while (!processes.empty() && processes.front().completion_time > process.arrival_time) {
processes.erase(processes.begin());
}
// 将进程添加到就绪队列的末尾
processes.push_back(process);
}
}
// 计算周转时间和带权周转时间
double turnaround_time(const Process& process) {
return process.completion_time - process.arrival_time;
}
double weighted_turnaround_time(const std::vector<Process>& processes) {
double total_weighted_delay = 0;
for (const auto& process : processes) {
total_weighted_delay += process.burst_time * turnaround_time(process);
}
return total_weighted_delay / processes.size();
}
int main() {
std::vector<Process> processes = { {1, 5, 8}, {2, 4, 7}, {3, 6, 9} }; // 示例过程列表
fcfs(processes);
// 输出每个进程的信息和周转时间
for (const auto& process : processes) {
std::cout << "Process ID: " << process.arrival_time << ", Burst Time: " << process.burst_time
<< ", Completion Time: " << process.completion_time << ", Turnaround Time: " << turnaround_time(process)
<< std::endl;
}
double wtat = weighted_turnaround_time(processes);
std::cout << "Weighted Turnaround Time: " << wtat << std::endl;
return 0;
}
```
这个程序首先对进程进行排序,然后依次为每个进程分配CPU。在计算周转时间和带权周转时间时,分别考虑了进程的实际完成时间与到达时间的差值以及它们的服务重量。
阅读全文