linux内核时间操作

linux内核是通过定时器中断来跟踪时间流;使用"HZ"宏表示1秒的时钟中断次数,并使用"jiffies"及"jiffies_64"变量来记录时钟中断次数,在系统引导时计数器初始化为 0
1 内核时间比较api, 比较jiffies计数器
#include <linux/jiffies.h>
int time_after(unsigned long a, unsigned b);
int time_before(unsigned long a, unsigned b);
int time_after_eq(unsigned long a, unsigned b);
int time_before_eq(unsigned long a, unsigned b);
2 内核表述方法(jiffies)与时间表述方法的转换
时间表述方法可用的数据结构有"struct timeval"和"struct timespec"。其中"struct timeval"为老式的数但较为流行,它使用秒和毫秒值;而"struct timespec"为新式的,它使用的是秒与纳秒值。
#include <linux/time.h>
unsigned long timespec_to_jiffies(struct timespec *value);
void jiffies_to_timespec(unsigned jiffies, struct timespec *value);
unsigned long timeval_to_jiffies(struct timeval *val);
void jiffies_to_timeval(unsigned long jiffies, struct timeval *value);
3 获取jiffies_64值
#include <linux/jiffies.h>
u64 get_jiffies_64(void);
4 获取CPU时钟周期数值
使用jiffies值测量时间差间隔在大部分情况下已经足够,但如果测量更短的时间差,则可以使用处理器特定寄存器, rdtsc宏是与体系结构相关,而get_cycles则与体系结构无关。
#include <asm/msr.h>
rdtsc(low32, high32);
rdtscl(low32);
rdtscsll(var64);
#include <linux/timex.h>
cycles_t get_cycles(void);
5 获取当前时间
#include <linux/time.h>
unsigned long mktime(unsigned int year, unsigned int mon,
                     unsigned int day,  unsigned int hour,
                     unsigned int min, unsigned int sec);
void do_gettimeofday(struct timeval *tv);
struct timespec current_kernel_time(void)


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值