- 论坛徽章:
- 1
|
本帖最后由 linuxfellow 于 2011-12-12 00:19 编辑
回复 1# embeddedlwp
刚刚转向linux,好多linux的代码都不是很熟,我的回答只是基本的,并不针对linux源代码。
什么是系统节拍? system tick
系统节拍是内核/系统能有效运用的最小时间单位。如果一个CPU主频264M, 那么系统硬件能区分的最小时间片断就是1/(264M),这个最小的时间段叫timebase; 这个时间太小,基本上只能让timebase计数器+1, 其他任何事情都干不了。
内核/系统有一些事情是要定期去做:
定期刷新看门狗
给periodic task发送唤醒事件
检查soft alram 等
设计系统/内核必须决定这些rountine事情的频率;做得太勤,太多CPU的运算能力花在这些事情上,影响系统的performance. 做得太慢,就会影响系统对事件反应能力,影响实时功能。这个频率就是系统节拍,system tick. 系统选定一个timer作为 system timer。在264MHzCPU的实时系统里,我选1ms作为system tcik频率。system timer每1ms中断一次,在system timer的中断处理程序里,我处理前面列出的那些rountine事情,并把jiffies++; 这就是说,我的jiffies是每1ms增加一次。
回到你的问题:
初始化 jiffies =INITIAL_JIFFIES
最大非溢出计数:如果jiffies变量类型是32位无符号int
max_count = 0xffffffff
or
max_count = 0xffffffff ffffffff (64-bit)
如果没有溢出,系统启动后运行的节拍数:
jiffies - ITIAL_JIFFIES
系统启动来5分钟的节拍数就是(到jiffies溢出的前一拍):
max_count - INITIAL_JIFFIES
因为系统节拍从INITIAL_JIFFIES开始计数,运行的节拍数应该是你读到的节拍数扣除起始值。
多说了一点,给了一些系统节拍的背景,希望能有帮助 |
|