当前位置: 技术问答>linux和unix
关于jiffies_64的问题
来源: 互联网 发布时间:2016-07-14
本文导语: 既然jiffies是unsigned long 型的变量,在32位体系结构下是32位,在64位下是64位,那为什么还需要有第二个变量jiffies_64呢?书上说是为了兼容性?没太明白,jiffies_64存在的必要性。烦请高手指点,谢谢! |...
既然jiffies是unsigned long 型的变量,在32位体系结构下是32位,在64位下是64位,那为什么还需要有第二个变量jiffies_64呢?书上说是为了兼容性?没太明白,jiffies_64存在的必要性。烦请高手指点,谢谢!
|
你从哪里看来的观点?
如果你看源代码,可以看到在timer, net, media里面都需要用到jiffies_64。
|
我刚才说的 50 天就溢出也不太准确, 应该加上一个 当 HZ 是 1000 时,
这个值是可以精确计算出来的。
jiffies可记录的最大秒数为(2^32 -1)/1000=4294967.29秒 约和 50天。
Jiffies于系统开机时,并非初始化成零,而是被设为-300*HZ,所以会很快溢出,
当jiffies变量的值超过它的最大存放范围后就会发生溢出,在溢出前,定时器节拍计数最大为4294967295,如果节拍数达到了最大值后还要继续增加的话,它的值会回绕到0。回绕会引起许多问题。
|
jiffies 的值是一直增加的, 32 位 的 jiffies 值 在 50 天左右就 溢出了。
如果你的程序有使用 jiffies 的值来做一些计算, 50天后就会有问题了,你必须考虑并处理这个问题。
但 jiffies_64 不会有这样的问题。
如果你的程序有使用 jiffies 的值来做一些计算, 50天后就会有问题了,你必须考虑并处理这个问题。
但 jiffies_64 不会有这样的问题。
|
书上说10分钟左右就溢出吧,因为linux内核的开发者故意让问题早点出来给你看到,把jiffies初始值初始化为一个快要溢出到值了。
楼主说的兼容性也可以理解啊,因为以前人家在32位使用到 jiffies_64,在移到64位上去,代码都不用修改了。
|
jiffies_64在32位机下仍然是64位,因此你有可能进行更大范围的tick计数。
|
为了以后的64位机 做准备的吧?
|
一个简单的例子,你现在是在32位的机器上做视频相关文件处理程序,32位机器上默认的最大文件大小是2G,原因是read() write()里面的文件指针off_set是int型。
如果高清时代来了,你处理的视频一个就超过了4G甚至更大,文件到头了就2G大小。那么就要重新定义off_set为 long long型了。off_t64
如果高清时代来了,你处理的视频一个就超过了4G甚至更大,文件到头了就2G大小。那么就要重新定义off_set为 long long型了。off_t64