文章目录



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 ;