Linux中使用哪种调度算法?


11

最近在一次采访中,有人问我有关Linux操作系统使用的调度算法的信息。为什么使用什么算法?

另外,实时操作系统中使用什么算法,为什么?


用于进程或IO调度?甚至还有其他东西?
maxschlepzig 2011年

Answers:


7

当前的Linux任务调度程序称为完全公平调度程序(CFS)。你应该看看有关更多详细信息, http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt。设计非常复杂,我认为不适合RTOS。

实时系统中的一种常用技术是速率单调调度,因为它可以确保某些假设(例如静态任务优先级以及固定的执行时间和速率)是否成立。还有很多其他算法,并且已经进行了很多研究。因此,基本上所有内容都与您需要的属性,您对任务的了解以及已修复的内容有关。


2

我不确定,您是否正在考虑内核的I / O调度。如果您不是:忽略此答案。

维基百科指出,自内核2.6.18起,默认情况下为CFG(完全公平排队)

在我的openSUSE(运行内核2.6.37)上,我可以在CFG,NOOPDeadline之间切换。


我很好奇,如何才能切换到其他算法?你能对此有所阐明吗?谢谢
rsjethani 2012年

@rsjethani转到YaST->系统->内核设置->第二个选项卡(内核设置)->全局IO调度程序。(因为我已经从德国GUI翻译选项的命名可能会有所不同)
Torbjörn


0

Linux调度程序使用的算法是一个复杂的方案,结合了抢占式优先级和有偏差的时间分片。它将较长的时间段分配给较高优先级的任务,将较短的时间段分配给较低优先级的任务。

它可以将每个进程标识为实时进程还是正常(其他)进程。为实时任务分配了[0,99]范围内的静态优先级,其中较低的数字表示较高的优先级。

所有其他任务的动态优先级都在[100,139]范围内,这取决于任务的交互性,这些交互性基于其好值加或减去值5。交互性更高的任务通常具有更长的睡眠时间,因此更有可能由于调度程序偏爱交互式任务,因此调整幅度应接近-5。(任务的交互性取决于它在等待I / O时睡眠了多长时间。)任务的交互性决定了值5将添加到尼斯值还是从尼斯值中减去。调整的结果将是这些任务的更高优先级。相反,睡眠时间较短的任务通常受CPU限制更大,因此优先级会降低。

内核在运行队列数据结构中维护所有可运行任务的列表。运行队列包含两个优先级数组:活动和过期。活动阵列包含所有在其时间片中剩余时间的任务,过期阵列包含所有过期任务。这些优先级数组中的每一个都包含根据优先级索引的任务列表。调度程序从活动阵列中选择优先级最高的任务,以便在CPU上执行。当所有任务都用完其时间片时(即活动阵列为空),将交换两个优先级阵列:过期阵列变为活动阵列,反之亦然。

当任务用完其时间量并要移到过期数组时,将重新计算任务的动态优先级。因此,当交换两个阵列时,已为新的活动阵列中的所有任务分配了新的优先级和相应的时间片。(注意:这是摘自Abraham Silberschatz等人撰写的《操作系统概念》(第9版)一书。有关详细信息,请参阅本书的5.6.3节)


欢迎来到该网站,并感谢您的贡献。请>为您从外部来源接管的答案的那些部分使用“引号”格式(即,以开头的行),尤其是在引用书中的内容时。
AdminBee

0

这是您另一个问题的答案。实时系统(RTS)有两种类型,硬性和软性。硬RTS的CPU调度算法是基于优先级的抢占算法,而软RTS的CPU调度算法是非抢占优先级。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.