Round Robin调度和IO

Round Robin scheduling and IO

我不确定循环调度如何与 I/O 操作一起使用。我了解到 CPU 绑定进程受循环调度的青睐,但如果进程提前完成其时间片会怎样?

假设我们忽略了调度进程本身并且一个进程提前完成了它的时间片,如果它的 CPU 绑定,调度程序是否会调度另一个进程,或者当前进程是否会开始它的 IO 操作,因为那是'tCPU绑定后,会立即切换到另一个(CPU绑定)进程吗?如果 CPU 绑定进程受到青睐,调度程序是否会调度所有 CPU 绑定进程直到它们完成,然后才调度 I/O 进程?

请帮我理解。

两个个不同的调度器:CPU(process/thread ...)调度器,以及I/O 调度程序。

CPU 调度程序通常采用一些混合算法,因为它们肯定 do 经常遇到抢占和自愿放弃部分时间片的进程。他们必须快速为更高优先级的工作提供服务,而不是 "starving" 任何人。 (对当前 Linux 调度器的研究是 有趣的。已经有好几个了。)

CPU 调度程序在这个特定时间将进程识别为 "primarily 'I/O-bound'" 或 "primarily 'CPU-bound'" 知道它们的特性可以而且确实会改变.如果您的进程重复消耗全部时间片,则它被视为 CPU-bound.

I/O 调度程序试图对 I/O 请求队列进行排序和重新排序以实现最高效率。例如,要保持物理磁盘驱动器的 read/write 磁头在一个方向上高效移动。 (磁盘驱动器延迟的两个组成部分是 "seek time" 和 "rotational latency,","seek time" 是目前为止两者中最差的。相反,固态驱动器的时序非常不同。)I/O-调度程序还必须注意 通道 (磁盘接口卡、布线、) 提供对每个设备的访问:他们不能简单地观察任何一个驱动器在做什么。与 CPU-scheduler 一样,请求必须得到有效处理,但绝不会 "starved." Linux 的 I/O-scheduler 也随时可供您学习。

"Pure round-robin," 作为一个调度规则,仅仅意味着所有的请求都具有相同的优先级,并且将按照它们最初提交的顺序依次得到服务。虽然它们很漂亮,但在现实生活中你很少遇到纯知更鸟。