Linux进程管理18 - CFS调度器5 - pick_next_task_fair
文章目录
- CFS如何选择最合适的进程
- 1、pick_next_task_fair
- 1.1、全局put_prev_task函数
-
- 1.1.1、CFS的put_prev_task_fair函数
- 1.1.2、put_prev_entity
- 1.2、pick_next_entity
-
- 1.2.1、从left, second和curr进程中选择最优的进程
- 1.2.2、cfs_rq的last和next指针域
- 1.2.3、wakeup_preempt_entity检查是否可以被抢占
- 1.3、set_next_entity
- 组调度策略的支持
- 参考博文
CFS如何选择最合适的进程
接前文:
Linux进程管理6 - 核心调度 - 主调度器schedule
- 每当进程任务切换的时候,也就是schedule函数执行时,调度器都需要选择下一个将要执行的任务。
- 在CFS调度器中,是通过pick_next_task_fair函数完成的
- 当需要进程任务切换的时候,pick_next_task_fair函数的传入参数中包含了需要被切换出去的任务,也就是pre_task;
- 当pre_task不是普通进程时,也就是调度类不是CFS,那么它就不使用sched_entity的调度实体来参与调度,因此会执行simple分支,通过put_pre_task函数来通知系统当前的任务需要被切换,而不是通过put_prev_entity函数来完成;
- 当pre_task是普通进程时,调用pick_next_entity来选择下一个执行的任务&#x