21xrx.com
2024-11-05 17:23:16 Tuesday
登录
文章检索 我的文章 写文章
C++实现FCFS作业调度算法
2023-06-29 04:18:42 深夜i     --     --
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 算法非常简单,只需要按照上述步骤即可。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复