我想修改动态更改进程优先级的linux内核代码。
我有Ubuntu 10.10,我下载了linux 2.6.37。我发现在2.6.37版本中没有动态改变进程优先级的概念。在CentOS中,有一个recalc_task_prio()函数可以动态更改进程的优先级。
我想知道是否有人知道其他ubuntu内核版本支持动态更改进程优先级的功能(如果任务受cpu限制并消耗大量cpu,则会惩罚进程优先级)?
我主要指的是这个链接- http://www.ibm.com/developerworks/linux/library/l-scheduler/
提前谢谢你,
发布于 2011-11-07 13:05:46
在Linuxv2.6.23中,集成了一个新的CFS调度器,它减少了对HZ的依赖,而更多地依赖纳秒的执行时间。
所有进程都存储在一个red-black tree中,这使得查找最左边(因此最值得执行的)任务的成本为O(1)。系统会定期(task_tick())检查另一个进程是否“更有价值”,并抢占正在运行的任务。(当然,任务可以自己产生(yield_task()),新运行的任务可以抢占正在运行的任务(check_preempt_curr())。将进程运行所花费的时间计算在内,并将其重新插入到树O(log(N))中,以找到其在RB树中的新位置。
因此,等待IO的任务计入的时间非常短,并且在树中不会移得太远--这对应于优先级提升。不在IO事件上休眠的任务在被更高优先级的任务抢占之前将使用相对较多的CPU时间。
有关更多详细信息,请务必阅读Documentation/scheduler/文档和kernel/sched*实现文件。
如果我的家庭作业项目是摆弄调度器(就像过去常见的那样),我会认真考虑添加一个新的实时调度类,如SCHED_FIFO或SCHED_RR (取决于哪一个更接近正在讨论的调度器设计),并以这种方式摆弄任务的优先级。对于OS入门课程来说,这样做可能有点陡峭--较旧的Linux或较旧的BSD内核可能更容易使用。
https://stackoverflow.com/questions/8032175
复制相似问题