Answers:
当前的Linux任务调度程序称为完全公平调度程序(CFS)。你应该看看有关更多详细信息, http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt。设计非常复杂,我认为不适合RTOS。
实时系统中的一种常用技术是速率单调调度,因为它可以确保某些假设(例如静态任务优先级以及固定的执行时间和速率)是否成立。还有很多其他算法,并且已经进行了很多研究。因此,基本上所有内容都与您需要的属性,您对任务的了解以及已修复的内容有关。
我不确定,您是否正在考虑内核的I / O调度。如果您不是:忽略此答案。
维基百科指出,自内核2.6.18起,默认情况下为CFG(完全公平排队)。
Linux调度程序使用的算法是一个复杂的方案,结合了抢占式优先级和有偏差的时间分片。它将较长的时间段分配给较高优先级的任务,将较短的时间段分配给较低优先级的任务。
它可以将每个进程标识为实时进程还是正常(其他)进程。为实时任务分配了[0,99]范围内的静态优先级,其中较低的数字表示较高的优先级。
所有其他任务的动态优先级都在[100,139]范围内,这取决于任务的交互性,这些交互性基于其好值加或减去值5。交互性更高的任务通常具有更长的睡眠时间,因此更有可能由于调度程序偏爱交互式任务,因此调整幅度应接近-5。(任务的交互性取决于它在等待I / O时睡眠了多长时间。)任务的交互性决定了值5将添加到尼斯值还是从尼斯值中减去。调整的结果将是这些任务的更高优先级。相反,睡眠时间较短的任务通常受CPU限制更大,因此优先级会降低。
内核在运行队列数据结构中维护所有可运行任务的列表。运行队列包含两个优先级数组:活动和过期。活动阵列包含所有在其时间片中剩余时间的任务,过期阵列包含所有过期任务。这些优先级数组中的每一个都包含根据优先级索引的任务列表。调度程序从活动阵列中选择优先级最高的任务,以便在CPU上执行。当所有任务都用完其时间片时(即活动阵列为空),将交换两个优先级阵列:过期阵列变为活动阵列,反之亦然。
当任务用完其时间量并要移到过期数组时,将重新计算任务的动态优先级。因此,当交换两个阵列时,已为新的活动阵列中的所有任务分配了新的优先级和相应的时间片。(注意:这是摘自Abraham Silberschatz等人撰写的《操作系统概念》(第9版)一书。有关详细信息,请参阅本书的5.6.3节)
>
为您从外部来源接管的答案的那些部分使用“引号”格式(即,以开头的行),尤其是在引用书中的内容时。