linux时间滴答,时钟周期和时钟滴答
(1)时钟周期(clock cycle)的频率:8253/8254 PIT的本质就是对由晶体振荡器产生的时钟周期进行计数,晶体振荡器在1秒时间内产生的时钟脉冲个数就是时钟周期的频率。Linux用宏 CLOCK_TICK_RATE来表示8254 PIT的输入时钟脉冲的频率(在PC机中这个值通常是1193180HZ),该宏定义在include/asm-i386/timex.h头文件中:
#define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
(2)时钟滴答(clock tick):我们知道,当PIT通道0的计数器减到0值时,它就在IRQ0上产生一次时钟中断,也即一次时钟滴答。PIT通道0的计数器的初始值决定了要过多少时钟周期才产生一次时钟中断,因此也就决定了一次时钟滴答的时间间隔长度。
(3)时钟滴答的频率(HZ):也即1秒时间内PIT所产生的时钟滴答次数。类似地,这个值也是由PIT通道0的计数器初值决定的(反过来说,确定了时钟滴答的频率值后也就可以确定8254 PIT通道0的计数器初值)。Linux内核用宏HZ来表示时钟滴答的频率,而且在不同的平台上HZ有不同的定义值。对于ALPHA和IA62平台HZ的值是1024,对于SPARC、MIPS、ARM和i386等平台HZ的值都是100。该宏在i386平台上的定义如下(include/asm- i386/param.h):
#ifndef HZ
#define HZ 100
#endif
根据HZ的值,我们也可以知道一次时钟滴答的具体时间间隔应该是(1000ms/HZ)=10ms。
(4)时钟滴答的时间间隔:Linux用全局变量tick来表示时钟滴答的时间间隔长度,该变量定义在kernel/timer.c文件中,如下:
long tick = (1000000 + HZ/2) / HZ; /* timer interrupt period */
tick变量的单位是微妙(μs),由于在不同平台上宏HZ的值会有所不同,因此方程式tick=1000000÷HZ的结果可能会是个小数,因此将其进行四舍五入成一个整数,所以Linux将tick定义成(1000000+HZ/2)/HZ,其中被除数表达式中的HZ/2的作用就是用来将 tick值向上圆整成一个整型数。
另外,Linux还用宏TICK_SIZE来作为tick变量的引用别名(alias),其定义如下(arch/i386/kernel/time.c):
#define TICK_SIZE tick
(5)宏LATCH:Linux用宏LATCH来定义要写到PIT通道0的计数器中的值,它表示PIT将没隔多少个时钟周期产生一次时钟中断。显然LATCH应该由下列公式计算:
LATCH=(1秒之内的时钟周期个数)÷(1秒之内的时钟中断次数)=(CLOCK_TICK_RATE)÷(HZ)
类似地,上述公式的结果可能会是个小数,应该对其进行四舍五入。所以,Linux将LATCH定义为(include/linux/timex.h):
/* LATCH is used in the interval timer and ftape setup. */
#define LATCH ((CLOCK_TICK_RATE + HZ/2) / HZ) /* For divider */
类似地,被除数表达式中的HZ/2也是用来将LATCH向上圆整成一个整数。
linux时间滴答,时钟周期和时钟滴答相关推荐
- Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】
转自:http://blog.csdn.net/droidphone/article/details/8112948 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 数据结构 ...
- 测定Linux内核100ms的时钟滴答数
在<Linux设备驱动程序>(第3版)中使用了以下代码实现了一种简单的.对精度要求不高的延时: while ( time_before( jiffies, j1 ) ) ...
- linux系统时钟使用utc,如何设置时间,时区和同步系统时钟使用timedatectl命令
该timedatectl命令是RHEL / CentOS 7和Fedora 21+根据发行,这是作为systemd系统和服务经理,用于基于sysvinit的后台程序的Linux发行版使用旧的传统dat ...
- linux 多核 系统时钟,Linux时间子系统之(十五):clocksource
Linux时间子系统之(十五):clocksource 作者:linuxer 发布于:2014-12-1 19:03 分类:时间子系统 一.前言 和洋葱一样,软件也是有层次的,内核往往需要对形形色色的 ...
- Linux时间管理与定时器
学习资料:LINUX驱动程序开发实例教程2 时钟周期是指1s,而时钟频率是指1s内时钟脉冲的个数: 时钟滴答:1s内的时钟中断数 1.问:时间戳和节拍总值jiffies有什么区别? 答:时间戳是通过读 ...
- Linux 时间系统分析
转载自: https://www.binss.me/blog/linux-time-system-analysis/ 新年新气象,掏出写了很长时间的文章和大家分享. Linux kernel 发展 ...
- arch linux 时间,System time (简体中文)
翻译状态:本文是 System time 的翻译.上次翻译日期:2016-08-26.如果英文版本有所更改,则您可以帮助同步翻译. 一个操作系统通过如下内容确定时间:时间数值.时间标准.时区和夏令时调 ...
- 计算机cpu频率时钟周期,关于cpu:什么是时钟周期和时钟速度?
我一直在读一本有关计算机处理器的书. 我遇到了一些难以理解的术语,例如时钟刻度,时钟周期和时钟速度. 如果有人可以用一种简单的语言来澄清这一点,我将非常感谢. 提前致谢 ! Ti咬. 不要使用这个词. ...
- linux 不同用户时间,Linux时间子系统之(一):时间的基本概念
Linux时间子系统之(一):时间的基本概念 作者:linuxer 发布于:2014-12-23 12:22 分类:时间子系统 本文使用Q & A的方式来和大家以前探讨一下时间的基本概念 一. ...
最新文章
- upgrade lnmpa php.sh,LNMP 状态管理命令说明及Nginx、MySQL/MariaDB、PHP升级教程
- 5G最完整的PPT教材
- C++(六)——继承
- 对高并发流量控制的一点思考	推荐
- 模板方法(钩子函数)设计模式
- 电脑无法打开特定网页_监理检测网校电脑微信无法打开公路试验检测视频课程的处理方法...
- Part7 继承与派生 7.4派生类的构造和析构
- AutoFac+MVC+WebApi源码----我踩过的坑
- Spring Boot 2.2 增加了一个新功能,启动飞起~
- 没有android:padding属性,android pading的四个值,为负值时,什么情况下,有效啊
- 【JavaScript】使用DOM修改和查询CSS内联样式
- linux系统怎么拨号上网,在linux中如何拨号上网?
- built a JNCIS LAB系列:Chapter 1 Routing Policy
- 大数据舆情分析:全方位解读《战狼2》
- 【题解】【PAT甲】1118 Birds in Forest (25 分)(并查集)
- CPU,处理器插槽,逻辑处理器,处理器内核
- ROS2机器人坐标工具→tf2静态广播←Python
- usb gadget printer驱动分析
- 如何区分企业邮箱是哪个?电子邮箱域名是什么?真的好用吗?
- 新华三发布《中国城市数字经济指数白皮书(2019)》,融绘数字中国蓝图用数据记录城市数字化转型进程!
热门文章
- FreeSWITCH 背景音模块
- 韩顺平 HashSet 课后练习 2
- 【多线程】浅说Synchronized
- 背光小键盘,B.FRIENDit壁虎忍者MK2有线吃鸡游戏键盘 87键G轴笔记本台式电脑机械键盘
- explain mysql怎么用_mysql中explain用法详解
- Android应用兼容游戏手柄的分析(一)
- mysql中随机16位数字_MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法
- 特别行动队[斜率优化]
- 【WINDOWS / DOS 批处理】批处理文件的参数 、标签的参数
- 程序猿更喜欢杨超越吗?