wangxingchao2010
wangxingchao201
全部博文(102)
2011年(8)
2010年(94)
embedded
btrace
车辆e组
youqianl
zhongzha
chinuxer
mich_mq
raolei00
hejianet
gangjian
分类: LINUX
2010-01-24 22:11:26
是的,这也是让我很郁闷的地方,查了下代码,只有put_prev_task()会让curr=null. 你看下本帖子第2页最上面的回复,commit log里作者对 se 出列的分析,好像已经变成null了。 另外,在第一页你分析dvd播放时,也提到过。 但是,肯定有这样的流程:curr变成了null,仍然会进入这个函数。 觉得应该是更新idle task队列的时候。 (待查) 现在做这两种假设:cfs_rq->curr 存在或不存在,来反推下patch的起源。 1)curr != Null 现在看来,铁定会走第二个if 的else流程,即 vruntime = min_vruntime(vruntime, se->vruntime); 但在patch之 前,if判断是这样的: if (vruntime == cfs_rq->min_vruntime) 所以,我在最早回复你的时候说,有可能curr的vruntime没变,但是它又存在,这样给cfs-rq->min_vruntime“大跃进”的机会。 2)curr == null 无论patch有没有,都会走: vruntime = se->vruntime; 我是这样理解patch的。 现在只是根据代码推断执行情况,具体的执行实例,需要再往上一层次推导,这是目前我觉得困难和疑惑的地方
结束
上一篇:关于CFS调度在china linux forum的一篇讨论帖子(3)
下一篇:update_curr()更新任务虚拟运行时间讨论
登录 注册