微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

先来先服务调度FCFS算法及优缺点

毫无疑问,最简单的 cpu 调度算法是先来先服务(FCFS)调度箅法。釆用这种方案,先请求 cpu 的进程首先分配到 cpu

FCFS 策略可以通过 FIFO 队列容易地实现。当一个进程进入就绪队列时,它的 PCB 会被链接到队列尾部。当 cpu 空闲时,它会分配给位于队列头部的进程,并且这个运行进程从队列中移去。FCFS 调度代码编写简单并且理解容易。

FCFS 策略的缺点是,平均等待时间往往很长。假设有如下一组进程,它们在时间 0 到达,cpu 执行长度按 ms 计:

进程 执行时间
P1 24
P2 3
P3 3

如果进程按 P1、P2、P3 的顺序到达,并且按 FCFS 顺序处理,那么得到如下 Gantt 图所示的结果(这种 Gantt 图为条形图,用于显示调度情况,包括每个进程的开始与结束时间):


 
进程 P1 的等待时间为 0ms,进程 P2 的等待时间为 24ms,而进程 P3 的等待时间为 27ms。因此,平均等待时间为 (0 + 24 + 27)/3 = 171ms。不过,如果进程按 P2、P3、P1 的顺序到达,那么结果如以下 Gantt 图所示:


 
现在平均等待时间为 (6 + 0+3)/3 = 3ms。这个减少是相当大的。因此,FCFS 策略的平均等待时间通常不是最小,而且如果进程的 cpu 执行时间变化很大,那么平均等待时间的变化也会很大。

另外,考虑动态情况下的 FCFS 调度性能。假设有一个 cpu 密集型进程和多个 I/O 密集型进程。随着进程在系统中运行,可能发生如下情况:cpu 密集型进程得到 cpu,并使用它。在这段时间内,所有其他进程会处理完它们的 I/O,并转移到就绪队列来等待 cpu。当这些进程在就绪队列中等待时,I/O 设备空闲。最终,cpu 密集型进程完成 cpu 执行并且移到 I/O 设备。所有 I/O 密集型进程,由于只有很短的 cpu 执行,故很快执行完并移回到 I/O 队列。这时,cpu 空闲。之后,cpu 密集型进程会移回到就绪队列并分配到 cpu。再次,所有 I/O 进程会在就绪队列中等待 cpu 密集型进程的完成。由于所有其他进程都等待一个大进程释放 cpu,故称之为护航效果。与让较短进程先进行相比,这会导致 cpu 和设备的使用率降低。

也要注意,FCFS 调度算法是非抢占。一旦 cpu 分配给了一个进程,该进程就会使用 cpu 直到释放 cpu 为止,即程序终止或是请求 I/O。FCFS 算法对于分时系统(每个用户需要定时得到一定的 cpu 时间)是特别麻烦的。允许一个进程使用 cpu 过长将是个严重错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐