前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Linux 内核】调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )

【Linux 内核】调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )

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

文章目录

Linux 内核源码 linux-5.6.18\kernel\sched\sched.h 中 , 定义的 struct sched_class 调度类结构体 , 就是 " 调度器 " 对应的类 ;

一、yield_task 函数 ( 放弃 CPU 执行权限 )


sched_class 调度类结构体 中的 yield_task 函数指针 , 指向一个函数 , 调用该函数 , 该 " 进程 " 将 放弃 已分配的 CPU 时间片 的 执行权限 , 先将进程从 " 执行队列 " 中出队 , 然后再 放入到队列末尾 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;

也就是说 调用该函数 , 将 调度实体 ( 进程 ) 存放到了 红黑树 ( 执行队列 ) 的 最右端 ( 末尾 ) ;

代码语言:javascript
复制
void (*yield_task)   (struct rq *rq);

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

二、check_preempt_curr 函数 ( 检查进程是否可以被抢占 )


sched_class 调度类结构体 中的 check_preempt_curr 函数指针 , 指向一个函数 , 调用该函数 , 主要是检查 当前 " 进程 " 是否可以被 其它进程 抢占 ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
代码语言:javascript
复制
void (*check_preempt_curr)(struct rq *rq, struct task_struct *p, int flags);

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

三、task_struct 函数 ( 选择运行进程 )


sched_class 调度类结构体 中的 task_struct 函数指针 , 指向一个函数 , 调用该函数 , 选择 之后 要 开始运行 的 " 进程 " ;

  • 进程 是一个 调度实体 ;
  • 执行队列 是一个 红黑树 ;
代码语言:javascript
复制
struct task_struct *(*pick_next_task)(struct rq *rq);

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、yield_task 函数 ( 放弃 CPU 执行权限 )
  • 二、check_preempt_curr 函数 ( 检查进程是否可以被抢占 )
  • 三、task_struct 函数 ( 选择运行进程 )
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档