Linux 内核调度器 ⑤ ( put_prev_taskset_next_task 函数 | select_task_rq 函数 | migrate_task_rq 函数 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 内核调度器 ⑤ ( put_prev_taskset_next_task 函数 | select_task_rq 函数 | migrate_task_rq 函数 )相关的知识,希望对你有一定的参考价值。
文章目录
- 一、put_prev_task、set_next_task 函数 ( 进程放入执行队列 )
- 二、select_task_rq 函数 ( 为进程选择 CPU )
- 三、migrate_task_rq 函数 ( 将进程迁移到合适的 CPU 上 )
Linux 内核源码 linux-5.6.18\\kernel\\sched\\sched.h
中 , 定义的 struct sched_class
调度类结构体 , 就是 " 调度器 " 对应的类 ;
一、put_prev_task、set_next_task 函数 ( 进程放入执行队列 )
sched_class
调度类结构体 中的 put_prev_task
、set_next_task
函数指针 , 指向一个函数 , 调用该函数 , 可以将 " 进程 " , 加入到 " 执行队列 " 中 ;
- 进程 是一个 调度实体 ;
- 执行队列 是一个 红黑树 ;
void (*put_prev_task)(struct rq *rq, struct task_struct *p);
void (*set_next_task)(struct rq *rq, struct task_struct *p, bool first);
源码路径 : linux-5.6.18\\kernel\\sched\\sched.h#1724 ~ 1725 ;
二、select_task_rq 函数 ( 为进程选择 CPU )
sched_class
调度类结构体 中的 select_task_rq
函数指针 , 指向一个函数 , 调用该函数 , 可以为 " 进程 " 选择 合适的 CPU 执行 ;
- 进程 是一个 调度实体 ;
- 执行队列 是一个 红黑树 ;
int (*select_task_rq)(struct task_struct *p, int task_cpu, int sd_flag, int flags);
源码路径 : linux-5.6.18\\kernel\\sched\\sched.h#1729 ;
三、migrate_task_rq 函数 ( 将进程迁移到合适的 CPU 上 )
sched_class
调度类结构体 中的 migrate_task_rq
函数指针 , 指向一个函数 , 调用该函数 , 可以将 " 进程 " 迁移到 合适的 CPU 上执行 ;
- 进程 是一个 调度实体 ;
- 执行队列 是一个 红黑树 ;
void (*migrate_task_rq)(struct task_struct *p, int new_cpu);
源码路径 : linux-5.6.18\\kernel\\sched\\sched.h#1730 ;
以上是关于Linux 内核调度器 ⑤ ( put_prev_taskset_next_task 函数 | select_task_rq 函数 | migrate_task_rq 函数 )的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核实时调度类 ⑤ ( 实时调度类 rt_sched_class 源码分析 | 结构体字段及函数指针分析 )
Linux(内核剖析):08---进程调度之Linux调度算法(调度器类公平调度(CFS))
Linux 内核CFS 调度器 ⑥ ( CFS 调度器就绪队列 cfs_rq | Linux 内核调度实体 sched_entity | “ 红黑树 “ 数据结构 rb_root_cached )
Linux(内核剖析):11---进程调度之实时调度策略(SCHED_FIFOSCHED_RRMAX_RT_PRIO实时优先级)
Linux 内核CFS 调度器 ② ( CFS 调度器 “ 权重 “ 概念 | CFS 调度器调度实例 | 计算进程 “ 实际运行时间 “ )