概述
关于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
您可能感兴趣的文章:
最后
以上就是甜美书本为你收集整理的linux c自写时钟,关于internal_add_timer函数(linux/kernel/timer.c中定义的)的一个问题的全部内容,希望文章能够帮你解决linux c自写时钟,关于internal_add_timer函数(linux/kernel/timer.c中定义的)的一个问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复