首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu中的动态进程调度

问Ubuntu中的动态进程调度
EN

Stack Overflow用户
提问于 2011-11-07 10:30:45
回答 1查看 1.3K关注 0票数 2

我想修改动态更改进程优先级的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/

提前谢谢你,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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内核可能更容易使用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8032175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档