当前位置:  技术问答>数据库 iis7站长之家

关于task_struct flags的race condition

    来源: 互联网  发布时间:2015-11-30

    本文导语:  关于do_exit()中对task_struct进行访问不加锁的问题。我今天找到了一个具体的例子,希望高手指正。 fastcall NORET_TYPE void do_exit(long code) { ... ... tsk->flags |= PF_EXITING; /*  * Make sure we don't try to process any timer fir...

关于do_exit()中对task_struct进行访问不加锁的问题。我今天找到了一个具体的例子,希望高手指正。

fastcall NORET_TYPE void do_exit(long code)
{
... ...
tsk->flags |= PF_EXITING;

/*
 * Make sure we don't try to process any timer firings
 * while we are already exiting.
 */
  tsk->it_virt_expires = cputime_zero;
  tsk->it_prof_expires = cputime_zero;
tsk->it_sched_expires = 0;
... ...
}


static void process_timer_rebalance(struct task_struct *p,
    unsigned int clock_idx,
    union cpu_time_count expires,
    union cpu_time_count val)
{
... ...
do {
if (likely(!(t->flags & PF_EXITING))) {
ticks = cputime_add(virt_ticks(t), left);
if (cputime_eq(t->it_virt_expires,
       cputime_zero) ||
    cputime_gt(t->it_virt_expires, ticks)) {
t->it_virt_expires = ticks;
}
}
t = next_thread(t);
} while (t != p);
break;
... ...
}

上面两个函数对it_virt_expires的访问存在race condition,其执行顺序可能为:

1. process_timer_rebalanc()检查
       if (cputime_eq(t->it_virt_expires, cputime_zero) || 
           cputime_gt(t->it_virt_expires, ticks)) 
2. do_exit()设置flags = PF_EXITING,it_virt_expirtes = 0。
3. process_timer_rebalanc()将it_virt_expires设置为ticks。

至此,it_virt_expires在进程处于PF_EXITING状态时仍然不为0。

请高手指正我对这个race conditon分析得对不对。这个问题对kernel有没有实质的影响。

|
对于LZ的这种对技术的狂热追求精神,赞一个!!!

|
没仔细看过,你看看内核里包装do_exit的函数是不是已经加了锁

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何由pid获得task_struct?
  • ubuntu11.04 task_struct结构
  • 如何用pid获取该进程对应的task_struct
  • 进程运行时,内核的哪部分来维护task_struct结构?
  • 关于task_struct,页表,页目录
  • 如何在用户进程中获取当前进程的task_struct结构地址?
  • linux2.4.0:task_struct成员意义问题
  • struct task_struct * get_current(void)函数的解释--help!!
  • 谁有task_struct数据结构中文注解---急救啊!!!!在线等待


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3