Chinaunix首页 | 论坛 | 博客
  • 博客访问: 326217
  • 博文数量: 102
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 1146
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-21 22:33
文章分类

全部博文(102)

文章存档

2011年(8)

2010年(94)

我的朋友

分类: LINUX

2010-01-24 22:11:26

这个系列的文章可以看作入门级别,朋友们看了cfs代码的实现后,可以对某个patch比较深入地研究下。



(member)
09-03-31 16:23
 Re: CFS 调度 []

是的,这也是让我很郁闷的地方,查了下代码,只有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的。 

现在只是根据代码推断执行情况,具体的执行实例,需要再往上一层次推导,这是目前我觉得困难和疑惑的地方 


结束

阅读(703) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~