1. 为什么会有高精度时钟

既然提到高精度,那么其对应的就是低精度,所以高精度时钟是为了解决低精度时钟计时精度不足的问题。举个例子帮助理解,日出而作,日落而息,古人以天为单位,安排劳作和休息。随着生产效率的提升,人们计时的粒度也在越来越小,对应的就是精度的提高。同样,Linux内核提供的低精度时钟可支持ms级别精度的时钟,随着cpu等硬件能力的提升,任务运行时间能被更精细的控制,单位时间能处理的指令数量增加后,单位时间也会被重新定义,于是能提供纳秒级别精度的高精度时钟取代了低精度时钟。

2. 高精度时钟是如何工作的

低精度时钟使用周期性产生时钟中断的时钟源,这种工作方式显然不适用于高精度时钟,纳秒级别的周期性时钟中断将是任何系统的末日,所以高精度时钟的时钟设备的工作机制是略有不同的。简单来说,可看做是一个每纳秒单调递增加1的计数器,这样两次计数之差就是经过的时间(纳秒),而这个设备是可编程的,可编程设定一个数值,当计数器计数达到该值时,就会触发一次时钟中断,高精度时钟源的中断是被编程预设的。那么,不难理解,如果周期性对时钟源进行编程,那么就可实现周期性的时钟中断。同样,也可很方便的实现一个纳秒级别的定时器,只需要将定时器的超时时间编程进去即可。

hrtimer本质是一个未来到期执行的任务,通过tick_program_event编程时钟设备,到期产生时钟中断。

流程包括3个角色

(1)hrtimer(时钟任务)

(2)clock_event_device(可编程时钟设备)

(3)timerqueue(内核用于管理时钟任务的管理队列)

设定时钟:hrtimer_init初始化获得一个hrtimer,使用enqueue_hrtimer,将hrtimer加入到timerqueue中,使用tick_program_event对clock_event_device进行编程,设定时钟的超时时间。

时钟到期:时钟设备发送时钟中断hrtimer_interrupt,中断处理执行timerqueue里最早到期时钟的任务。

下图为高精度时钟hrtimer工作流程简图。

linux 内核定时器精度_高精度时钟工作机制简介相关推荐

  1. Linux 内核定时器使用 二 高精度定时器 hrtimer 的用例

    之前介绍了timer_list内核定时器,它的精度在毫秒级别,再高一点它就无能为力了,所幸内核提供了高精度定时器 hrtimer. 源文件在linux/kernel/hrtimer.c中.接口简单.下 ...

  2. linux 内核定时器精度_linux使用select实现精确定时器详解

    在编写程序时,我们经常会用到定时器.首先看看select函数原型如下: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set * ...

  3. linux 内核定时器(低精度) — 外部看门狗程序

    文章目录 1 内核定时器介绍 2 定时器数据结构及函数 3 外部看门狗驱动使用定时器函数 1 内核定时器 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序.延时程序等.硬件定时器 提供 ...

  4. Linux 内核定时器实验————复习到这

    目录 Linux 时间管理和内核定时器简介 内核时间管理简介 内核定时器简介 Linux 内核短延时函数 硬件原理图分析 实验程序编写 修改设备树文件 定时器驱动程序编写 编写测试APP 运行测试 编 ...

  5. linux内核定时器实验

    文章目录 一.linux时间管理和内核定时器简介 1.内核时间管理简介 2.内核定时器简介 1.init_timer 函数 2.add_timer 函数 3.del_timer 函数 4.del_ti ...

  6. 如何使用 Linux 内核定时器

    1. Linux内核定时器介绍 1.1 内核时间管理 内核中很多函数需要时间管理,比如周期性的调度程序.延时程序.定时器.硬件定时器提供时钟源,时钟源频率可以设置,设置好后就周期性的产生定时中断,系统 ...

  7. linux内核定时器编程

    1.linux内核定时器基本结构和函数 1)struct timer_list 一个struct timer_list对应了一个定时器. #include <linux/timer.h> ...

  8. linux 内核 网卡驱动 移植,Linux内核移植步骤_添加DM9000网卡驱动(设备树).docx

    Linux内核移植步骤_添加DM9000网卡驱动(设备树) Linux内核移植步骤2015年05月13日星期三上午 11:05往设备树中添加网卡驱动:1.选平台,指定交叉编译工具链:(1).在Make ...

  9. Linux 内核定时器使用 一 低精度定时器

    内核定时器是一个数据结构,它告诉内核在用户定义的时间点使用用户定义的参数来执行一个用户定义的函数.其实现位于 <linux/timer.h>中. 内核提供了一组用来声明.注册和删除内核定时 ...

最新文章

  1. LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍
  2. 支持向量回归预测怎么做_财务预测模型怎么做?这些关键指标,你一定要知道...
  3. ORACLE RAC 中 SRVCTL 命令详细说明
  4. opencv 检测几何图形_使用OpenCV + ConvNets检测几何形状
  5. c++ map的存储结构_「软帝学院」java集合类框架map及相关常见问题二
  6. 神啊,6小时30分钟,完成想要的所有Lync测试
  7. 高性能高可靠性的全数字嵌入式仿真测试软件SkyEye
  8. Mr.J--验证码登陆模块
  9. 华为荣耀9x怎么解账户锁_荣耀X10顶配与30S最低配形成200元的价差,我觉得这样是最好的...
  10. Ubuntu 16.04配置CUDA 9.0+cudnn 7.0以及解决Nvidia显卡导致黑屏问题
  11. 关于MSN群 创建MSN群 使用MSN群
  12. Redis持久化数据之RDB和AOF
  13. namenode启动报错:There appears to be a gap in the edit log. We expected txid 1, but got txid 16
  14. 软件测试技能大赛山东省,2018年全国职业院校技能大赛山东省选拔赛高职组软件测试赛项规程.pdf...
  15. Linux服务器之间使用scp免密传输文件
  16. webpack打包生成的map文件_Webpack的devtool和source maps
  17. SuperMap iDesktop 之 BIM优化流程——建筑篇
  18. Matlab图像的几何变换之图像缩放
  19. C++核心准则​T.46:要求模板参数最少是正规或半正规的
  20. “隐私面单”让个人信息不再“裸奔”

热门文章

  1. 软件测试之-------软件缺陷
  2. 数组中的第K个最大元素
  3. 通过这本拼图学习Bash
  4. git tig使用技巧_如何使用Tig浏览Git日志
  5. 查期刊是否开源_新期刊HardwareX促进科学的开源硬件
  6. 开源的商业意义_为开源项目提供资金具有良好的商业意义
  7. 文档加载完成覆盖_在完成文档之前,作业尚未完成
  8. (42)css特异性
  9. 异常 | 求你别再写满屏的try-catch了,用全局异常好吗?- 夹私货-行测
  10. 子查询返回多个字段_ElasticSearch搜索之QueryFiltering、多/单字符串的多字段查询...