Linux 内核调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )相关的知识,希望对你有一定的参考价值。
文章目录
Linux 内核源码 linux-5.6.18\\kernel\\sched\\sched.h
中 , 定义的 struct sched_class
调度类结构体 , 就是 " 调度器 " 对应的类 ;
一、yield_task 函数 ( 放弃 CPU 执行权限 )
sched_class
调度类结构体 中的 yield_task
函数指针 , 指向一个函数 , 调用该函数 , 该 " 进程 " 将 放弃 已分配的 CPU 时间片 的 执行权限 , 先将进程从 " 执行队列 " 中出队 , 然后再 放入到队列末尾 ;
- 进程 是一个 调度实体 ;
- 执行队列 是一个 红黑树 ;
也就是说 调用该函数 , 将 调度实体 ( 进程 ) 存放到了 红黑树 ( 执行队列 ) 的 最右端 ( 末尾 ) ;
void (*yield_task) (struct rq *rq);
源码路径 : linux-5.6.18\\kernel\\sched\\sched.h#1717 ;
二、check_preempt_curr 函数 ( 检查进程是否可以被抢占 )
sched_class
调度类结构体 中的 check_preempt_curr
函数指针 , 指向一个函数 , 调用该函数 , 主要是检查 当前 " 进程 " 是否可以被 其它进程 抢占 ;
- 进程 是一个 调度实体 ;
- 执行队列 是一个 红黑树 ;
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
函数指针 , 指向一个函数 , 调用该函数 , 选择 之后 要 开始运行 的 " 进程 " ;
- 进程 是一个 调度实体 ;
- 执行队列 是一个 红黑树 ;
struct task_struct *(*pick_next_task)(struct rq *rq);
源码路径 : linux-5.6.18\\kernel\\sched\\sched.h#1722 ;
以上是关于Linux 内核调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核线程调度示例一 ④ ( pthread_attr_init 初始化线程属性对象 | 完整代码示例 )
Linux 内核线程调度示例一 ④ ( pthread_attr_init 初始化线程属性对象 | 完整代码示例 )
Linux 内核实时调度类 ④ ( 实时运行队列 rt_rq 源码分析 | 实时运行队列 rt_rq 结构体字段分析 | activert_nr_runningcurrnext 字段 )
Linux(内核剖析):08---进程调度之Linux调度算法(调度器类公平调度(CFS))
Linux 内核CFS 调度器 ⑥ ( CFS 调度器就绪队列 cfs_rq | Linux 内核调度实体 sched_entity | “ 红黑树 “ 数据结构 rb_root_cached )
Linux 内核CFS 调度器 ② ( CFS 调度器 “ 权重 “ 概念 | CFS 调度器调度实例 | 计算进程 “ 实际运行时间 “ )