关于linux O(1)调度的一些疑问

最近在阅读robert love《linux kernel development》里的进程调度,里面有些地方介绍的不是很清晰,我理解出现了偏差,希望大家能帮我解惑一下。因为我是一个初学者,可能会有些啰嗦,大家见谅。
1、调度为提高重新计算时间片的效率,维护了active和expired两个数组,书中没有明确指出何时互换,但我假设它是在active数组的所有在TASK_RUNNING上的进程用完时间片时(我觉得等所有进程用完时间片不现实,我认为休眠的进程应该还持有时间片),这下就存在一个问题:在数组互换的时候,那些原先存在于active中的非TASK_RUNNING就会被放入expired中,而这些睡眠的进程有可能是阻塞于IO的强交互性进程,它们被放入expired中会影响它们被及时调度,它说这个调度是侧重交互性的。
2、这个调度中还有一个机制,交互性极强的进程只要在expired不饥饿时就会继续留在active中,我再假设它在这里被重新计算了时间片。那么我是不是可以这样认为,只要存在这个调度认为交互性足够强的进程存在,那active和expired的交换有很可能会在expired饥饿之后(若这个强交互进程是active中最后一个有时间片的TASK_RUNNING进程,也有可能在expired饥饿之前离开TASK_RUNNING)?这样不就极大影响了别的进程,我觉得是不是太极端了。
3、这个调度强调交互性,那在一些网络服务器上的网络IO是否也会被认为是交互性?若不是,这些服务器往往没有多少其他的交互操作,那还为交互进程留出这么多资源岂不是很浪费?

作者: jeung   发布时间: 2011-02-28

看 sched.c 中的schedule()函数 那个函数里面都写了 什么时候交换,及相关的信息(源代码)

作者: shenyanxxxy   发布时间: 2011-02-28