Linux内核中的jiffies:时间管理详解

 更新时间:2025年05月15日 09:50:14   作者:忧虑的乌龟蛋  
这篇文章主要介绍了Linux内核中的jiffies:时间管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、jiffies基本概念

jiffies是Linux内核中的全局变量,记录系统启动后的"时钟滴答"次数。

每当系统时钟中断发生,jiffies值就增加1。

它是内核测量时间的基本单位,类似于我们日常生活中的"秒"。

二、HZ:jiffies的心跳频率

如果把jiffies比作心跳计数,那么HZ就是心跳的频率。具体来说,HZ定义了系统时钟每秒钟"心跳"的次数,也就是jiffies每秒钟增长的次数。

例如:如果HZ=100,就像是心脏每秒跳动100次,那么每个jiffie就代表了1/100秒,即10毫秒。如果HZ=1000,就像心脏每秒跳动1000次,那么每个jiffie就代表了1毫秒。

三、jiffies的特性

  • 变量类型:声明为volatile,确保每次读取最新值
  • 内存对齐:使用缓存行对齐减少多处理器系统的缓存冲突
  • 初始值:不从0开始,而是从INITIAL_JIFFIES(通常为300秒滴答数)开始
  • 存储大小:32位系统时为无符号32位整数,64位系统时为无符号64位整数

四、jiffies溢出与时间比较

jiffies会周期性溢出,使得简单的大小比较不可靠。

内核提供了专门的比较函数处理溢出情况:

  • time_after(a,b):检查a是否在b之后
  • time_before(a,b):检查a是否在b之前
  • time_after_eq(a,b):检查a是否在b之后或等于b
  • time_before_eq(a,b):检查a是否在b之前或等于b

这些函数通过将无符号差转为有符号数来处理溢出问题。

五、时间单位换算

jiffies与常用时间单位的换算关系:

  • 1秒 = HZ个jiffies
  • 1毫秒 ≈ HZ/1000个jiffies

内核提供了换算函数:

  • msecs_to_jiffies():毫秒转jiffies
  • jiffies_to_msecs():jiffies转毫秒

由于HZ可能不是1000的倍数,换算过程可能有舍入误差。

总结

jiffies是Linux内核时间管理的基础,尽管有精度限制,但其简单性和可靠性使它成为最常用的时间计数机制。理解jiffies的工作原理和最佳实践对内核和驱动开发至关重要。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux 相对路径和绝对路径的使用

    Linux 相对路径和绝对路径的使用

    这篇文章主要介绍了Linux 相对路径和绝对路径的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • Ubuntu E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)

    Ubuntu E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时

    这篇文章主要介绍了Ubuntu E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用),本文通过两种方案给大家分析问题所在原因,需要的朋友可以参考下
    2019-10-10
  • linux 服务器自动备份脚本的方法(mysql、附件备份)

    linux 服务器自动备份脚本的方法(mysql、附件备份)

    这篇文章主要介绍了linux 服务器自动备份脚本(mysql、附件备份),本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • linux直接运行py文件的方法

    linux直接运行py文件的方法

    今天小编就为大家分享一篇linux直接运行py文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Linux服务器快速搭建MinIO对象存储全过程

    Linux服务器快速搭建MinIO对象存储全过程

    在Linux服务器上搭建MinIO存储服务器的步骤,MinIO支持从二进制文件或包管理器下载,用户需要配置环境变量、创建存储目录并设置服务权限,然后启动服务并访问Web控制台进行验证,文章还提到可配置防火墙、Nginx反向代理及多节点部署
    2025-09-09
  • Linux服务器上使用docker的简单教程

    Linux服务器上使用docker的简单教程

    这篇文章主要为大家详细介绍了Linux服务器上使用docker的简单教程,文中的示例代码简洁易懂,有需要的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • centos系统为php安装memcached扩展步骤

    centos系统为php安装memcached扩展步骤

    这篇文章主要介绍了centos系统为php安装memcached扩展的步骤,大家参考使用吧
    2014-01-01
  • Ubuntu18.04 Server版安装及使用(图文)

    Ubuntu18.04 Server版安装及使用(图文)

    这篇文章主要介绍了Ubuntu18.04 Server版安装及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Shell中如何用find命令查找指定文件或目录

    Shell中如何用find命令查找指定文件或目录

    find命令是Linux中用于查找文件或目录的工具,它可以根据文件名、类型、大小、权限、所有者等多种属性进行搜索,常用选项包括-name按名称查找、-type按类型查找、-size按大小查找等,find还能配合-exec执行特定命令
    2024-09-09
  • 搭建自己的个人服务器(个人电脑公网访问配置篇)

    搭建自己的个人服务器(个人电脑公网访问配置篇)

    搭建自己的个人服务器,主要涉及服务器上的防火墙和端口权限、路由器端口转发、端口映射等,需要的朋友可以参考下
    2023-08-08

最新评论