proj291需要给Linux设计一个新的调度器,故学习一下优秀的CFS调度器是怎么实现的
CFS(完全公平调度器)的主要流程调用:
struct sched_entity
,并初始化相关属性。enqueue_task_fair()
函数,将进程插入 CFS 调度队列中,并更新调度信息。pick_next_task_fair()
函数选择下一个应该运行的进程。put_prev_task_fair()
函数更新运行进程的虚拟运行时间,并重新插入调度队列。dequeue_task_fair()
函数将其从调度队列中移除。task_tick_fair()
函数更新当前运行进程的虚拟运行时间,并检查是否需要进行调度决策。load_balance()
,以确保各个 CPU 上的任务分布均衡。虚拟运行时间 = 实际运行时间 * NICE_0_LOAD / 该任务的权重