对linux内核中jiffies+Hz表示一秒钟的理解
jiffies在内核中是一个全局变量,它用来统计系统启动以来系统中产生的总节拍数,这个变量定义在include/linux/jiffies.h中,定义形式如下。
unsigned long volatile jiffies;
想要理解jiffies的含义,我们需要首先理解时钟 节拍率 节拍的概念。
一、时钟
时钟应用于处理器的定时信号,它使得处理器在时钟中运行,依靠信号时钟,处理器便知道什么时候能够执行它的下一个功能。在Linux系统中,时钟分为硬件时钟(又叫实时时钟)和软件时钟(又叫系统时钟)。在对内核编程中,我们经常用到的是系统时钟,系统时钟的主要任务有如下三点:
1.保证系统时间的正确性。
2.防止进程超额使用CPU。
3.记录CPU和资源消耗的统计时间。
系统时钟的初始值在系统启动时,通过读取硬件时钟获得,然后由Linux内核来维护。在系统运行中,系统时钟的更新是根据系统启动后的时钟滴答数来更新的。
实时时钟的主要作用是提供计时和产生精确的时钟中断。实时时钟是用来持久存放系统时间的设备,即便系统关闭后,它也可以靠主板上的微型电池提供的电力保持系统的计时。
二、节拍率
节拍率其实就是系统定时器产生中断的频率,所谓频率即指中断每秒钟产生多少次,即Hz(赫兹)。不同的体系结构的系统而言,节拍率不一定相同。
节拍率(Hz)的值可以在文件include/asm-x86/param.h中看到,定义如下。
#define Hz 1000
三、节拍
节拍就是指系统中连续两次时钟中断的间隔时间,该值等于节拍率分之一,即1/Hz。因为系统再启动时已经设置了Hz,所以系统的节拍也可以确定。内核正是利用节拍来计算系统时钟和系统运行时间的。
三、jiffies变量
jiffies用来统计系统启动以来系统中产生的总节拍数。该变量在系统启动时被初始化为0,接下来没进行一次时钟中断,jiffies自动加1。因此,知道了总的节拍数,然后再除以Hz,即可知系统的运行时间(jiffies/Hz)。
对于jiffies+Hz的含义,jiffies表示当前的系统时钟中断数,Hz表示一秒后的时钟中断的增加量,假设time=jiffies+Hz,正如上面所说 ,内核正是利用节拍数来计算系统时钟和系统运行时间的,则通过jiffies+Hz即可间接表示一秒钟。
如果系统中某个程序运行一段时间后,需要比较该运行时间是否超过一秒,即可通过比较time和程序运行后的jiffies值来判断是否超过一秒。当然此时,我们需要考虑jiffies变量的回绕问题,不可直接用if(time > jiffies)来比较,linux系统提供了4个宏定义来解决用户空间利用jiffies变量进行时间比较时可能产生的回绕现象,如下所示:
- #define time_after(unknown,known) ((long)(known)-(long)(unknown)<0)
- <pre name="code" class="cpp">#define time_before(unknown,known) ((long)(unknown)-(long)(known)<0)
#define time_after_eq(unknown,known) ((long)(unknown)-(long)(unknown)<=0)
- #define time_before_eq(unknown,known) ((long)(unknown)-(long)(known)<=0)
对linux内核中jiffies+Hz表示一秒钟的理解的更多相关文章
- (五)对linux内核中jiffies+Hz表示一秒钟的理解
jiffies在内核中是一个全局变量,它用来统计系统启动以来系统中产生的总节拍数,这个变量定义在include/Linux/jiffies.h中,定义形式如下. unsigned long volat ...
- linux内核中jiffies的回绕问题【转】
本文转载自:http://blog.csdn.net/yuanlulu/article/details/6019862 ======================================== ...
- [转载]linux内核中的HZ介绍
时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 <Linux/param.h>中定义或该文件包含的某个子平台相关文件中.作为通用 ...
- 对Linux内核中进程上下文和中断上下文的理解
内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间.现代的CPU都具有不同的操作模式,代表不同的 级别,不同的级别具有不同的功能,在较低的级别中将禁止某 ...
- Linux内核中进程上下文和中断上下文的理解
參考: http://www.embedu.org/Column/Column240.htm http://www.cnblogs.com/Anker/p/3269106.html 首先明白一个概念: ...
- Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...
- 向linux内核中添加外部中断驱动模块
本文主要介绍外部中断驱动模块的编写,包括:1.linux模块的框架及混杂设备的注册.卸载.操作函数集.2.中断的申请及释放.3.等待队列的使用.4.工作队列的使用.5.定时器的使用.6.向linux内 ...
- 浅析linux内核中timer定时器的生成和sofirq软中断调用流程(转自http://blog.chinaunix.net/uid-20564848-id-73480.html)
浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_timer添加的定时器timer在内核的软中断中发生调用,__run_timers会spin_lock_irq(& ...
- 浅析linux内核中timer定时器的生成和sofirq软中断调用流程【转】
转自:http://blog.chinaunix.net/uid-20564848-id-73480.html 浅析linux内核中timer定时器的生成和sofirq软中断调用流程 mod_time ...
随机推荐
- [Week17] 个人阅读作业
个人阅读作业Week17 reading buaa software 解决的问题 这是提出问题的博客链接:http://www.cnblogs.com/SivilTaram/p/4830893 ...
- week8:个人博客作业
团队作业(5) 要求 在PM 带领下, 每个团队深入分析下面行业的App, 找到行业的Top 5 (从下面的三个备选中,任选一个行业即可) 英语学习/词典App 笔记App 旅游行业的手机App 选择 ...
- ping出现dup问题
华为交换机收到mac地址漂移告警: Dec 24 2018 16:48:22+08:00 HW5320 %%01SECE/4/UCSUPPRESSRESUME(l) [66]:MAC address ...
- 联想一体机怎么设置u盘启动|联想一体机bios改U盘启动方法(转)
本文转自:http://www.xitongcheng.com/jiaocheng/xtazjc_article_29090.html 所需工具: 1.联想Lenovo品牌一体机 2.启动U盘:大白菜 ...
- PSP(4.6——4.12)以及周记录
1.PSP 4.6 8:30 10:30 20 100 博客 B Y min 12:00 13:00 5 55 Account A Y min 13:05 13:15 0 10 站立会议 A Y mi ...
- Java 策略模式(Strategy)
创建一个能够根据所传递的参数对象的不同而具有不同行为的方法 要执行的算法固定不变,封装到一个类(Context)中 策略就是传递进去的参数对象,它包含执行代码 策略接口 /** * 策略接口 */ p ...
- docker--从仓库下载镜像到推送自己的项目到仓库步骤详解
怎样从仓库下载的镜像,变成容器,并在容器中制作项目,再将容器变成镜像,然后将镜像推送到仓库? 一:从官网下载镜像 官方的https://hub.docker.com/提供了数十万个镜像提供大家下载 以 ...
- MT【173】齐次消元单变量
已知$x\ge0,x^2+(y-2)^2=1,W=\dfrac{3x^2+2\sqrt{3}xy+5y^2}{x^2+y^2}$,求$W$的最值. 提示:$x\ne0$时,设$t=\dfrac{y}{ ...
- 【BZOJ1093】[ZJOI2007]最大半联通子图(Tarjan,动态规划)
[BZOJ1093][ZJOI2007]最大半联通子图(Tarjan,动态规划) 题面 BZOJ 洛谷 洛谷的讨论里面有一个好看得多的题面 题解 显然强连通分量对于题目是没有任何影响的,直接缩点就好了 ...
- 【bzoj4066】 简单题
http://www.lydsy.com/JudgeOnline/problem.php?id=4066 (题目链接) 题意 维护一个矩阵,两个操作,给某一个元素加上A,求其中一个子矩阵的元素之和.强 ...