linux时间管理

#include <linux/param.h> HZ

 

HZ 符号指定了每秒产生的时钟嘀哒的数目.

 

#include <linux/jiffies.h> volatile unsigned long jiffies; u64 jiffies_64;

 

jiffies_64 变量每个时钟嘀哒时被递增; 因此, 它是每秒递增 HZ 次. 内核代码 几乎常常引用 jiffies, 它在 64-位平台和 jiffies_64 相同并且在 32-位平台是 它低有效的一半.

 

int time_after(unsigned long a, unsigned long b); int time_before(unsigned long a, unsigned long b); int time_after_eq(unsigned long a, unsigned long b);

int time_before_eq(unsigned long a, unsigned long b);

 

这些布尔表达式以一种安全的方式比较 jiffies, 没有万一计数器溢出的问题和不 需要存取 jiffies_64.

 

u64 get_jiffies_64(void);

 

获取 jiffies_64 而没有竞争条件.

 

#include <linux/time.h>

unsigned long timespec_to_jiffies(struct timespec *value);

void jiffies_to_timespec(unsigned long jiffies, struct timespec *value); unsigned long timeval_to_jiffies(struct timeval *value);

void jiffies_to_timeval(unsigned long jiffies, struct timeval *value);

 

在 jiffies 和其他表示之间转换时间表示.

 

#include <asm/msr.h> rdtsc(low32,high32); rdtscl(low32);

 

176

 

rdtscll(var32);

 

x86-特定的宏定义来读取时戳计数器. 它们作为 2 半 32-位来读取, 只读低一半, 或者全部读到一个 long long 变量.

 

#include <linux/timex.h> cycles_t get_cycles(void);

 

以平台独立的方式返回时戳计数器. 如果 CPU 没提供时戳特性, 返回 0.

 

#include <linux/time.h>

unsigned long mktime(year, mon, day, h, m, s);

 

返回自 Epoch 以来的秒数, 基于 6 个 unsigned int 参数. void do_gettimeofday(struct timeval *tv);

返回当前时间, 作为自 Epoch 以来的秒数和微秒数, 用硬件能提供的最好的精度. 在大部分的平台这个解决方法是一个微秒或者更好, 尽管一些平台只提供 jiffies 精度.

 

struct timespec current_kernel_time(void); 返回当前时间, 以一个 jiffy 的精度.

posted @ 2019-07-06 11:13  樊伟胜  阅读(141)  评论(0)    收藏  举报