FCFS 中的车队效应

17 Mar 2025 | 阅读 2 分钟

如果第一个作业的运行时间是所有作业中最长的,FCFS 可能会出现**护航效应**。就像现实生活中,如果一队车经过马路,其他人可能会被堵住,直到它们完全通过。这也可以在操作系统中进行模拟。

如果就绪队列的前端 CPU 获取到的是具有较高运行时间的进程,那么具有较低运行时间的进程可能会被阻塞,也就是说,如果正在执行的作业具有非常高的运行时间,它们可能永远无法获得 CPU。这就是所谓的**护航效应**或**饥饿**。


os Convoy Effect or starvation

示例

在示例中,我们有 3 个进程,分别命名为 **P1, P2 和 P3**。进程 P1 的运行时间最长。

周转时间和等待时间在下表中,是通过以下公式计算的:

在第一种情况下,进程 P1 最先到达队列,但是;该进程的运行时间是所有进程中最长的。由于我们遵循的是 FCFS 调度算法,因此 CPU 将首先执行进程 P1。

在此调度中,系统的平均等待时间将非常高。这是因为护航效应。其他进程 P2、P3 必须等待 40 个时间单位才能轮到它们,尽管它们的运行时间非常短。此调度会出现饥饿现象。

进程 ID到达时间执行时间完成时间周转时间等待时间
104040400
213434239
311444342
os Convoy Effect in FCFS

         平均等待时间 = 81/3

在第二种情况下,如果进程 P1 最后到达队列,而其他进程 P2 和 P3 提前到达,那么就不会出现饥饿问题。

以下示例显示了两种情况下等待时间的差异。尽管调度的长度相同,都是 44 个单位,但在这种调度中等待时间会更短。

进程 ID到达时间执行时间完成时间周转时间等待时间
114044433
203330
301443
os Convoy Effect in FCFS 1

         平均等待时间 = 6/3


下一个主题带开销的 FCFS