linux中的jiffies变量
来源:互联网 发布:ping网络命令的使用 编辑:程序博客网 时间:2024/06/06 12:31
注意,jiffies类型为无符号长整型(unsigned long),其他任何类型存放它都不正确。
将以秒为单位的时间转化为jiffies:
seconds * Hz
将jiffies转化为以秒为单位的时间:
jiffies / Hz
相比之下,内核中将秒转换为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位。
- #if (BITS_PER_LONG < 64)
- u64 get_jiffies_64(void);
- #else
- static inline u64 get_jiffies_64(void)
- {
- return (u64)jiffies;
- }
- #endif
- 在<Time.c(kernel)>中
- #if (BITS_PER_LONG < 64)
- u64 get_jiffies_64(void)
- {
-
unsignedlong seq; -
u64ret; - do {
-
seq = read_seqbegin(&xtime_lock); -
ret = jiffies_64; -
} while(read_seqretry(&xtime_lock, seq)); - return ret;
- }
- jiffies的回绕wrap around
- #definetime_after(a,b)
\ -
(typecheck(unsigned long, a) &&\ -
typecheck(unsigned long, b) &&\ -
((long)(b) - (long)(a) < 0)) - #definetime_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) - #definetime_after_eq64(a,b)
\ -
(typecheck(__u64, a) && \ -
typecheck(__u64, b) && \ -
((__s64)(a) - (__s64)(b) >= 0)) - #definetime_before_eq64(a,b)
time_after_eq64(b,a)
- 用户空间和HZ
- 在<Time.c(kernel)>中
- clock_t jiffies_to_clock_t(long x)
- {
- #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
- return x / (HZ / USER_HZ);
- #else
-
u64 tmp= (u64)x * TICK_NSEC; -
do_div(tmp, (NSEC_PER_SEC / USER_HZ)); - return (long)tmp;
- #endif
- }
- unsigned long clock_t_to_jiffies(unsigned long x)
- {
- #if (HZ % USER_HZ)==0
- if (x >= ~0UL / (HZ / USER_HZ))
- return ~0UL;
- return x * (HZ / USER_HZ);
- #else
-
u64jif; - if (x >= ~0UL / HZ * USER_HZ)
- return ~0UL;
-
jif = x* (u64) HZ; -
do_div(jif, USER_HZ); - return jif;
- #endif
- }
- u64 jiffies_64_to_clock_t(u64 x)
- {
- #if (TICK_NSEC % (NSEC_PER_SEC / USER_HZ)) == 0
-
do_div(x, HZ / USER_HZ); - #else
-
x *=TICK_NSEC; -
do_div(x, (NSEC_PER_SEC / USER_HZ)); - #endif
- return x;
- }
- 在<Div64.h(include\asm-i385)>中
- #define do_div(n,base) ({ \
-
unsignedlong __upper, __low, __high, __mod, __base; \ -
__base =(base); \ -
asm("":"=a" (__low), "=d" (__high):"A" (n)); \ -
__upper= __high; \ - if (__high) { \
-
__upper = __high % (__base); \ -
__high = __high / (__base); \ -
} \ -
asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (__base), "0"(__low), "1" (__upper)); \ -
asm("":"=A" (n):"a" (__low),"d" (__high)); \ -
__mod;\ - })
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量
- linux中的jiffies变量 [转]
- 嵌入式 linux中的jiffies变量小结
- 内核中的jiffies变量
- Linux内核中的jiffies
- Linux内核中的jiffies
- Linux内核中的jiffies
- Linux内核中的jiffies
- Linux中的HZ tick jiffies
- Linux内核中的jiffies(转)
- SolidWorks异步模式开发,使用COM接口获取Array数据时的注意事项
- Linux~~头文件
- I和IDR帧的区别
- “三合一”Web应用App.bg:Instagram + Foursquare + Twitter
- C# 调用 C++ dll 函数 时传递字符串 需要注意的问题
- linux中的jiffies变量
- 嵌入式Linux用mdev实现U盘自动挂载
- python中的yield
- Linux 2.6内核 动态加载字符设备驱动模块
- 数据库顺序输出
- 设计模式学习之路——Builder
- 数据库主键选择策略
- 循环赛日程表
- 关于SPList的Update及AllowUnsafeUpdates