循环调度和IO

时间:2016-07-12 19:51:11

标签: operating-system round-robin

我不确定循环调度如何与I / O操作配合使用。我已经了解到循环调度有利于CPU绑定进程,但是如果进程提前完成其时间片会发生什么?

假设我们忽略了调度过程本身并且一个进程提前完成了它的时间片,调度程序是否会在其CPU绑定时调度另一个进程,或者当前进程是否会启动其IO操作,并且因为它不是CPU绑定的,之后会立即切换到另一个(CPU绑定)进程吗?如果支持CPU绑定进程,调度程序是否会调度所有CPU绑定进程,直到它们完成并且之后才调度I / O进程?

请帮我理解。

1 个答案:

答案 0 :(得分:1)

两个不同的调度程序: CPU (进程/线程...)调度程序和 I / O 调度程序(s )。

CPU调度程序通常采用一些混合算法,因为它们肯定经常遇到抢占和自愿放弃部分时间片的进程。他们必须快速服务于更高优先级的工作,而不是“挨饿”#34;任何人。 (对当前Linux调度程序的研究大多数很有趣。已经有几个。)

CPU调度程序将进程标识为主要是" I / O绑定'""或者"主要是' CPU-bound'" 在这个特定的时间,知道他们的特征能够并且确实发生了变化。如果您的进程反复使用全时切片,则会将其视为CPU限制。

I / O调度程序寻求对I / O请求队列进行排序和重新排序,以实现最高效率。例如,保持物理磁盘驱动器的读/写头在单个方向上有效移动。 (磁盘驱动器延迟的两个组成部分是"寻找时间""旋转延迟,""寻找时间"远远是两者中最差的。相反,固态硬盘具有非常不同的时序。)I / O调度程序还必须知道通道(磁盘接口卡,电缆,等。)提供对每个设备的访问权限:他们无法简单地观察任何一个驱动器正在做什么。与CPU调度程序一样,请求必须得到有效处理,但绝不会挨饿。" Linux的I / O调度程序也可供您的研究使用。

"纯循环,"作为一个调度规则,只是意味着所有请求都具有相同的优先级,并按照最初提交的顺序按顺序进行服务。尽管它们非常漂亮,但在现实生活中很少遇到Pure Robins。