当前位置:首页 > C++ > 正文

C++实现CPU调度算法详解(从零开始掌握操作系统核心调度机制)

在操作系统中,CPU调度算法是决定哪个进程获得CPU使用权的核心机制。对于学习操作系统的初学者来说,理解并用C++语言实现这些调度算法,不仅能加深对系统底层运行原理的理解,还能提升编程能力。本文将手把手教你用C++实现几种经典的CPU调度算法,即使是编程小白也能轻松上手!

C++实现CPU调度算法详解(从零开始掌握操作系统核心调度机制) C++ CPU调度算法 操作系统调度 C++进程调度实现 先来先服务调度算法 第1张

什么是CPU调度?

当多个进程同时请求使用CPU时,操作系统必须决定谁先执行、谁后执行。这个决策过程就叫CPU调度。常见的调度算法包括:先来先服务(FCFS)最短作业优先(SJF)时间片轮转(RR)等。

今天,我们将重点讲解并用C++实现最基础也最重要的——先来先服务调度算法(First Come First Serve, FCFS)。

先来先服务(FCFS)调度算法原理

FCFS是最简单的调度策略:按照进程到达的先后顺序依次执行。就像银行排队一样,先来的客户先被服务。

优点:实现简单,公平。
缺点:可能导致“护航效应”(长作业阻塞短作业),平均等待时间较长。

C++实现FCFS调度算法

下面我们用C++编写一个简单的FCFS调度模拟程序。程序将输入若干个进程的到达时间和执行时间,然后计算每个进程的等待时间、周转时间,并输出平均等待时间。

// fcfs_scheduling.cpp#include <iostream>#include <vector>#include <iomanip>using namespace std;struct Process {    int id;    int arrival_time;    int burst_time;    int waiting_time;    int turnaround_time;};void fcfsScheduling(vector<Process>& processes) {    // 按照到达时间排序(假设输入已按时间顺序)    int current_time = 0;    double total_waiting = 0, total_turnaround = 0;    cout << "\n进程调度结果(FCFS):\n";    cout << setw(5) << "PID"          << setw(12) << "到达时间"          << setw(12) << "执行时间"          << setw(12) << "等待时间"          << setw(14) << "周转时间" << endl;    for (auto& p : processes) {        // 如果当前时间小于进程到达时间,CPU空闲        if (current_time < p.arrival_time) {            current_time = p.arrival_time;        }        p.waiting_time = current_time - p.arrival_time;        p.turnaround_time = p.waiting_time + p.burst_time;        current_time += p.burst_time;        total_waiting += p.waiting_time;        total_turnaround += p.turnaround_time;        cout << setw(5) << p.id             << setw(12) << p.arrival_time             << setw(12) << p.burst_time             << setw(12) << p.waiting_time             << setw(14) << p.turnaround_time << endl;    }    double avg_waiting = total_waiting / processes.size();    double avg_turnaround = total_turnaround / processes.size();    cout << "\n平均等待时间: " << fixed << setprecision(2) << avg_waiting << endl;    cout << "平均周转时间: " << avg_turnaround << endl;}int main() {    int n;    cout << "请输入进程数量: ";    cin >> n;    vector<Process> processes(n);    for (int i = 0; i < n; ++i) {        processes[i].id = i + 1;        cout << "进程 " << processes[i].id << " 的到达时间和执行时间: ";        cin >> processes[i].arrival_time >> processes[i].burst_time;    }    fcfsScheduling(processes);    return 0;}

代码说明:

  • Process 结构体存储每个进程的关键信息。
  • 主函数读取用户输入的进程数量和每个进程的到达时间、执行时间。
  • fcfsScheduling 函数模拟调度过程,计算等待时间和周转时间。
  • 程序最后输出每个进程的调度结果及平均指标。

如何编译和运行?

将上述代码保存为 fcfs_scheduling.cpp,然后在终端执行:

g++ -o fcfs fcfs_scheduling.cpp./fcfs

输入示例:

请输入进程数量: 3进程 1 的到达时间和执行时间: 0 5进程 2 的到达时间和执行时间: 1 3进程 3 的到达时间和执行时间: 2 8

进阶学习建议

掌握了FCFS之后,你可以尝试实现其他更复杂的C++进程调度实现,例如:

  • 最短作业优先(SJF)——总是选择执行时间最短的进程
  • 优先级调度(Priority Scheduling)——根据优先级决定执行顺序
  • 时间片轮转(Round Robin)——每个进程轮流执行固定时间片

这些算法在实际操作系统(如Linux、Windows)中都有应用,深入理解它们有助于你掌握操作系统调度的核心思想。

总结

本文通过一个完整的C++程序,带你从零实现了C++ CPU调度算法中最基础的FCFS策略。你不仅学会了如何建模进程、模拟调度过程,还掌握了关键性能指标(等待时间、周转时间)的计算方法。

希望这篇教程能为你打开操作系统世界的大门!动手实践是掌握知识的最佳方式,快去运行代码、修改参数、观察结果吧!

关键词回顾:C++ CPU调度算法操作系统调度C++进程调度实现先来先服务调度算法