本文共 1032 字,大约阅读时间需要 3 分钟。
在rt_sched_class定义的next是fair_sched_class,const struct sched_class rt_sched_class = { .next = &fair_sched_class,在fair_sched_class定义的next是idle_sched_classconst struct sched_class fair_sched_class = { .next = &idle_sched_class,从这里也可以看出调度的优先级是是rt>fair>idle而idle_sched_class的定义如下:const struct sched_class idle_sched_class = { /* .next is NULL */ /* no enqueue/yield_task for idle tasks */ /* dequeue is not valid, we print a debug message there: */ .dequeue_task = dequeue_task_idle, .check_preempt_curr = check_preempt_curr_idle, .pick_next_task = pick_next_task_idle, .put_prev_task = put_prev_task_idle,这里可以看到idle_sched_class的next是null,从这里可以知道idle_sched_class 就是最低优先级的.这里我们重点看看idle_sched_class的pick_next_task的实现static struct task_struct *pick_next_task_idle(struct rq *rq, struct task_struct *prev, struct rq_flags *rf){ put_prev_task(rq, prev); update_idle_core(rq); schedstat_inc(rq->sched_goidle); return rq->idle;}void init_idle(struct task_struct *idle, int cpu){ rq->curr = rq->idle = idle;}可以看到这里的rq->idle 就是idle进程
转载地址:http://ivnmi.baihongyu.com/