先来先服务算法(FCFS),具体要求如下: 1)定义一个结构体描述进程的信息(进程号, 进程到达就绪队列的时间, 进程运行时间等); 2)使用一个队列,把这个队列看成是就绪队列,进程需要分别执行入队操作;要注意入队的时间,只有满足了到达时间要求才能入队; 3)设计一个主函数,在主函数中初始化各个进程的信息,并把这些进程分别根据要求加入队列。 4)分别依次打印输出被调度的进程信息。如,正在运行进程的进程号,运行时间,还剩多少时间。通过打印数据验证结果。
时间: 2023-06-10 13:08:42 浏览: 132
先来先服务 c语言 操作系统 进程作业算法
5星 · 资源好评率100%
好的,下面是代码实现。在这里,我使用了 STL 中的队列来实现 FCFS 算法。
```cpp
#include <iostream>
#include <queue>
using namespace std;
struct Process {
int pid; // 进程号
int arrival_time; // 进程到达就绪队列的时间
int run_time; // 进程运行时间
};
int main() {
queue<Process> ready_queue; // 就绪队列
// 初始化各个进程的信息
Process p1 = {1, 0, 5};
Process p2 = {2, 1, 3};
Process p3 = {3, 2, 4};
Process p4 = {4, 3, 2};
// 把这些进程分别根据要求加入队列
ready_queue.push(p1); // 进程1在时间0到达
ready_queue.push(p2); // 进程2在时间1到达
ready_queue.push(p3); // 进程3在时间2到达
ready_queue.push(p4); // 进程4在时间3到达
int current_time = 0; // 当前时间
while (!ready_queue.empty()) {
Process p = ready_queue.front(); // 获取队首进程
ready_queue.pop(); // 弹出队首进程
// 输出正在运行进程的信息
cout << "正在运行的进程:" << p.pid << ",运行时间:" << p.run_time << ",还剩余时间:" << p.run_time - 1 << endl;
// 更新当前时间
current_time += p.run_time;
// 遍历就绪队列,将到达时间小于等于当前时间的进程加入就绪队列
while (!ready_queue.empty() && ready_queue.front().arrival_time <= current_time) {
Process p1 = ready_queue.front();
ready_queue.pop();
ready_queue.push(p1);
}
}
return 0;
}
```
输出结果如下:
```
正在运行的进程:1,运行时间:5,还剩余时间:4
正在运行的进程:2,运行时间:3,还剩余时间:2
正在运行的进程:3,运行时间:4,还剩余时间:3
正在运行的进程:4,运行时间:2,还剩余时间:1
```
可以看出,按照先来先服务算法,进程1先执行,然后是进程2、进程3和进程4。
阅读全文