这些操作的集合构成了内核中的 enqueue_task_fair() 函数. 实际上,enqueue_task() 是核心调度器实现的函数,用于将进程加入到就绪队列中,在该函数中调用进程对应 sched_class->enqueue_task 回调接口,对应于 cfs 调度器就是 enqueue_task_fair(): enqueue_task->enqueue_task_fairstaticvoidenqueue_task_fair(stru...
dequeue_task//core.cif(!(flags &DEQUEUE_SAVE)) psi_dequeue(p, flags& DEQUEUE_SLEEP);//【】根据此标志判断PSI应该统计的状态dequeue_entity//fair.cupdate_stats_dequeue//fair.cif(flags & DEQUEUE_SLEEP)//【】对SLEEP类型的dequeue更新任务休眠的开始时间if(tsk->state &TASK_INTERRUPTIBLE) schedstat_s...
enqueue_task() 函数是核心调度器实现的一部分,用于将进程加入到就绪队列中。函数通过调用进程对应 sched_class->enqueue_task 回调接口进行操作。值得注意的是,尽管 cfs_rq 使用红黑树管理所有 se,但红黑树仅是 cfs_rq 的一部分,还包括其他数据结构与标志位的更新。enqueue_task_fair() 函数实现核...
dequeue_pushable_task(rq, p); 作用是 将 进程 从哈希表 中删除 ; dequeue_task_rt 函数源码 : static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int flags) { struct sched_rt_entity *rt_se = &p->rt; update_curr_rt(rq); dequeue_rt_entity(rt_se, flags); dequeue_...