【问题标题】:Round Robin scheduling and IO轮询调度和 IO
【发布时间】:2016-07-12 19:51:11
【问题描述】:
我不确定循环调度如何与 I/O 操作配合使用。我了解到循环调度偏爱 CPU 密集型进程,但如果进程提前完成其时间片会怎样?
假设我们忽略了调度进程本身并且一个进程提前完成了它的时间片,如果它的 CPU 受限,调度程序会调度另一个进程,或者当前进程是否会开始它的 IO 操作,因为这不是 CPU 受限,所以会之后立即切换到另一个(CPU 绑定)进程?如果 CPU 绑定进程受到青睐,调度程序是否会调度所有 CPU 绑定进程直到它们完成,然后才调度 I/O 进程?
请帮助我理解。
【问题讨论】:
标签:
operating-system
round-robin
【解决方案1】:
有两个不同的调度器:CPU(进程/线程...)调度器和I/O调度器(s )。
CPU 调度程序通常采用一些混合算法,因为它们确实确实经常遇到抢占和自愿放弃部分时间片的进程。他们必须迅速为更高优先级的工作提供服务,同时不能“饿死”任何人。 (对当前 Linux 调度程序的研究最很有趣。已经有好几个了。)
CPU 调度程序在这个特定时间将进程识别为“主要是‘I/O-bound’”或“主要是‘CPU-bound’”,知道它们的特性可以而且确实会改变。如果您的进程反复消耗完整的时间片,则它被视为 CPU 密集型。
I/O 调度程序寻求对 I/O 请求队列进行排序和重新排序以实现最大效率。例如,保持物理磁盘驱动器的读/写磁头在单个方向上有效移动。 (磁盘驱动器延迟的两个组成部分是“寻道时间”和“旋转延迟”,其中“寻道时间”是迄今为止最差的两者。相反,固态驱动器具有时间非常不同。)I/O 调度器还必须了解提供对每个设备的访问权限的通道(磁盘接口卡、电缆等等):它们不能简单地观察任何一个驱动器在做什么。与 CPU 调度程序一样,请求必须得到有效处理,但不能“饿死”。 Linux 的 I/O 调度器也可随时供您学习。
“纯循环”作为一种调度规则,仅仅意味着所有请求都具有相同的优先级,并且将按照它们最初提交的顺序依次得到服务。虽然它们是非常漂亮的鸟,但您在现实生活中很少遇到纯知更鸟。