C++ 实现 FCFS 调度算法的程序

C++C++Beginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,我们将学习如何使用 C++ 编程语言实现先来先服务(First Come First Serve, FCFS)调度算法。FCFS 是最简单的调度算法,它根据作业的到达时间进行调度。在该算法中,最先到达就绪队列的作业将首先获得 CPU。本实验适合希望学习 FCFS 调度算法的初学者。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("`C++`")) -.-> cpp/BasicsGroup(["`Basics`"]) cpp(("`C++`")) -.-> cpp/ControlFlowGroup(["`Control Flow`"]) cpp(("`C++`")) -.-> cpp/IOandFileHandlingGroup(["`I/O and File Handling`"]) cpp(("`C++`")) -.-> cpp/StandardLibraryGroup(["`Standard Library`"]) cpp(("`C++`")) -.-> cpp/SyntaxandStyleGroup(["`Syntax and Style`"]) cpp/BasicsGroup -.-> cpp/variables("`Variables`") cpp/BasicsGroup -.-> cpp/arrays("`Arrays`") cpp/BasicsGroup -.-> cpp/strings("`Strings`") cpp/ControlFlowGroup -.-> cpp/for_loop("`For Loop`") cpp/IOandFileHandlingGroup -.-> cpp/output("`Output`") cpp/IOandFileHandlingGroup -.-> cpp/user_input("`User Input`") cpp/StandardLibraryGroup -.-> cpp/math("`Math`") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("`Code Formatting`") subgraph Lab Skills cpp/variables -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} cpp/arrays -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} cpp/strings -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} cpp/for_loop -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} cpp/output -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} cpp/user_input -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} cpp/math -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} cpp/code_formatting -.-> lab-96161{{"`C++ 实现 FCFS 调度算法的程序`"}} end

包含所需的头文件和命名空间

我们将在 ~/project 目录下使用以下命令创建一个名为 main.cpp 的新文件:

touch ~/project/main.cpp

包含用于输入/输出处理的必要头文件,并声明程序中使用的命名空间。

#include<iostream>

using namespace std;

定义主函数和变量

定义 main() 函数,并声明 FCFS 算法所需的变量。

int main() {
    int n, burst_time[20], waiting_time[20], turnaround_time[20], total_waiting_time = 0, total_turnaround_time = 0;
    cout << "Enter total number of processes (maximum 20): ";
    cin >> n;

获取每个进程的 Burst Time

使用循环获取每个进程的 Burst Time(执行时间)。每个进程的 Burst Time 表示完成该进程所需的持续时间。

cout << "\nEnter the Burst Time for each process\n";
    for(int i = 0; i < n; i++) {
        cout << "Process " << i + 1 << ": ";
        cin >> burst_time[i];
    }

计算每个进程的等待时间

使用循环计算每个进程的等待时间。等待时间表示每个进程在被执行之前在就绪队列中花费的时间。

// Calculate the waiting time for each process
    waiting_time[0] = 0;  // 第一个进程的等待时间为 0
    for(int i = 1; i < n; i++) {
        waiting_time[i] = 0;
        for(int j = 0; j < i; j++) {
            waiting_time[i] += burst_time[j];
        }
    }

计算每个进程的周转时间

使用循环计算每个进程的周转时间。周转时间表示从进程到达系统到其完成之间的时间。

// Calculate the turnaround time for each process and add up to the total waiting time and turnaround time
    cout << "\nProcess\t\tBurst Time\tWaiting Time\tTurnaround Time";
    for(int i = 0; i < n; i++) {
        turnaround_time[i] = burst_time[i] + waiting_time[i];
        total_waiting_time += waiting_time[i];
        total_turnaround_time += turnaround_time[i];
        cout << "\nP[" << i + 1 << "]" << "\t\t" << burst_time[i] << "\t\t" << waiting_time[i] << "\t\t" << turnaround_time[i];
    }

计算并打印平均等待时间和平均周转时间

使用公式计算平均等待时间和平均周转时间,并打印结果。

// Calculate the average waiting time and average turnaround time
    float average_waiting_time = (float)total_waiting_time / (float)n;
    float average_turnaround_time = (float)total_turnaround_time / (float)n;
    cout << "\n\nAverage Waiting Time: " << average_waiting_time;
    cout << "\nAverage Turnaround Time: " << average_turnaround_time;

    return 0;
}

在终端中运行代码:

g++ main.cpp -o main
./main

总结

在本实验中,我们学习了如何使用 C++ 编程语言实现先来先服务(First Come First Serve, FCFS)调度算法。FCFS 是最简单的调度算法,它根据作业的到达时间进行调度。我们涵盖了以下概念:

  • FCFS 算法
  • 等待时间和周转时间的计算
  • 平均等待时间和平均周转时间的计算

通过本实验,初学者现在可以轻松地使用 C++ 编程语言实现 FCFS 调度算法。

您可能感兴趣的其他 C++ 教程