Linux的时钟处理机制
从上面的说明中可以看出:软件时钟是按照其到期时间相对于当前正在处理 的软件时钟的到期时间( timer_jiffies 的数值)保存在 struct tvec_base 变量中的。而且这个到期时间的最大相对值(到期时间 - timer_jiffies )为 0xffffffffUL ( tv5 最后一个元素能够表示的相对到期时间的最大值)。 还需要注意的是软件时钟的处理是局部于 CPU 的,所以在 SMP 系统中每一 个 CPU 都保存一个类型为 struct tvec_base 的变量,用来组织、管理本 CPU 的软件时钟。从图中也可以看出 struct tvec_base 变量是 per-CPU 的(关于 per-CPU 的变量原理和使用参见参考资料)。 由于以后的讲解经常要提到每个 CPU 相关的 struct tvec_base 变量,所以 为了方便,称保存软件时钟的 struct tvec_base 变量为该软件时钟的 base , 或称 CPU 的 base 。 3.3 添加或删除软件时钟 在了解了软件时钟的数据组织关系之后,现在来看一下如何添加以及删除一 个软件时钟。 3.3.1 添加软件时钟 在 Linux 内核中要添加一个软件时钟,首先必须分配 struct timer_list 类型的变量,然后调用函数 add_timer() 将该软件时钟添加到相应调用 add_timer 函数的 CPU 的 base 中。 Add_timer 是对函数 __mod_timer() 的 一层包装。函数 __mod_timer() 的代码如清单3-2: 清单3-2 __mod_timer 函数
(编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |