如果第一个作业的爆发时间是最高的,FCFS可能会受到队列影响。 就像在现实生活中一样,如果队列在路上经过,那么其他人可能会被堵塞,直到完全通过。 这也可以在操作系统中进行模拟。
如果CPU在就绪队列的前端获得较高突发时间的进程,则较低突发时间的进程可能被阻塞,这意味着如果执行中的作业具有非常高的突发时间,则它们可能永远不会获得CPU。 这被称为队列效应或饥饿。
示例
在这个例子中,我们有3
个进程被命名为P1
,P2
和P3
。 进程P1
的暴发时间最高。
下表中的周转时间和等待时间通过公式计算,
Turn Around Time = Completion Time - Arrival Time Waiting Time = Turn Around Time - Burst Time
在第一种情况下,虽然流程P1到达队列中的第一个, 该过程的爆发时间是最高的。 由于调度算法,我们所遵循的是FCFS,因此CPU将首先执行Process P1。
在这个时间表中,系统的平均等待时间将非常高。 这是因为车队的影响。 其他进程P2,P3必须等待40个单位时间,尽管他们的爆发时间非常短。 这个时间表遭受饥饿。
进程ID | 到达时间 | 突发时间 | 完成时间 | 转换时间 | 等待时间 |
---|---|---|---|---|---|
1 | 0 | 40 | 40 | 40 | 0 |
2 | 1 | 3 | 43 | 42 | 39 |
2 | 2 | 4 | 12 | 8 | 4 |
3 | 1 | 1 | 44 | 43 | 42 |
平均等待时间= 81/3
在第二种情况下,如果进程P1
本来就已经到达队列的最后,而其他过程P2
和P3
早于那么饥饿问题就不存在了。
以下示例显示了这两种情况的等待时间的偏差。 虽然时间表的长度是相同的,即44
个单位,但是在这个时间表中等待时间将会减少。
进程ID | 到达时间 | 突发时间 | 完成时间 | 转换时间 | 等待时间 |
---|---|---|---|---|---|
1 | 1 | 40 | 44 | 43 | 3 |
2 | 0 | 3 | 3 | 3 | 0 |
2 | 2 | 4 | 12 | 8 | 4 |
3 | 0 | 1 | 4 | 4 | 3 |