栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux全局变量jiffies的用法

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux全局变量jiffies的用法

  jiffies是Linux系统中的全局变量,与时间有关,那么jiffies变量具体有哪些作用呢?下面小编就给大家介绍下Linux全局变量jiffies的用法,感兴趣的朋友不妨来了解下吧。

  系统运行时间以秒为单位,等于jiffies/Hz。

  注意,jiffies类型为无符号长整型(unsigned long),其他任何类型存放它都不正确。

  将以秒为单位的时间转化为jiffies:

  seconds * Hz

  将jiffies转化为以秒为单位的时间:

  jiffies / Hz

  相比之下,内核中将秒转换为jiffies用的多些。

  jiffies的内部表示

  jiffies定义于文件中:

  

  extern u64 __jiffy_data jiffies_64;

  extern unsigned long volatile __jiffy_data jiffies;

  ld(1)脚本用于连接主内核映像(在x86上位于arch/i386/kernel/vmlinux.lds.S中),然后用jiffies_64变量的初值覆盖jiffies变量。因此jiffies取整个jiffies_64变量的低32位。

  访问jiffies的代码只会读取jiffies_64的低32位,通过get_jiffies_64()函数就可以读取整个64位的值。在64位体系结构上,jiffies_64和jiffies指的是同一个变量。

  #if (BITS_PER_LONG 《 64)

  u64 get_jiffies_64(void);

  #else

  static inline u64 get_jiffies_64(void)

  {

  return (u64)jiffies;

  }

  #endif

  在中

  #if (BITS_PER_LONG 《 64)

  u64 get_jiffies_64(void)

  {

  unsigned long seq;

  u64 ret;

  do {

  seq = read_seqbegin(&xtime_lock);

  ret = jiffies_64;

  } while (read_seqretry(&xtime_lock, seq));

  return ret;

  }

  jiffies的回绕wrap around

  当jiffies的值超过它的最大存放范围后就会发生溢出。对于32位无符号长整型,最大取值为(2^32)-1,即429496795。如果节拍计数达到了最大值后还要继续增加,它的值就会回绕到0。

  内核提供了四个宏来帮助比较节拍计数,它们能正确的处理节拍计数回绕的问题:

  

  #define time_after(a,b) /

  (typecheck(unsigned long, a) && /

  typecheck(unsigned long, b) && /

  ((long)(b) - (long)(a) 《 0))

  #define time_before(a,b) time_after(b,a)

  #define time_after_eq(a,b) /

  (typecheck(unsigned long, a) && /

  typecheck(unsigned long, b) && /

  ((long)(a) - (long)(b) 》= 0))

  #define time_before_eq(a,b) time_after_eq(b,a)

  

  #define time_after64(a,b) /

  (typecheck(__u64, a) && /

  typecheck(__u64, b) && /

  ((__s64)(b) - (__s64)(a) 《 0))

  #define time_before64(a,b) time_after64(b,a)

  #define time_after_eq64(a,b) /

  (typecheck(__u64, a) && /

  typecheck(__u64, b) && /

  ((__s64)(a) - (__s64)(b) 》= 0))

  #define time_before_eq64(a,b) time_after_eq64(b,a)

  用户空间和HZ

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/590271.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号