当前位置:  技术问答>linux和unix

关于internal_add_timer函数(linux/kernel/timer.c中定义的)的一个问题

    来源: 互联网  发布时间:2016-07-31

    本文导语:  关于internal_add_timer函数的一个问题 static void internal_add_timer(tvec_base_t *base, struct timer_list *timer) { unsigned long expires = timer->expires; unsigned long idx = expires - base->timer_jiffies; struct list_head *vec; if (idx tv1.vec + i; } e...

关于internal_add_timer函数的一个问题
static void internal_add_timer(tvec_base_t *base, struct timer_list *timer)
{
unsigned long expires = timer->expires;
unsigned long idx = expires - base->timer_jiffies;
struct list_head *vec;
if (idx tv1.vec + i;
} else if (idx tv2.vec + i;
} else if (idx tv3.vec + i;
} else if (idx tv4.vec + i;
} else if ((signed long) idx tv1.vec + (base->timer_jiffies & TVR_MASK);
} else {
  int i;
  /* If the timeout is larger than 0xffffffff on 64-bit
  * architectures then we use the maximum timeout:
  */
  if (idx > 0xffffffffUL) {
  idx = 0xffffffffUL;
  expires = idx + base->timer_jiffies;
  }
  i = (expires >> (TVR_BITS + 3 * TVN_BITS)) & TVN_MASK;
  vec = base->tv5.vec + i;
}
/*
  * Timers are FIFO:
  */
list_add_tail(&timer->entry, vec);
}

请问上面这个函数(linux/kernel/timer.c中定义的)中的“else if ((signed long) idx tv1.vec + (base->timer_jiffies & TVR_MASK);
}” 这一段是什么意思啊?能帮翻译下注释也行啊!不过最好还是能帮小弟讲讲这一段代码是什么意思。多谢啦! 

|
软件时钟( struct timer_list )以双向链表( struct list_head )的形式,按照它们的到期时间保存相应的桶( tv1~tv5 )中。tv1 中保存了相对于 timer_jiffies 下256个 tick(具体看TVN_SIZE) 时间内到期的所有软件时钟; tv2 中保存了相对于 timer_jiffies 下256*64个 tick 时间内到期的所有软件时钟; tv3 中保存了相对于 timer_jiffies 下256*64*64个 tick 时间内到期的所有软件时钟; tv4 中保存了相对于 timer_jiffies 下256*64*64*64个 tick 时间内到期的所有软件时钟; tv5 中保存了相对于 timer_jiffies 下256*64*64*64*64个 tick 时间内到期的所有软件时钟。具体的说,从静态的角度看,假设 timer_jiffies 为0,那么 tv1[0] 保存着当前到期(到期时间等于 timer_jiffies )的软件时钟(需要马上被处理), tv1[1] 保存着下一个 tick 到达时,到期的所有软件时钟, tv1[n] (0

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐


  • 站内导航:


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

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

    浙ICP备11055608号-3