【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 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值