linux的时钟中断需要两个全局变量,分别是xtime与jiffies。
linux的时钟中断的两个内核全局变量,分别是xtime与jiffies。
1、xtime
一个timeval结构类型变量,是从cmos电路(rtc)中取得的时间,一般是从某一历史时刻开始到现在的时间,也就是为了取得我们操作系统上显示的日期。这个就是“实时时钟”,它的精确度是微秒。获取方式是通过linux-2.6.0\linux-2.6.0\include\linux\time.h(低精度)头文件里面的do_gettimeofday函数获取。(从Linux内核获取时间函数do_gettimeofday)
struct timespec类型的结构体变量,定义见文件linux-2.6.0\linux-2.6.0\include\linux\time.h,其声明如下:
struct timespec
{
__kernel_time_t tv_sec; /* 秒数 */
long tv_nsec; /* 纳秒数,1纳秒(ns)=1e-9秒(s) */
};
extern struct timespec xtime;
//1 纳秒=0.000001 毫秒
//1 纳秒=0.001 微秒
// 微秒,时间单位。一秒的一百万分之一,即1秒=10的6次方微秒。缩写为μs。
//1秒(s)=1000000微秒(μs)
//纳秒:原称毫微秒,就是10^(-9)秒(10亿分之一秒),即10^(-6)毫秒(1000000分之一毫秒)。1纳秒,等于1微秒的千分之一
//此结构体用于内核记录时间,其中字段tv_sec的单位是秒(s),表示整秒数,字段tv_nsec的单位是纳秒(ns),表示不足一秒的部分,在此其取值范围是0~999999999。
2、HZ(赫兹(Hz)是国际单位制中频率的单位,它是每秒中的周期性变动重复次数的计量)
Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来保存每一秒有几次timer interrupts。如HZ为1000,代表每秒有1000次timer interrupts。
HZ可在编译核心时设定,可设定100、250、300或1000。核心版本预设值为250。
HZ这个值可以理解为操作系统的时钟频率,这个时钟的精度远低于硬件的时钟频率。如HZ设置为250,那么为一秒钟250次,每次为4ms,因此操作系统的时钟精度只能达到4ms。
3、Tick(节拍)
Tick是HZ的倒数,即系统计时器 interrupt每发生一次中断的时间(两次连续间隔)。如HZ为250时(linux2.5时设定值),tick为4ms(millisecond)。
[root@k3master ~]# cat /boot/config-`uname -r` | grep 'CONFIG_HZ='
CONFIG_HZ=1000 //这个就是内核hz //1秒内的中断的次数
4、Jiffies
在<linux/jiffies.h>,定义了Jiffies(unsigned long)这个变量。每发生一次timer interrupt,Jiffies变数会被加一。一秒内时钟中断的次数等于HZ,所以jiffies一秒内增加的值也就是HZ。
在 Linux 2.6 中,系统时钟每 1 ms中断一次(时钟频率,用 HZ 宏表示,定义为 1000,即每秒中断 1000 次,2.4 中定义为 100,很多应用程序也仍然沿用 100 的时钟频率),这个时间单位称为一个 jiffie。jiffies 与绝对时间之间的转换, 用两个宏来完成两种时间单位的互换:JIFFIES_TO_NS()、NS_TO_JIFFIES()。jiffies是记录着从电脑开机到现在总共的时钟中断次数。
linux的时钟中断需要两个全局变量,分别是xtime与jiffies。的更多相关文章
- Linux之时钟中断
from:深入分析Linux内核源码(http://oss.org.cn/kernel-book/) 时钟中断的产生 Linux的OS时钟的物理产生原因是可编程定时/计数器产生的输出脉冲,这个脉冲送入 ...
- linux异步IO的两种方式【转】
转自:https://blog.csdn.net/shixin_0125/article/details/78898146 知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个C ...
- Linux下切换使用两个版本的JDK
Linux下切换使用两个版本的JDK 我这里原来已经配置好过一个1.7版本的jdk. 输出命令: java -version [root@hu-hadoop1 sbin]# java -version ...
- 转:Linux下同时启动两个Tomcat进行设置
转: Linux下同时启动两个Tomcat进行设置 解压tar.gz:tar -zxvf apache-tomcat-6.0.41.tar.gz 至相应的路径下,可解压至两个不同的路径或者相同的路径下 ...
- linux环境中,两个不同网段的机器互通
linux环境中,两个不同网段的机器互通 人评论3690人阅读2019-11-18 14:50:21 环境如下: host1 单网卡 eth0 172.24.100.15/16 hos ...
- Linux 安装 Nodejs 的两种方式
Linux 安装 Nodejs 的两种方式 目录 Linux 安装 Nodejs 的两种方式 一.压缩包安装 Nodejs 二.源码编译安装 Nodejs 一.压缩包安装 Nodejs 下载 Node ...
- Linux网络栈下两层实现
http://www.cnblogs.com/zmkeil/archive/2013/04/18/3029339.html 1.1简介 VLAN是网络栈的一个附加功能,且位于下两层.首先来学习Linu ...
- 解决Linux终端乱码的两则例子
现象描述 我们先来说一下出现乱码的原因. 例子 先举个实际的例子,我们一般通过ssh远程到服务器上进行操作.当在终端上执行一些有输出的任务时,有可能会遇到乱码,特别是输出中有中文时. 比如,我登陆上o ...
- linux用户管理中两个重要的“父子”配置文件
在Linux中主要通过用户配置文件来查看和修改用户信息,因此下面我们将介绍两个重要的用户配置文件,让你能够更好的hold住你的用户. 一:父文件/etc/passwd 1.查看配置文件/etc/pas ...
随机推荐
- LGP2414题解
难不成是我后缀自动机学魔怔了,AC 自动机都能套上线段树 题意:给你一颗 Trie,每次询问两个节点 \(u,v\),\(u\) 代表的字符串在 \(v\) 代表的字符串中出现了多少次. 让我们思考一 ...
- SpringBoot 集成 knife4j (Swagger2)
SpringBoot 集成 knife4j (Swagger2) 前提 :本文 spring boot版本为 2.6.1 ,knife4j 版本为:3.0.3 1.初始化项目,导入pom依赖 < ...
- Net Framework 中托管代码与非托管代码的区别
托管代码与非托管代码的区别 1 简单的说,就是代码被编译成MSIL后在.net的Framework下运行,同操作系统底层的交互都交给framework去做. 所谓非托管代码就是脱离了Framework ...
- Spring Data ElasticSearch的使用
1.什么是Spring Data Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务. S ...
- vim设置自动添加头部注释
#自己改了改vim开头文件,如下图# 友友们可以直接修改·SetTitle() if v:lang =~ "utf8$" || v:lang =~ "UTF-8$&quo ...
- web服务器-nginx优化
web服务器-nginx优化 一 并发优化 nginx工作模式: 主进程 + 工作进程 启动工作进程数量 worker_processes 4; #指定运行的核的编号,采用掩码的方式设置编号 work ...
- Django orm Q查询补充
Q的简单用法 from django.db.models import Q q = Q() q.children.append(("username", "lyj&quo ...
- CVE-2017-12635(Couchdb垂直权限绕过漏洞)
简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...
- docker学习笔记(4)- 应用数据管理(容器外)
简介 docker storage driver支持了image分层存储和容器可写层的存储管理,使用挂载主机目录的方式可以将数据存储在主机的文件系统上或内存中. 之前学习过镜像的分层存储,以Docke ...
- windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看
windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...