(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时间滴答,时钟周期和时钟滴答相关推荐

  1. Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】

    转自:http://blog.csdn.net/droidphone/article/details/8112948 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 数据结构 ...

  2. 测定Linux内核100ms的时钟滴答数

    在<Linux设备驱动程序>(第3版)中使用了以下代码实现了一种简单的.对精度要求不高的延时:     while ( time_before( jiffies, j1 ) )       ...

  3. linux系统时钟使用utc,如何设置时间,时区和同步系统时钟使用timedatectl命令

    该timedatectl命令是RHEL / CentOS 7和Fedora 21+根据发行,这是作为systemd系统和服务经理,用于基于sysvinit的后台程序的Linux发行版使用旧的传统dat ...

  4. linux 多核 系统时钟,Linux时间子系统之(十五):clocksource

    Linux时间子系统之(十五):clocksource 作者:linuxer 发布于:2014-12-1 19:03 分类:时间子系统 一.前言 和洋葱一样,软件也是有层次的,内核往往需要对形形色色的 ...

  5. Linux时间管理与定时器

    学习资料:LINUX驱动程序开发实例教程2 时钟周期是指1s,而时钟频率是指1s内时钟脉冲的个数: 时钟滴答:1s内的时钟中断数 1.问:时间戳和节拍总值jiffies有什么区别? 答:时间戳是通过读 ...

  6. Linux 时间系统分析

    转载自:   https://www.binss.me/blog/linux-time-system-analysis/ 新年新气象,掏出写了很长时间的文章和大家分享. Linux kernel 发展 ...

  7. arch linux 时间,System time (简体中文)

    翻译状态:本文是 System time 的翻译.上次翻译日期:2016-08-26.如果英文版本有所更改,则您可以帮助同步翻译. 一个操作系统通过如下内容确定时间:时间数值.时间标准.时区和夏令时调 ...

  8. 计算机cpu频率时钟周期,关于cpu:什么是时钟周期和时钟速度?

    我一直在读一本有关计算机处理器的书. 我遇到了一些难以理解的术语,例如时钟刻度,时钟周期和时钟速度. 如果有人可以用一种简单的语言来澄清这一点,我将非常感谢. 提前致谢 ! Ti咬. 不要使用这个词. ...

  9. linux 不同用户时间,Linux时间子系统之(一):时间的基本概念

    Linux时间子系统之(一):时间的基本概念 作者:linuxer 发布于:2014-12-23 12:22 分类:时间子系统 本文使用Q & A的方式来和大家以前探讨一下时间的基本概念 一. ...

最新文章

  1. upgrade lnmpa php.sh,LNMP 状态管理命令说明及Nginx、MySQL/MariaDB、PHP升级教程
  2. 5G最完整的PPT教材
  3. C++(六)——继承
  4. 对高并发流量控制的一点思考 推荐
  5. 模板方法(钩子函数)设计模式
  6. 电脑无法打开特定网页_监理检测网校电脑微信无法打开公路试验检测视频课程的处理方法...
  7. Part7 继承与派生 7.4派生类的构造和析构
  8. AutoFac+MVC+WebApi源码----我踩过的坑
  9. Spring Boot 2.2 增加了一个新功能,启动飞起~
  10. 没有android:padding属性,android pading的四个值,为负值时,什么情况下,有效啊
  11. 【JavaScript】使用DOM修改和查询CSS内联样式
  12. linux系统怎么拨号上网,在linux中如何拨号上网?
  13. built a JNCIS LAB系列:Chapter 1 Routing Policy
  14. 大数据舆情分析:全方位解读《战狼2》
  15. 【题解】【PAT甲】1118 Birds in Forest (25 分)(并查集)
  16. CPU,处理器插槽,逻辑处理器,处理器内核
  17. ROS2机器人坐标工具→tf2静态广播←Python
  18. usb gadget printer驱动分析
  19. 如何区分企业邮箱是哪个?电子邮箱域名是什么?真的好用吗?
  20. 新华三发布《中国城市数字经济指数白皮书(2019)》,融绘数字中国蓝图用数据记录城市数字化转型进程!

热门文章

  1. FreeSWITCH 背景音模块
  2. 韩顺平 HashSet 课后练习 2
  3. 【多线程】浅说Synchronized
  4. 背光小键盘,B.FRIENDit壁虎忍者MK2有线吃鸡游戏键盘 87键G轴笔记本台式电脑机械键盘
  5. explain mysql怎么用_mysql中explain用法详解
  6. Android应用兼容游戏手柄的分析(一)
  7. mysql中随机16位数字_MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法
  8. 特别行动队[斜率优化]
  9. 【WINDOWS / DOS 批处理】批处理文件的参数 、标签的参数
  10. 程序猿更喜欢杨超越吗?