__schedule流程中pick_next_task代码学习

本文深入探讨了Linux内核中的CFS(完全公平调度)如何选择下一个执行的任务。介绍了pick_next_task接口的工作原理,包括它如何判断调度策略、更新任务执行参数、重新插入任务到红黑树以及在没有运行任务时如何进行负载均衡(idle_balance)。重点讲解了CFS的pick_next_task_fair方法,阐述了任务执行时间、vruntime计算、rbtree操作以及抢占策略。
摘要由CSDN通过智能技术生成

前面已经学习了deactivate_task这个接口,它是将当前的任务从rq中移除,移除之后自然需要pick_next_task来选取下一个执行的任务。Pick_next_task接口会首先判断当前程序的调度类是不是公平调度,以及rq中running状态的任务数和rq中cfs调度rq中的running状态的任务数目,条件符合就使用CFS的pick_next_task_fair方法选取下一个执行任务,核心的调用流程如下:

pick_next_task_fair

    put_prev_task

    pick_next_entity

    set_next_entity

    idle_balance

put_prev_task是将当前的进程重新加入到rq中,以CFS为例,如果prev任务还处于rq中,流程会调用updata_curr来更新rq上曾在执行任务的关键参数,流程如下:

1,计算已经执行的时间 exec_time = now - curr->exec_start,更新执行时间

curr->exec_start = now;

2,更新curr总共执行的时间curr->sum_exec_runtime += exec_time;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值