21xrx.com
2025-03-26 14:00:00 Wednesday
文章检索 我的文章 写文章
使用FCFS调度算法实现C++作业调度算法
2023-06-25 16:05:11 深夜i     12     0
FCFS 调度算法 C++ 作业 实现

FCFS(First-Come-First-Serve)调度算法是一种常用的进程调度算法,其原理是按照作业提交的先后顺序,依次将作业放入CPU队列,并按照顺序执行。本文将介绍如何使用FCFS调度算法实现C++作业调度。

首先,我们需要定义两个类——Job和Schedule。Job类表示一个作业,包含作业名称、执行时间、完成时间、等待时间等属性,以及计算作业完成时间和等待时间的函数。Schedule类表示作业调度,包含一个Job类型的数组,以及将作业按照FCFS算法调度执行的方法。

下面是Job类的定义:

class Job{
public:
  char name;
  int executeTime;
  int finishTime;
  int waitTime;
  Job(char n, int e)
    name = n;
    executeTime = e;
    finishTime = 0;
    waitTime = 0;
  
  void calculate(int start){
    finishTime = start + executeTime;
    waitTime = start;
  }
};

Job类中的calculate函数用于计算作业的完成时间和等待时间,它的参数start表示作业开始执行的时间。

下面是Schedule类的定义:

class Schedule{
public:
  Job* jobArray;
  int jobNum;
  Schedule(int n){
    jobNum = n;
    jobArray = new Job[n];
  }
  void FCFS(){
    int start = 0;
    for (int i = 0; i < jobNum; i++){
      jobArray[i].calculate(start);
      start = jobArray[i].finishTime;
    }
  }
};

Schedule类中的FCFS函数用于按照FCFS算法调度作业,它的实现步骤是依次计算每个作业的完成时间和等待时间,start变量表示上一个作业结束的时间,初始值为0。

最后,我们在主函数中创建一个Schedule类的实例,并利用该实例的jobArray属性存储作业。然后调用FCFS函数按照FCFS算法调度作业。

下面是完整的代码实现:

#include<iostream>
using namespace std;
class Job{
public:
  char name;
  int executeTime;
  int finishTime;
  int waitTime;
  Job(char n, int e)
    name = n;
    executeTime = e;
    finishTime = 0;
    waitTime = 0;
  
  void calculate(int start){
    finishTime = start + executeTime;
    waitTime = start;
  }
};
class Schedule{
public:
  Job* jobArray;
  int jobNum;
  Schedule(int n){
    jobNum = n;
    jobArray = new Job[n];
  }
  void FCFS(){
    int start = 0;
    for (int i = 0; i < jobNum; i++){
      jobArray[i].calculate(start);
      start = jobArray[i].finishTime;
    }
  }
};
int main(){
  int n;
  cout << "Please input the number of jobs: ";
  cin >> n;
  Schedule schedule(n);
  cout << "Please input the execute time of each job:" << endl;
  for (int i = 0; i < n; i++){
    char name = 'A' + i;
    int executeTime;
    cout << name << ": ";
    cin >> executeTime;
    schedule.jobArray[i] = Job(name, executeTime);
  }
  schedule.FCFS();
  cout << "Result:" << endl;
  for (int i = 0; i < n; i++){
    cout << schedule.jobArray[i].name << " " << schedule.jobArray[i].waitTime << " " << schedule.jobArray[i].finishTime << endl;
  }
  return 0;
}

以上代码实现了使用FCFS调度算法实现C++作业调度算法的功能。用户可以输入作业数量,以及每个作业所需的执行时间。程序将输出每个作业的名称、等待时间和完成时间。

  
  

评论区

请求出错了