在一些系统调用中需要指定时间是用CLOCK_MONOTONIC还是CLOCK_REALTIME,以前总是搞不太清楚它们之间的差别,现在终于有所理解了。

CLOCK_MONOTONIC是monotonic time,而CLOCK_REALTIME是wall time。
monotonic time字面意思是单调时间,实际上它指的是系统启动以后流逝的时间,这是由变量jiffies来记录的。系统每次启动时jiffies初始化为0,每来一个timer interrupt,jiffies加1,也就是说它代表系统启动后流逝的tick数。jiffies一定是单调递增的,因为时间不够逆嘛!
wall time字面意思是挂钟时间,实际上就是指的是现实的时间,这是由变量xtime来记录的。系统每次启动时将CMOS上的RTC时间读入xtime,这个值是"自1970-01-01起经历的秒数、本秒中经历的纳秒数",每来一个timer interrupt,也需要去更新xtime。
以前我一直想不明白,既然每个timer interrupt,jiffies和xtime都要更新,那么不都是单调递增的吗?那它们之间使用时有什么区别呢?昨天看到一篇文章,终于明白了,wall time不一定是单调递增的。因为wall time是指现实中的实际时间,如果系统要与网络中某个节点时间同步、或者由系统管理员觉得这个wall time与现实时间不一致,有可能任意的改变这个wall time。最简单的例子是,我们用户可以去任意修改系统时间,这个被修改的时间应该就是wall time,即xtime,它甚至可以被写入RTC而永久保存。一些应用软件可能就是用到了这个wall time,比如以前用vmware workstation,一启动提示试用期已过,但是只要把系统时间调整一下提前一年,再启动就不会有提示了,这很可能就是因为它启动时用gettimeofday去读wall time,然后判断是否过期,只要将wall time改一下,就可以欺骗过去了。

转载于:https://www.cnblogs.com/zbie/archive/2012/09/21/2696792.html

[转][Timer学习]wall time和monotonic time相关推荐

  1. linux 系统时间编程(1) wall time和monotonic time科普

    在一些系统调用中需要指定时间是用CLOCK_MONOTONIC还是CLOCK_REALTIME,以前总是搞不太清楚它们之间的差别,现在终于有所理解了. CLOCK_MONOTONIC是monotoni ...

  2. getwayworker timer_Java定时器之Timer学习二

    方法名称 schedule() 和 scheduleAtFixedRate() 的区别 两种情况看区别 首次计划执行的时间早于当前时间 比如说:当前时间是 11:06, 但是首次计划执行的时间应该为: ...

  3. Java定时器Timer学习之一

    2019独角兽企业重金招聘Python工程师标准>>> 种类: 接通延时型定时器:接通延时型定时器是各种PLC(可编程控制器)中最常见最基本的定时器,这种定时器在Siemens的PL ...

  4. NRF51822裸机TIMER学习笔记

    外设TIMER 时钟介绍 HFCLK: ① 又称之为高速时钟, 是 nRF5X SOC 的主时钟, 一般是 16MHZ. ② HFCLK 时钟有 2 个来源: 一个是内部 RC 振荡器(RC Osci ...

  5. Let‘s Go Rust 系列之定时器 Ticker Timer

    前言 在实际项目开发中,经常会有定时任务的功能开发需求,定时任务主要分为两种, 1,在固定的时刻执行某个任务,也就是 Timer 2,基于固定的时间间隔,周期的执行某个任务,也就是Ticker ​ 很 ...

  6. c# timer使用

    C#里现在有3个Timer类: System.Windows.Forms.Timer System.Threading.Timer System.Timers.Timer 这三个Timer我想大家对S ...

  7. Java解惑 电子书

    --表达式谜题 Java 谜题 1--表达式谜题 谜题 1:奇数性 下面的方法意图确定它那唯一的参数是否是一个奇数.这个方法能够正确运转 吗? public static boolean isOdd( ...

  8. 翻译下 golang package time

    # 关于 `package time` 个人体会:"wall clock" 可以理解为就是实际的时钟,而 "monotonic clock" 则是程序内部的时钟 ...

  9. 2019-12-18 syscall(SYS_clock_gettime, CLOCK_MONOTONIC_RAW

    转载: 在linux下获取高精度单调递增的时间,只能使用: syscall(SYS_clock_gettime, CLOCK_MONOTONIC_RAW, &monotonic_time); ...

最新文章

  1. Python学习之路7-函数
  2. 架构师必备技能指南:SaaS(软件即服务)架构设计
  3. java西游记壹_岩浆数码再现手机RPG游戏--西游记壹
  4. Eclipse中设置在创建新类时自动生成注释的方法
  5. 一些不常用的代码汇总(不断更新)
  6. javascript动态创建table
  7. 配置Server Side TAF
  8. 打CALL APP 项目进展 总体计划
  9. jira7.12.1安装与破解
  10. 开发规范 - UML图
  11. python ide_Python id()
  12. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录
  13. windows下重设mysql的root密码
  14. 【QT】QT字体详解
  15. Python 全栈打造某宝客微信机器人
  16. 51单片机流水灯三种实现方法
  17. Datawhale组队学习周报(第044周)
  18. 基于python的招聘信息可视化系统
  19. Shiro实现用户认证和授权
  20. bootstrap4导航栏居右

热门文章

  1. C# Excel 导入
  2. 2017年实时更新系统hosts文件(不能访问时才会更新)不要用于非法行为 只供内部测试...
  3. 39.原码、反码、补码的转换
  4. @清晰掉 GNU C __attribute__
  5. Python基本语法(基于3.x)
  6. C++的沉迷与爱恋——侯捷
  7. android source镜像源_说要替代安卓的Fuchsia OS,国内镜像上线了!
  8. java 正则表达式 demo_JAVA正则表达式语法
  9. leetcode103JAVA_[LeetCode] 103. Binary Tree Zigzag Level Order Traversal Java
  10. 【Paper】2009_Controllability of Multi-Agent Systems from a Graph-Theoretic Perspective