操作系统 FCFS先到先服务中的车队效应
如果第一个作业的运行时间在所有作业中最长,则先到先服务可能会遭受 车队效应 。就像在现实生活中,如果有一列车队通过道路,其他人可能会被阻塞,直到车队完全通过。这在操作系统中也可以模拟。
如果CPU在就绪队列的前端获取具有较长运行时间的进程,则运行时间较短的进程可能会被阻塞,这意味着如果正在执行的作业具有非常高的运行时间,则它们可能永远无法获取CPU。这被称为 车队效应 或 饥饿 。
示例
在这个示例中,我们有三个进程,分别为 P1,P2和P3 。进程P1的执行时间最长。
下表中的周转时间和等待时间是通过以下公式计算出来的,
Turn Around Time = Completion Time - Arrival Time
Waiting Time = Turn Around Time - Burst Time
在第一种情况下,进程P1虽然其执行时间是最长的,但它首先到达队列中的第一个位置。因为我们正在遵循的调度算法是先来先服务(FCFS),所以CPU会先执行进程P1。
在这个调度中,系统的平均等待时间将会非常高。这是因为出现了僵持效应。其他的进程P2、P3必须等待40个时间单位才能轮到它们,尽管它们的执行时间非常短。这个调度会出现饥饿现象。
Process ID | Arrival Time | Burst Time | Completion Time | Turn Around Time | Waiting Time |
---|---|---|---|---|---|
1 | 0 | 40 | 40 | 40 | 0 |
2 | 1 | 3 | 43 | 42 | 39 |
3 | 1 | 1 | 44 | 43 | 42 |
平均等待时间 = 81/3
在第二种情况下,如果进程 P1 会在队列的最后到达,而其他进程 P2 和 P3 会在较早的时候到达,那么饥饿的问题就不会存在。
以下示例展示了两种情况下等待时间的偏差。虽然调度的长度相同,即44个单位,但在这个调度中等待时间会更少。
Process ID | Arrival Time | Burst Time | Completion Time | Turn Around Time | Waiting Time |
---|---|---|---|---|---|
1 | 1 | 40 | 44 | 43 | 3 |
2 | 0 | 3 | 3 | 3 | 0 |
3 | 0 | 1 | 4 | 4 | 3 |
平均等待时间=6/3