前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )

【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )

作者头像
韩曙亮
发布2023-03-30 13:58:25
1.9K0
发布2023-03-30 13:58:25
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、CFS 调度器概念 ( 完全公平调度器 )


CFS 调度器 ( Completely Fair Scheduler ) 是 " 完全公平调度器 " , " 完全公平调度算法 " 对每个 进程 都是 公平 的 ,

" 完全公平调度算法 " 是 基于时间片轮询 的 调度算法 ,

每个进程 都会获得一段 相同的大小的 CPU 时间片 来运行 ;

CFS 调度器 没有 时间片概念 , 该调度器会 公平地 分配 CPU 的使用时间 ;

举例说明 : 如果有

4

个相同 优先级 的进程运行在 同一个 CPU 上 , 每个进程都会被 公平 分配到

25\%

的运行时间 ;

二、CFS 调度器虚拟时钟概念 ( Virtual Runtime )


CFS 调度器 中 , 定义了 一种 " 调度模型 " , 该 模型 为 CFS 执行队列 cfs_rq 中的 每个进程 都设置了 虚拟时钟 Virtual Runtime ;

被设置了 虚拟时钟 的进程 , 执行

n

时长后 , 其 虚拟时钟 会增加

n

时长 , 其它 没有执行的进程 虚拟时钟 值保持不变 ;

三、进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实时优先级 )


参考 【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 | rt_priority 实时优先级 ) 博客 ,

linux-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程描述符 " 结构体 中定义了 进程优先级字段如下 :

代码语言:javascript
复制
	int				prio; 				 // 调度优先级
	int				static_prio; 		 // 静态优先级
	int				normal_prio; 		 // 正常优先级
	unsigned int			rt_priority; // 实时优先级

进程优先级

限期进程

实时进程

普通进程

prio 调度优先级

等于 normal_prio 字段

等于 normal_prio 字段

等于 normal_prio 字段

static_prio 调度优先级

字段 值总为 0 0 0 , 没有意义

字段 值总为 0 0 0 , 没有意义

120 + n i c e \rm 120 + nice 120+nice , 其数值越小 , 优先级越高

normal_prio 正常优先级

− 1 -1 −1

99 − r t _ p r i o r i t y 99 - \rm rt\_priority 99−rt_priority

120 + n i c e \rm 120 + nice 120+nice , 其数值越小 , 优先级越高

rt_priority 实时优先级

字段 值总为 0 0 0 , 没有意义

字段 值为 1 1 1 ~ 99 99 99 , 其数值越大 , 优先级越高

字段 值总为 0 0 0 , 没有意义

0

, 没有意义字段 值总为

0

, 没有意义

\rm 120 + nice

, 其数值越小 , 优先级越高normal_prio 正常优先级

-1
99 - \rm rt\_priority
\rm 120 + nice

, 其数值越小 , 优先级越高rt_priority 实时优先级字段 值总为

0

, 没有意义字段 值为

1

~

99

, 其数值越大 , 优先级越高字段 值总为

0

, 没有意义

四、调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 )


linux-5.6.18\include\linux\sched.h 头文件中 task_struct " 进程描述符 " 结构体 中定义的 sched_class 字段 ,

表示该进程所属的调度类 ;

代码语言:javascript
复制
const struct sched_class	*sched_class;

源码地址 : linux-5.6.18\include\linux\sched.h#680

上述可设置的调度类参考 【Linux 内核】调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类 | 公平调度类 | 空闲调度类 ) 博客 , 在 Linux 内核中 , sched_class 调度器 分为以下

5

种类型 :

  • stop_sched_class : 停机调度类 ;
  • dl_sched_class : 限期调度类 ;
  • rt_sched_class : 实时调度类 ;
  • fair_sched_class : 公平调度类 ;
  • idle_sched_class : 空闲调度类 ;

调度类 优先级 由高到低排列为 : 停机调度类 > 限期调度类 > 实时调度类 > 公平调度类 > 空闲调度类

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、CFS 调度器概念 ( 完全公平调度器 )
  • 二、CFS 调度器虚拟时钟概念 ( Virtual Runtime )
  • 三、进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实时优先级 )
  • 四、调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 )
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档