- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程调度器 Linux中进程的分类 实时进程 要求尽快相应,处理紧急任务 交互进程 处理和用户的交互,这一类进程大部分时间在等待相应设备的输入,当有数据输入时要尽快相应 后台进程 不需要和用户交互,在后台运行,不需要很快的相应 进程的优先级 静态优先级 不随时间而改变,内核不会主动修改它,只能通过系统调用nice去修改 动态优先级 调度程序通过增加或减少进程静态优先级的值来奖励I/O消耗型进程或者惩罚CPU消耗型进程,调整后的优先级即成为动态优先级 实时优先级 只对实时进程有意义 早期调度器 Linux2.4的调度器 基于优先级的调度器 运行队列 运行队列是一个全局数据结构,调度器对它的所有操作都必须使用自旋锁进行保护,导致了各个处理器之间的等待。 查找最佳进程所耗费的时间为O(n)级。 时间片对调度的影响 所有处于TASK_RUNNING状态的进程的时间片都被用完之后,才对所有进程重新分配时间片。包装了每个进程都有机会得到执行。 不支持内核抢占 负载均衡 进程被切换下来,如果还有CPU空闲,或者某个CPU上运行的进程优先级比自己低,那么它就会被调到那个CPU上运行。 这种负载均衡方式非常简单,但是进程迁移比较频繁。2.4内核的使用经验表明,这种负载均衡弊大于利 O(1)调度器 早期的2.6内核调度算法 运行队列 每个CPU都维护一个自己的运行队列,这大大减小了竞争 数据结构复杂,其中包含了一个活跃优先级数组(active)和一个过期优先级数组(expired)。 当活跃数组中的一个进程用完自己的时间片之后,就被移动到过期数组,移动过程中对其施加片进行重新计算 当活跃数组中的所有进程都耗尽自己的时间片之后,把active和expired指针进行交换。 时间片的影响 根据时间片是否耗尽将可运行进程分为活跃和过期两大类,前者相对于后者拥有绝对的调度优先权。 在活跃数组中,剩余时间片不在作为营销调度优先级的一个因素 优先级计算时机 分散到多处进行。 避免了类似于2.4内核中可运行进程很多时计算进程耗时过长,影响响应时间 支持内核抢占 负载均衡 引入调度域的概念,将全体CPU一层一层地划分成不同的区域 最上层的调度域包含多个子调度域,每个子调度域都是一个CPU子集 每个调度域中的CPU又分为若干个CPU组,且满足任一CPU唯一存在于一个组中。组的负载被定义为其每一个CPU的负载总和 只有当某个组的负载远远低于同意调度域的另一组的负载,才会发生调度域的平衡操作 SD调度器 主要用于提升Linux内核对交互式进程的即使响应能力,其目标是应用于桌面系统 楼梯算法为为每一个优先级维护一个可运行进程队列,并将这些队列组织在活跃优先级数组中,并从中选取下一个被调度的进程。 当进程耗尽自己的时间片之后,被添加到活跃数组中的低一级优先级对应的进程队列里。当时间片再次用完时,就再被放入更低一级的进程队列。 时间片 粗粒度 由一定数量的细粒度时间片组成 细粒度 能避免进程饥饿现象 高优先级的进程最终会和低优先级的进程竞争 RSDL调度器 对SD算法的改进 重新引入了expired数组。它为每一个优先级对应的进程队列都分配一个组时间配额,tg,即该优先级上所有可运行进程能够使用的总时间。为每一个进程分配了一个优先级时间配额,tp 当进程用完自身的tp时,被转移到低一优先级对应的进程队列 当高优先级对应的进程队列用完了它们的tg时,无论该队列中是否还有进程tp未用完,所有属于该队列的进程都被强制转移到低一优先级的进程队列里 当active数组中的一个进程用光自己的时间片之后,被转移到expired数组。当active数组为空或者所有的进程都被降低到最低优先级时,,交换active和expired数组的指针。 CFS调度器 CFS是Completely Fair Schedule(完全公平调度)的缩写,不是绝对的公平。 CFS引入了模块化、完全公平调度、组调度等一系列特性 CFS调度器的虚拟时钟 CFS把进程的优先级转化为权重(weight),每个进程的优先级对应一个权重,优先级越高,权重越大。每个CPU有一个cfs_rq对象,它维护着就绪队列中进程的总权重。 下面是静态优先级到nice的转化 1438#define MAX_USER_RT_PRIO 100 1439#define MAX_RT_PRIO MAX_USER_RT_PRIO 1440 1441#define MAX_PRIO (MAX_RT_PRIO + 40) 1442#define DEFAULT_PRIO (MAX_RT_PRIO + 20) 1341static const int prio_t
原创力文档


文档评论(0)