文章目录

  • 一、调度器类 sched_class 简介
  • 二、CFS 调度器类源码
  • 三、next 赋值
  • 四、enqueue_task 赋值
  • 五、dequeue_task 赋值

一、调度器类 sched_class 简介


在之前的博客

  • 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h )
  • 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )
  • 【Linux 内核】调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )
  • 【Linux 内核】调度器 ⑤ ( put_prev_task、set_next_task 函数 | select_task_rq 函数 | migrate_task_rq 函数 )
  • 【Linux 内核】调度器 ⑦ ( 调度器类型 | 停机调度类 stop_sched_class | 限期调度类 dl_sched_class | 实时调度类 | 公平调度类 | 空闲调度类 )

中 , 介绍了 调度类 sched_class 结构体的源码 , 重要的 字段 以及 函数指针 ;

CFS 调度器类 fair_sched_classsched_class 结构体类型的 ;

二、CFS 调度器类源码


CFS 调度器类 fair_sched_class 的 源码 在 Linux 内核源码 linux-5.6.18\kernel\sched\fair.c 中 ,

/** All the scheduling class methods:*/
const struct sched_class fair_sched_class = {.next         = &idle_sched_class,.enqueue_task      = enqueue_task_fair,.dequeue_task      = dequeue_task_fair,.yield_task        = yield_task_fair,.yield_to_task       = yield_to_task_fair,.check_preempt_curr   = check_preempt_wakeup,.pick_next_task     = __pick_next_task_fair,.put_prev_task     = put_prev_task_fair,.set_next_task          = set_next_task_fair,
}

三、next 赋值


CFS 调度器类 fair_sched_classnext 字段赋值 ,

.next            = &idle_sched_class

idle_sched_class 是 空闲调度类 ;

参考资料 : 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )

整个 Linux 系统中有 多个 " 调度类 " , 按照 优先级进行排序 , 这些 " 调度类 " 放在一个 " 链表 " 中 , 优先级高的 " 调度类 " 先执行 , 优先级低的后执行 ;

sched_class 调度类结构体 中的 next 字段 , 就是指向 " 调度类 " 链表 中的 下一个 " 调度类 " ; ( 优先级低于本调度类 )

const struct sched_class *next;

源码路径 : linux-5.6.18\kernel\sched\sched.h#1709 ;

四、enqueue_task 赋值


CFS 调度器类 fair_sched_classenqueue_task 字段赋值 , 进程任务进入 " 可运行状态 " 时 , 调用该 enqueue_task_fair 函数 , 将 调度实体 也就是 进程 存入 执行队列 ( 红黑树 ) 中 ;

 .enqueue_task       = enqueue_task_fair,

参考资料 : 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )

sched_class 调度类结构体 中的 enqueue_task 函数指针 , 指向一个函数 , 调用该函数 , 可以将 " 进程 " 加入到 " 执行队列 " 中 , 同时 nr_running 自增 111 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
void (*enqueue_task) (struct rq *rq, struct task_struct *p, int flags);

源码路径 : linux-5.6.18\kernel\sched\sched.h#1715 ;

五、dequeue_task 赋值


CFS 调度器类 fair_sched_classdequeue_task 字段赋值 , 进程任务退出 " 可运行状态 " 时 , 调用该 dequeue_task_fair 函数 , 将 调度实体 也就是 进程 从 执行队列 ( 红黑树 ) 中 删除 , 执行出队操作 ;

 .dequeue_task       = dequeue_task_fair,

参考资料 : 【Linux 内核】调度器 ③ ( sched_class 调度类结构体分析 | next 字段 | enqueue_task 函数 | dequeue_task 函数 )

dequeue_task 调度类结构体 中的 dequeue_task 函数指针 , 指向一个函数 , 调用该函数 , 可以 从 " 执行队列 " 中删除 " 进程 " , 同时 nr_running 自减 111 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
void (*dequeue_task) (struct rq *rq, struct task_struct *p, int flags);

源码路径 : linux-5.6.18\kernel\sched\sched.h#1716 ;

【Linux 内核】CFS 调度器 ⑤ ( CFS 调度器类 fair_sched_class 源码 | next 赋值 | enqueue_task 赋值 | dequeue_task 赋值 )相关推荐

  1. Linux内核网络协议栈:udp数据包发送(源码解读)

    <监视和调整Linux网络协议栈:接收数据> <监控和调整Linux网络协议栈的图解指南:接收数据> <Linux网络 - 数据包的接收过程> <Linux网 ...

  2. linux的内核设计,Linux内核设计的艺术 清晰完整版PDF+配套源码

    <Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理>内容提要: 关于Linux内核的书已经不计其数,但这本书却是独树一帜的,它的内容代表着Linux内核研究成果的世界顶尖 ...

  3. 【Linux 内核】进程管理 ( 系统调用简介 | 进程相关系统调用源码 )

    文章目录 一.系统调用简介 二.进程相关系统调用源码 一.系统调用简介 在开发应用程序时 , 进行 " 进程创建 " , 调用的 fork() , vfork() , clone( ...

  4. 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )

    文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...

  5. 【Linux 内核】实时调度类 ⑤ ( 实时调度类 rt_sched_class 源码分析 | 结构体字段及函数指针分析 )

    文章目录 一.rt_sched_class 结构体变量类型 sched_class 二.next 字段值 三.enqueue_task 函数指针值 四.dequeue_task 函数指针值 五.yie ...

  6. 分布式定时任务—xxl-job学习(四)——调度中心web页面端api调用源码分析

    分布式定时任务-xxl-job学习(四)--调度中心web页面端api调用源码分析 前言 一.controller目录下非controller类 1.1 PermissionLimit自定义注解 1. ...

  7. java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署

    java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 java计算机毕业设计vue开发一个简单音乐播放器MyBatis+系统+LW文档+源码+调试部署 本源 ...

  8. Thinkphp内核SEO按天关键词计费排名查询系统源码

    本资源可免费获取,请至尾部读阅! Thinkphp内核SEO按天关键词计费排名查询系统源码. 功能特点: 1.会员管理: 系统共分三级会员流程.总站管理员, 代理, 和会员(会员分三个等级,普通会员, ...

  9. 最新旧物回收类网站源码V2.4版+Thinkphp内核

    正文: 旧物回收类网站源码系统是一款开源的thinkphp5.0 的 Blog系统,其衍生于优秀的内容管理系统易优cms. 旧物回收类网站源码系统秉承了易优cms的先进设计理念,并且专注于旧物回收. ...

最新文章

  1. ABAP 标准培训教程 BC400 学习笔记之五:ABAP 编程语言的变量,常量和字面量,以及文本符号
  2. u-boot向linux内核传递启动参数
  3. 领域应用 | 机器知道哪吒是部电影吗?解读阿里巴巴概念图谱AliCG
  4. C语言笔试不好应该转专业吗,你认为大学里什么学科“难学”?过来人说出几门,考试难补考更难...
  5. 初始化java工具失败,“初始化 Java 工具”期间发生了内部错误, java.lang.NullPointerException...
  6. 玩玩机器学习5——构造单层神经网络解决非线性函数(三次函数)的曲线拟合
  7. 一、开始动手开发网球平台
  8. 学生成绩查询c#语言,C#学生成绩查询系统.doc
  9. MyCat分片规则之自定义范围分片
  10. 微信推送封面尺寸_微信公众号封面图、正文配图尺寸如何?如何选择、制作?...
  11. 【计量经济学】工具变量估计与两阶段最小二乘法
  12. 阻尼牛顿法_python
  13. 研究生可以不用学英语?只要考研英语或六级分数高!
  14. 基因家族分析②:linux下blast的安装和使用
  15. Vue2之海康威视云台获取视频流数据
  16. NTC热敏电阻原理及应用
  17. 计算机科学研究算法的局限性,CNCC2018 分论坛(6) | 研究经典计算机算法已经过时了吗?...
  18. pinyin4j-2.5.0.jar 工具类
  19. C++使用AES+Base64算法对文本进行加密
  20. 图像识别教程(百度AI开放平台)

热门文章

  1. Ubuntu系统如何卸载并安装新版本的jdk(permission denied问题)
  2. CSS中z-index全解析
  3. sudo及其配置文件sudoers
  4. 算法系列15天速成——第三天 七大经典排序【下】
  5. 皮尔·卡丹的管理思想精髓:从小做到大
  6. P1642 规划 01分数规划+树形DP
  7. Leetcode 905. 按奇偶排序数组
  8. redirect_uri参数错误解决方法
  9. C# 获取当前月第一天和最后一天 计算两个日期差多少天
  10. android studio 模拟器中文乱码