21xrx.com
2025-04-12 06:05:41 Saturday
文章检索 我的文章 写文章
C++实现FCFS作业调度算法
2023-06-29 04:18:42 深夜i     8     0
C++ FCFS 作业调度 算法实现 先来先服务

在计算机操作系统中,作业调度算法负责对系统中的任务进行排序,以便按照一定策略进行分配计算机资源。其中,FCFS(First-Come, First-Served)是最简单的作业调度算法之一,也是最常见的一种算法。下面将介绍如何使用 C++ 实现 FCFS 作业调度算法。

首先,我们需要定义一个结构体来表示作业信息。结构体需要包括作业 ID、到达时间和需要的 CPU 时间。定义如下:

struct Job
  int jobID;       // 作业 ID
  int arrivalTime;    // 到达时间
  int cpuTime;      // 需要 CPU 时间
;

接下来,我们可以使用一个数组来存储所有的作业信息。假设我们有五个作业,定义如下:

Job jobs[] = {
   8,
   4,
  3,
   3,
  5
};

然后,我们需要实现 FCFS 算法。其核心思想是按照作业的到达时间排序,然后依次执行每个作业。实现如下:

void fcfs(Job jobs[], int n) {
  // 按照到达时间排序
  sort(jobs, jobs + n, [](Job a, Job b)
    return a.arrivalTime < b.arrivalTime;
  );
  int currentTime = 0;  // 当前时间
  for (int i = 0; i < n; i++) {
    // 当前时间小于到达时间,等待作业到达
    if (currentTime < jobs[i].arrivalTime) {
      currentTime = jobs[i].arrivalTime;
    }
    // 执行作业
    cout << "作业 " << jobs[i].jobID << " 开始运行,时间 "
       << currentTime << ",需要 CPU 时间 " << jobs[i].cpuTime << endl;
    currentTime += jobs[i].cpuTime; // 更新当前时间
    cout << "作业 " << jobs[i].jobID << " 结束运行,时间 " << currentTime << endl;
  }
}

最后,在 main 函数中调用 fcfs 函数即可。完整代码如下:

#include <iostream>
#include <algorithm>
using namespace std;
struct Job
  int jobID;       // 作业 ID
  int arrivalTime;    // 到达时间
  int cpuTime;      // 需要 CPU 时间
;
void fcfs(Job jobs[], int n) {
  // 按照到达时间排序
  sort(jobs, jobs + n, [](Job a, Job b)
    return a.arrivalTime < b.arrivalTime;
  );
  int currentTime = 0;  // 当前时间
  for (int i = 0; i < n; i++) {
    // 当前时间小于到达时间,等待作业到达
    if (currentTime < jobs[i].arrivalTime) {
      currentTime = jobs[i].arrivalTime;
    }
    // 执行作业
    cout << "作业 " << jobs[i].jobID << " 开始运行,时间 "
       << currentTime << ",需要 CPU 时间 " << jobs[i].cpuTime << endl;
    currentTime += jobs[i].cpuTime; // 更新当前时间
    cout << "作业 " << jobs[i].jobID << " 结束运行,时间 " << currentTime << endl;
  }
}
int main() {
  Job jobs[] = {
     0,
     1,
    3,
    4,
     2
  };
  int n = 5;
  fcfs(jobs, n);
  return 0;
}

运行程序可以得到如下输出:

作业 1 开始运行,时间 0,需要 CPU 时间 8
作业 1 结束运行,时间 8
作业 2 开始运行,时间 8,需要 CPU 时间 4
作业 2 结束运行,时间 12
作业 3 开始运行,时间 12,需要 CPU 时间 9
作业 3 结束运行,时间 21
作业 4 开始运行,时间 21,需要 CPU 时间 5
作业 4 结束运行,时间 26
作业 5 开始运行,时间 26,需要 CPU 时间 2
作业 5 结束运行,时间 28

可以看到,按照 FCFS 算法排序后,作业按照到达时间依次执行。使用 C++ 实现 FCFS 算法非常简单,只需要按照上述步骤即可。

  
  

评论区

请求出错了