linux时间管理 之 jiffies

1、jiffies

又称时钟滴答,是一个全局变量,它的值在系统引导的时候初始化为0,在时钟中断初始化完成后,每次时钟中断发生,在时钟中断处理例程中都会将jiffies的值 +1。

jiffies_64:为了解决jiffies溢出问题,更重要的是通过jiffies_64可以知道自开机以来的时间间隔。

2、HZ

HZ表示时钟中断发生的频率。可以在.config的配置文件中改写。1/HZ是每个jiffies+1的时间间隔。

3、通过jiffies可以进行时间的比较和时间转换

4、时间比较

32位                                                    64位

time_after(a,b)                                    time_after64(a,b)

time_before(a,b)                                 time_before64(a,b)

time_after_eq(a,b)                              time_after_eq64(a,b)

time_before_eq(a,b)                           time_before_eq64

time_in_range(a,b,c)                           time_in_range(a,b,c)

5、时间转换

a、jiffies和msecs以及usecs的转换:

unsigned int jiffies_to_msecs(const unsigned long);

unsigned int jiffies_to_usecs(const unsigned long);

unsigned long msecs_to_jiffies(const unsigned int m);

unsigned long usecs_to_jiffies(const unsigned int u);

b、jiffies和timespec以及timeval的转换

在用户空间,应用程序更多的使用秒以及毫秒等时间形式,而在内核中多使用jiffes。

内核定义了struct timeval 和 struct timespec 两种数据结构

struct timespec {

__kernel_time_t tv_sec;

long              tv_nsec;

}

struct timeval {

__kernel_time_t          tv_sec;

__kernel_suseconds_t  tv_usec;

}

相互转换函数:

unsigned long timespec_to_jiffies(const struct timespec *value);

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

unsigned long timeval_to_jiffies(const struct timeval *value);

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

6、要注意的是jiffies的精度问题。如果HZ = 1000,则jiffies增加1代表1ms。

如果要用到更高精度的始终,要用其他的硬件机制。

原文链接: http://blog.csdn.net/lin2jian4liang4/article/details/49383761

时间: 2025-01-06 15:27:25

linux时间管理 之 jiffies的相关文章

Linux时间管理涉及数据结构和传统低分辨率时钟的实现

上篇文章大致描述了Linux时间管理的基本情况,看了一些大牛们的博客感觉自己写的内容很匮乏,但是没办法,只能通过这种方式提升自己--闲话不说,本节介绍下时间管理下重要的数据结构 设备相关数据结构 //时钟源结构 struct clocksource{} //时钟设备结构 struct tick_device { struct clock_event_device *evtdev; enum tick_device_mode mode;//记录对应时钟事件设备的模式 }; enum tick_de

linux时间管理

/etc/sysconfig/clock 该配置文件可用来设置用户选择何种方式显示时间.如果硬件时钟为本地时间,则UTC设为0,并且不用设置环境变量TZ.如果硬件时钟为UTC时间,则要设置UTC为1,并设置环境变量TZ(或配置文件/etc/TZ)为时区信息,如“Asia/Shanghai”. hwclock 查看硬件时钟: [[email protected]]$ hwclock –r /etc/localtime Linux的系统时区是通过符号连接/etc/localtime来得到的.可以通过

linux时间管理笔记!

1.和第三方时间同步 yum install ntpdate -y 微软公司授时主机(美国) time.windows.com    我比较喜欢用这个. 台警大授时中心(台湾) asia.pool.ntp.org 中科院授时中心(西安) 210.72.145.44 网通授时中心(北京) 219.158.14.130 ...... [[email protected] ~]# ntpdate time.windows.com  7 Sep 08:54:47 ntpdate[1288]: adjus

[linux内核][linux]linux内核时间管理基础

一,linux时间管理基础http://blog.csdn.net/droidphone/article/details/7975694http://blog.csdn.net/smilingjames/article/details/6205540linux所有时间基础都是以低层硬件为基础的,低层硬件有GPT和cpu local timer,比如GPT的时钟源为13M HZlinux低层时间的架构分为clock source,clock event device,clock source上层分

Linux内核——定时器和时间管理

定时器和时间管理 系统定时器是一种可编程硬件芯片.它能以固定频率产生中断.该中断就是所谓的定时器中断.它所相应的中断处理程序负责更新系统时间,还负责执行须要周期性执行的任务. 系统定时器和时钟中断处理程序是Linux系统内核管理机制中的中枢. 另外一个关注的焦点是动态定时器--一种用来推迟运行程序的工具. 比方说.假设软驱马达在一定时间内都未活动,那么软盘驱动程序会使用动态定时器关闭软驱马达. 内核能够动态创建或销毁动态定时器. 内核中的时间观念 内核在硬件的帮助下计算和管理时间. 硬件为内核提

Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)

在前面章节的讨论中,我们一直基于一个假设:Linux中的时钟事件都是由一个周期时钟提供,不管系统中的clock_event_device是工作于周期触发模式,还是工作于单触发模式,也不管定时器系统是工作于低分辨率模式,还是高精度模式,内核都竭尽所能,用不同的方式提供周期时钟,以产生定期的tick事件,tick事件或者用于全局的时间管理(jiffies和时间的更新),或者用于本地cpu的进程统计.时间轮定时器框架等等.周期性时钟虽然简单有效,但是也带来了一些缺点,尤其在系统的功耗上,因为就算系统目

linux下的时间管理概述

2017/6/21 时间这一概念在生活中至关重要,而在操作系统中也同样重要,其在系统中的功能绝不仅仅是给用户提供时间这么简单,内核的许多机制都依赖于时间子系统.但凡是要在某个精确的时间执行某个事件,必然会用到时间子系统.而内核中定时器的发展可以以2.6版本的内核作为一个分界点.之前主要是低分辨率定时器,2.6开发期间便引入了高分辨率定时器.分辨率的高低意味着时间粒度的大小. 本节重点介绍下涉及到的几个重点概念 时钟设备 周期时钟/动态时钟 高分辨率/低分辨率 定时器 时钟设备时钟设备算是最低层的

《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理

系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要. 主要内容: 系统时间 定时器 定时器相关概念 定时器执行流程 实现程序延迟的方法 定时器和延迟的例子 1. 系统时间 系统中管理的时间有2种:实际时间和定时器. 1.1  实际时间 实际时间就是现实中钟表上显示的时间,其实内核中并不常用这个时间,主要是用户空间的程序有时需要获取当前时间, 所以内核中也管理着这个时间. 实际时间的获取是在开机后,内核初始化时

linux设备驱动归纳总结(七):1.时间管理与内核延时【转】

本文转载自:http://blog.chinaunix.net/uid-25014876-id-100005.html linux设备驱动归纳总结(七):1.时间管理与内核延时 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这节将介绍一些很枯燥的内核,大体是内核中时间的概念和内核延时的使用,并没有源代码. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx