FCFS 调度算法:什么是示例程序

⚡ 智能摘要

先来先服务调度按照进程到达就绪队列的顺序运行进程,采用简单的非抢占式 FIFO 方法,使其成为操作系统最容易实现的 CPU 调度算法。

  • 🔄 定义: FCFS 将 CPU 分配给第一个请求它的进程,并按照先进先出 (FIFO) 结构管理就绪队列。
  • ⚙️ 性质: FCFS 是非抢占式的,因此正在运行的进程会一直占用 CPU,直到完成其整个执行时间。
  • 🎟️ 比喻: 就像售票柜台排队一样,先到的流程优先处理,后到的流程则需要等待。
  • 📊 计算公式: 平均等待时间由以下公式计算得出trac计算每个进程从开始时间到到达时间的平均值,然后对所有进程的到达时间进行平均。
  • 🐢 护航效应: 前端一个耗时较长的流程会迫使耗时较短的流程等待,从而增加平均等待时间并损害性能。
  • 🤖 人工智能视角: 机器学习预测突发时间以改进调度,Copilot 可帮助快速编写和测试 FCFS 代码。

FCFS调度算法 Opera系统

什么是先到先得方法?

先到先得 (FCFS) FCFS 是一种操作系统调度算法,它按照请求到达的先后顺序自动执行排队的请求和进程。它是最简单易懂的 CPU 调度算法。在这种算法中,最先请求 CPU 的进程会优先获得 CPU 资源。这是通过 FIFO 队列实现的。FCFS 的全称是 First Come First Serve(先来先服务)。

当一个进程进入就绪队列时,它的进程控制块(PCB)会与队列尾部连接。因此,当CPU空闲时,它会被分配给队列开头的进程。

先来先服务法的特点

先到先得法的主要特点如下:

  • 而是一种 非抢占式 调度算法使得进程能够一直占用 CPU,直到完成其运行时间。
  • 工作总是按照先到先得的原则执行。
  • 它易于实施和使用。
  • 这种方式性能较差,一般等待时间比较长。

先来先服务 (FCFS) 调度示例

先到先服务 (FCFS) 方法的一个实际例子是在售票处购买电影票。在这个调度算法中,人们按照排队顺序依次购票。排在队伍最前面的人先买票,然后是下一个人,以此类推,直到排在队伍最后的人买完票为止。CPU 进程也以类似的方式运行。

FCFS 如何工作?计算平均等待时间

为了理解算法如何调度进程,这里举个例子,假设有五个进程在不同时间到达,每个进程的执行时间都不同。

工艺应用 爆发时间 到达时间
P1 6 2
P2 2 5
P3 8 1
P4 3 0
P5 4 4

使用FCFS调度算法,这些进程处理如下。

步骤1) 该过程从 P4 开始,其到达时间为 0。

先来先服务 (FCFS) 调度示例步骤 1

步骤2) 在时间=1时,P3到达。P4仍在执行。因此,P3被保留在队列中。

先来先服务 (FCFS) 调度示例步骤 2

步骤3) 在时间=2时,P1到达并被保留在队列中。

先来先服务 (FCFS) 调度示例步骤 3

步骤4) 在时间=3时,P4进程完成执行。

先来先服务 (FCFS) 调度示例步骤 4

步骤5) 在时间=4时,队列中第一个 P3 开始执行。

先来先服务 (FCFS) 调度示例步骤 5

步骤6) 在时间=5时,P2到达并被放入队列中。

先来先服务 (FCFS) 调度示例步骤 6

步骤7) 在时间=11时,P3 执行完毕。

先来先服务 (FCFS) 调度示例步骤 7

步骤8) 在时间=11时,P1开始执行。它的执行时间为6,因此它在时间间隔17完成执行。

先来先服务 (FCFS) 调度示例步骤 8

步骤9) 在时间=17时,P5开始执行。它的执行时间为4,因此在时间=21时执行完毕。

先来先服务 (FCFS) 调度示例步骤 9

步骤10) 在时间=21时,P2开始执行。它的执行时间为2,因此它在时间间隔23完成执行。

先来先服务 (FCFS) 调度示例步骤 10

步骤11) 现在,让我们计算一下上述示例的平均等待时间。

先到先服务 (FCFS) 调度平均等待时间

Waiting time = Start time - Arrival time

P4 = 0 – 0 = 0

P3 = 3 – 1 = 2

P1 = 11 – 2 = 9

P5 = 17 – 4 = 13

P2 = 21 – 5 = 16

平均等待时间 = (0 + 2 + 9 + 13 + 16) / 5 = 40 / 5 = 8

先来先服务 (FCFS) 调度平均等待时间计算

FCFS 的优点

以下是使用先来先服务(FCFS)调度算法的优点和好处:

  • 它是最简单的形式 CPU 调度算法.
  • 它很容易编程。
  • 遵循先到先得的简单原则。

FCFS 的缺点

以下是使用先来先服务(FCFS)调度算法的缺点和不足之处:

  • 它是一种非抢占式 CPU 调度算法,因此一旦一个进程被分配给 CPU,它就不会释放 CPU,直到它执行完毕。
  • 平均等待时间较长。
  • 队列末尾的短流程必须等待队列开头的长流程完成后才能进行。
  • 对于分时系统而言,这不是一种理想的技术。
  • 由于其简单性,FCFS 效率不高。

常见问题

先来先服务(FCFS)是一种非抢占式算法。一旦某个进程获得 CPU,它就会一直运行直到其突发任务完成,因此调度器无法中断它去运行新到达的或运行时间更短的进程。

当多个短进程排在队列前端一个长进程后面等待时,就会发生护航效应。这个耗时较长的进程会增加平均等待时间,降低整体 CPU 吞吐量。

周转时间等于每个进程的完成时间减去到达时间。它衡量的是一个进程在系统中花费的总时间,从进程到达系统到在 CPU 上完成执行为止。

先到先得,按到达顺序服务。 最短工作优先 优先处理最小的订单量,以减少等待时间; 循环赛 对于分时系统,每个进程都有一个固定的时间片。

纯粹的先来先服务(FCFS)不会导致资源饥饿,因为每个进程最终都会到达先进先出(FIFO)队列的前端。然而,耗时较长的作业仍然会通过“护航效应”严重延迟耗时较短的作业。

当进程已按到达时间排序时,FCFS 算法的时间复杂度为 O(n),因为每个进程只被调度一次。如果先对未排序的到达进程按到达时间排序,则需要额外增加一个 O(n log n) 的步骤。

机器学习模型能够预测进程的突发时间,并选择或调整调度策略,从而缩短平均等待时间并降低能耗。研究人员将这些人工智能驱动的调度器应用于云服务器和数据中心。

是的。GitHub Copilot 可以用 C 语言生成 FCFS 代码。 Java 或 Python 包含等待时间和周转时间计算。在信任输出结果之前,务必验证到达时间排序、平局打破和平均值计算公式。

总结一下这篇文章: