Linux 完全公平调度器

读书笔记,Linux 系统编程 第六章高级进程管理

完全公平调度器

Linux调度器为完全公平调度器,简称为CFS。和最近华为鸿蒙提出的确定时延调度相反。

完全公平调度器和传统的Unix调度器有很大的区别。在大多数Unix系统中,包括引入CFS之前的Linux系统,在进程调度中存在两个基本的基于进程的因素:优先级和时间片。在传统的进程调度器中,会给每个就绪进程分配一个时间片。进程可能会一直运行直到消耗完分配给它的时间片。调度器会给每个进程分配优先级。进程调度器会先调度优先级高的进程,再调度优先级低的进程。这个调度算法非常简单,而且对于早期的基于时间片共享的Unix系统效果良好。但对于交互和公平性的系统而言,如现代计算机的桌面和移动设备,该算法就有些差强人意了。

完全公平调度器引入了一种不同的算法,成为公平调度,它消除了时间片作为处理器分配单元,而是给每个进程分配了处理器的分配比例。

算法逻辑如下:CFS最初给N个进程分别分配1/N的处理器时间。然后CFS通过优先级(nice值)权衡每个进程的比例,调整分配。默认的优先级为0,权值是1,则比例不变。优先级的值设置的越小(优先级越高),权值就越高,就增加给该进程的处理器比例值;优先级的值设置的越高(优先级越低),权值越低,就减少分配给该进程的比例值。

通过这种方式,CFS就基于权值分配给了每个进程处理器比例。要确定每个进程真正的执行时间,CFS需要把比例划分为一个固定周期,这个周期叫目标延迟,表示系统的调度延迟。

举个例子:假设目标延迟设置为20ms,有两个优先级相同的进程,那每个进程分配到的时间就是10ms。这样CFS就会先执行一个进程运行10ms,再执行另一个进程运行10ms,不断反复。

如果当前有200个进程怎么办,延迟如果是20ms,那每个进程只能分配到100微秒。这样大部分时间就会浪费在切换进程的上下文,CFS引入最小粒度解决这个问题。

“最小粒度”是指任意进程运行时间的基准值。所有进程,不管分配到处理器的时间比例是多少,都会至少运行最小粒度的时间。这种机制可以保证不会大部分时间浪费在进程切换上。

通过给进程分配处理器资源比例,而不是固定的时间片,CFS可以实现公平性。CFS也支持可配置的时间延迟。CFS中,进程按配额运行,时间片是根据系统可运行的进程数动态变化的,解决了传统调度器对于交互进程和IO约束性进程所面临的很多问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值