Linux系统时钟滴答:了解它的意义和作用 (linux 时钟滴答)

Linux系统中的时钟滴答是一种很重要的机制,它可用于测量时间、同步外部事件、管理进程、以及处理计时器相关的事件。在许多情况下,时钟滴答往往是系统构建、网络通信、设备驱动、实时处理等应用的核心基础,因此,了解时钟滴答的意义和作用是十分必要的。

1. 时钟滴答的意义

时钟滴答可以被理解为系统中一个定期的时间间隔,常见的时间间隔有10ms、100ms、1s等。这个时间间隔是由Linux内核根据硬件时钟频率(一般为1~10MHz)来确定的,也就是说,时钟滴答的产生是由硬件时钟驱动中断,而不是由软件程序控制的。

时钟滴答是Linux系统中一个重要的概念,它对系统的运行、时间测量、事件调度、信号处理等都有很大的影响。从系统运行来看,时钟滴答是在后台运行的,它的频率高达1000Hz,不仅能够精确地维护系统时间,还能够在系统启动时完成许多基础环境的建立工作;从信号处理来看,时钟滴答能够监听并处理一系列的虚拟时钟信号,从而执行相应的操作;从事件调度来看,时钟滴答能够区分不同的时间片,并且分配CPU时间片给不同的进程,从而保证系统的稳定性。

2. 时钟滴答的作用

时钟滴答在Linux系统中具有多种应用价值,如下所示:

(1)时间测量

时钟滴答是系统中最基础和最精确的时钟源,在Linux内核中,许多重要的时间参数都与时钟滴答有关,如系统时间、进程执行时间、内核延迟、系统启动时间等。通过时钟滴答的计时,系统可以实现更加精确和准确地测量时间,从而保证系统运行的稳定性和准确性。

(2)同步外部事件

时钟滴答不仅可以测量时间,还可以同步外部事件。在许多需要精确时间同步的应用中,通过时钟滴答的计时可以实现对外部事件的同步。例如,在网络通信领域,时钟滴答能够协同网络中的各个节点实现数据同步和时间同步,从而保证网络传输的准确性和稳定性。

(3)管理进程

时钟滴答还可以用于管理进程。在Linux系统中,每个进程都有一个时间片,用于分配给该进程可以运行的时间。时间片的大小与系统的时钟滴答有关,不同的时间片大小会导致不同的进程调度结果。通过时钟滴答的计时和分配,系统可以更加合理和高效地管理各个进程,从而保证系统的效率和稳定性。

(4)处理计时器相关的事件

时钟滴答还可以用于处理计时器相关的事件。在Linux系统中,计时器有许多种类,如周期性计时器、延迟计时器、超时计时器等。这些计时器都与系统的时钟滴答有关,通过时钟滴答的计时和计算,系统可以实现对各种计时器的处理,从而保证系统的正常运行。

在Linux系统中,时钟滴答是一个至关重要的机制,它能够影响系统的时间测量、事件调度、进程管理和信号处理等方面。了解时钟滴答的意义和作用可以帮助我们更好地理解Linux系统的运行机制和性能特点,从而提高系统的可靠性和效率。

相关问题拓展阅读:

代码timeafter=3500什么意思

错误代码530什么意思

530表示用户未逗销登陆,对不起,更大客户数从你的主机已经连接,那么出现的这个原因就码毁是您本地的ftp工具的问题,或者是用户本地的连接质量不好导致山模游的。

博客园首页联系管理

jiffies相关时间比较函数time_after、time_before详解

1. jiffies简介

  首先,操作系统有个系统专用定时器(system timer),俗称滴答定时器,或者系统心跳。

  全局变量jiffies取值为自操作系统启动以来的时钟滴答的数目,数据类型为 unsigned long volatile (32位无符号长整型),更大取值是2^32-1。

2. jiffies与秒的转换

将 jiffies转换为秒,可采用公式:(jiffies/HZ) 计算。

将 秒转换为jiffies,可采用公式:(seconds*HZ) 计算。

  示例(本博客后面将介绍运运涉及到的time_before):

    unsgned long delay = jiffies + 2*HZ;

    while(time_before(jiffies, delay)); // 忙等待两秒,占用CPU的一个核心,期间不执行调度

3. jiffies的溢出介绍

当时钟中断发生时,jiffies值就加1。

假定HZ=100,那么1个jiffies等于1/100 秒,jiffies可记录的更大秒数为(2^32 -1)/100=.95秒,约合497天或1.38年,

当取值到达更大值时仍继续加1,就变为了0!

即HZ=100时,连续累加的溢出时间是一年又四个多月,如果程序对jiffies的溢出没有加以充分考虑,那么在连续运行一年又四个多月后,这些程序还能够稳定运行吗?

4. 示例1,一个 jiffies溢出造成程序逻辑出错 的示例

复制代码

unsigned long timeout = jiffies + HZ/2; /* timeout in 0.5s */

/* do some work … */

do_somework();

/* then see whether we took too long */

if (timeout > jiffies) {

/* we did not time out, call no_timeout_handler() … */

no_timeout_handler();

} else {

/* we timed out, call timeout_handler() … */

timeout_handler();

}

复制代码

  本例的意图:

  从当前时间起,如果在0.5秒内源祥执行完do_somework(),则调用no_timeout_handler()。如果在0.5秒后执行完do_somework(),则调用timeout_handler()。

  旁裂梁然后当溢出时呢? 该意图会被打破吗?

  假设程序开始执行前,timeout值已经接近更大值(即2^32-1 ) ,jiffies的值是(timeout-HZ/2),

之后do_some_work执行了挺久(超过0.5秒),jiffies的值也发生了溢出(jiffies做自增操作的中途超过了32位无符号数的更大值),

  溢出后的值,可能是很小的一个数字,所以造成jiffies的值

日一二三四五六

314

2023

2728

搜索

找找看

谷歌搜索

常用链接

我的随笔

我的评论

我的参与

最新评论

我的标签

我的标签

linux(24)

系统编程(21)

C++(16)

BOOST(10)

ffmpeg(7)

更多

随笔分类

C++之QT(4)

C++之STL、Boost(12)

C++之语言与时俱进(17)

C语言活用(9)

C语言自身(12)

GUI(3)

Linux驱动(8)

Linux系统编程(32)

Linux应用(13)

MCU和物联网等(20)

RTOS(10)

shell 和 makefile(9)

uboot(3)

编程思维技巧(5)

编译器特性(2)

操作系统(2)

电路-EDA设计(2)

电路-基础知识(2)

调试篇(3)

汇编(1)

密码学|安全|(2)

配置相关(8)

嵌入式外设相关(2)

设计模式(12)

数据结构(3)

网络(13)

我的程序人生(1)

音视频(10)

随笔档案

2023年2月(3)

2023年1月(1)

2023年12月(5)

2023年11月(2)

2023年10月(1)

2023年8月(1)

2023年7月(2)

2023年5月(1)

2023年4月(6)

2023年3月(6)

2023年2月(6)

2023年1月(23)

2023年12月(11)

2023年11月(4)

2023年10月(29)

2023年9月(12)

2023年8月(12)

2023年5月(4)

2023年2月(6)

2023年1月(4)

2023年12月(2)

2023年11月(2)

2023年10月(3)

2023年8月(9)

2023年7月(2)

2023年6月(1)

2023年5月(1)

2023年4月(2)

2023年3月(5)

2023年2月(11)

2023年1月(6)

2023年1月(2)

2023年5月(1)

相册

大话西游经典照片(1)

阅读排行榜

1. C++函数默认参数 详解(29043)

2. 玩转Libmodbus(一) 搭建开发环境(16605)

3. 玩转Libmodbus(二) 写代码体验(7565)

4. RTThread DFS文件系统使用: 基于使用SFUD驱动的SPI FLASH之上的ELM FATFS文件系统(4537)

5. std(标准库)和STL(标准模板库)的关系(4149)

6. STM32CubeMX HAL库串口: 使用DMA数据发送、使用DMA不定长度数据接收(4016)

7. Arduino+ESP32 之 SD卡读写(3673)

8. KEIL查看ARM-Cortex M架构soc的内核寄存器之 MSP(3668)

9. 图解MQTT概念、mosquitto编译和部署 ,写代码,分别使用外网和本地服务器进行测试(3275)

10. RT Thread的SPI设备驱动框架的使用以及内部机制分析(2787)

11. STM32的CCM RAM以及使用方式(2540)

12. vscode废掉了,跳转不到函数定义,无法自动补全,重装也没用的解决办法(2511)

13. jiffies相关时间比较函数time_after、time_before详解(2508)

14. Arduino+ESP32 之 驱动GC9A01圆形LCD(一),基于Arduino_GFX库(2504)

15. 图解连接阿里云(一)创建阿里云物联网平台产品和设备,使用MQTT.fx快速体验(2372)

16. MDK内的KEEP关键字以及$$Base $$Limit(2358)

17. RT Thread SPI设备 使用(2246)

18. ESP32的Linux开发环境搭建,将示例程序编译、下载、运行(2243)

19. AD设置过孔盖油和过孔开窗, 过孔塞油科普(2186)

20. Linux 串口工具 lsz lrz 移植(2172)

评论排行榜

1. 在KEIL下查看单片机编程内存使用情况(2)

2. 玩转Libmodbus(一) 搭建开发环境(2)

3. C语言普通写法实现:针对多次同步失败的节能处理机制(2)

推荐排行榜

1. C++函数默认参数 详解(5)

2. 如何更好地谋生,从事嵌入式软件开发五年的感悟和职业焦虑(4)

3. Arduino+ESP32 之 SD卡读写(2)

4. 玩转Libmodbus(一) 搭建开发环境(2)

5. Arduino+ESP32 之 驱动GC9A01圆形LCD(一),基于Arduino_GFX库(1)

最新评论

1. Re:在KEIL下查看单片机编程内存使用情况

@HQ_嗨海 谢谢…

–一匹夫

2. Re:如何更好地谋生,从事嵌入式软件开发五年的感悟和职业焦虑

说的不错

–Chance_21_12_12

3. Re:在KEIL下查看单片机编程内存使用情况

感谢大佬

–HQ_嗨海

Copyright © 2023 一匹夫

Powered by .NET 7.0 on Kubernetes

time after(这个没有…)

after 在…之后, 在此银慧…后面, 后来, 过后

time 时间, 时侯

after time 余辉森答时间

time after time 一次又一次,屡次,无数次 多搏迟次, 反复, 不断地

系统时钟怎么老是滴答滴答响?

肯定是装了别的仿VISTA的软件了.删了就好了.

估计你安装了其他桌面时钟软件,建议卸载删除为好,可以用一些优化软件处理

关于linux 时钟滴答的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux系统时钟滴答:了解它的意义和作用 (linux 时钟滴答)