我是靠谱客的博主 甜美书本,最近开发中收集的这篇文章主要介绍linux c自写时钟,关于internal_add_timer函数(linux/kernel/timer.c中定义的)的一个问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于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中定义的)的一个问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部