标签:style blog http ar strong sp 2014 问题 on
本系列名为朴素的UNIX,但是也包括各个类UNIX系统的细节,本系列文章整理自本人几年来的学习笔记,着重分析各个UNIX,类UNIX的实现思想以及感悟。static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq) { struct sched_entity *se = __pick_next_entity(cfs_rq); struct sched_entity *left = se; if (cfs_rq->next && wakeup_preempt_entity(cfs_rq->next, left) < 1) se = cfs_rq->next; /* * Prefer last buddy, try to return the CPU to a preempted task. */ if (cfs_rq->last && wakeup_preempt_entity(cfs_rq->last, left) < 1) se = cfs_rq->last; clear_buddies(cfs_rq, se); return se; }很显然,要把红黑树最左下角的进程和另外两个进程,即next和last最比较,next是抢占失败的进程,而last则是抢占成功后被抢占的进程,这三个进程到底哪一个是最优的next进程呢?Linux CFS实现的判决条件是:
到底能不能选择前两个进程,则是wakeup_preempt_entity函数来决定的,代码太多无益,看下面的图解即可:
这个CFS的细节在Linux 2.6.23最初实现CFS时并没有实现。因此从最朴素的时代开始,你才能逐渐理解细节的来龙去脉,看Changelog是有好处的。不得不说,读史使人明智。
标签:style blog http ar strong sp 2014 问题 on
原文地址:http://blog.csdn.net/dog250/article/details/40017369