(五)对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变量进行时间比较时可能产生的回绕现象,如下所示:
time_before()
time_after()
(五)对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 ...
随机推荐
- 安装 Win10 & Ubuntu 16.04 双系统以及 Ubuntu 配置深度学习环境记录
0. 前言 坑爹的Ubuntu晚上运行还是好好的,第二天中午的时候打开机器发现屏幕分辨率不正常了:2K屏显示800*600左右的分辨率(无法调节),一个图标一拳头大,窗口和网页显示不全.Google查 ...
- DPDK 网卡RSS(receive side scaling)简介
网卡RSS(receive side scaling)简介 RSS是一种网卡驱动技术,能让多核系统中跨多个处理器的网络收包处理能力高效能分配.注意:由于同一个核的处理器超线程共享同一个执行引擎,这个效 ...
- springmvc项目搭建四-基于前端框架完善页面的数据显示
上一篇把前端框架先放上去了,现在开始前后端进行交互,对数据进行显示. 效果如图所示...中间经历了数据显示不上去的问题,是对于spring的注解了解不够,问题及其解决可以参照上一篇问题处理... 目前 ...
- 使用JSON数据格式模拟股票实时信息
JQueryStock.html <!DOCTYPE html> <head> <meta charset="UTF-8"> <title ...
- 习题:就是干(DP)
洛谷2301 题目描述 眼看着老师大军浩浩荡荡的向机房前进.LOI 的同学们决定动用自己的力量来保卫他们的好朋友loidc.现在每个人都要挑选自己的武器——两根木棍.一根用做远距离投掷,另一根用做近距 ...
- P2574 XOR的艺术
题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r ...
- Contest Hunter 模拟赛09 C [树形dp+差分]
题面 传送门 思路 又双叒叕是一道差分题我没想出来......记录一下 首先这个"所有祖先都比自己小"等价于"父亲比自己小" 这题的基础dp方程很显然,$dp[ ...
- # centos7下FFmpeg环境部署记录
# centos7下FFmpeg环境部署记录 随着视频在网站上的应用越来越多,越来越多的网站服务器需要支持视频转码,视频压缩,FFmpeg是目前最好用的网站服务器后台转码程序,应用最多.FFmpeg是 ...
- 插头dp题表
bzoj1814: Ural 1519 Formula 1 bzoj3125: CITY bzoj1210: [HNOI2004]邮递员 bzoj2331: [SCOI2011]地板 bzoj1187 ...
- MFC随机数
void CMFCDemoDlg::OnClickedGetrand() { wchar_t str[]; //srand((unsigned)time(NULL)); int num = rand( ...