Linux内核基础——Linux时钟和内核定时器(草笔记)

本文详细介绍了Linux内核中的时钟中断、时间表示(RTC与系统时钟)、HZ的影响,以及动态定时器的工作原理。时钟中断用于更新系统时间、执行超时的动态定时器,而动态定时器在超时后会自动销毁。文章还讨论了Linux如何通过tvec_base_t数据结构优化定时器的执行效率,以减少遍历链表的时间开销。此外,提到了几种延迟执行的方法,如忙等待、短延迟和schedule_timeout()。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux时钟和内核定时器(草笔记)

中断是事件驱动,事件驱动依赖于时钟中断。
屏幕刷新等大量内核函数是时间驱动。
时间管理:系统定时器以某种频率自行触发时钟中断,特殊的中断程序。
LInux内核两种时间表示:
RTC一种绝对时间:real time clock
系统时钟(系统定时器),一种相对时间:x86下使用可编程中断时钟(PIT),内核启动时对PIT进行初始化,1/hz产生时钟中断,jiffies变量

HZ:<asm/param.h> x86 250hz ,可调
提高HZ:是系统提高时钟中断解析度(粒度),提高事件驱动事件的解析度,提高了时间驱动事件的准确度,提高进程抢占的准确度,系统对时间的记录更加精准
劣势:中断处理程序执行太频繁,系统负担重。
x86体系结构,默认理想HZ值=250.

jiffies:全局变量 系统启动以来产生的节拍总数, 初始化0 每次时钟中断jiffies+1 , 系统运行时间 jiffies / HZ 秒。
定义于<linux/jiffies.h>。内核本身几乎不用绝对时间,都用相对时间,并且几乎不转化成秒,只给用户空间转化成秒。
头文件中定义32位和64位jiffies,32位jiffies 100HZ时 497天溢出, 1000HZ 49.7天后溢出。64位永远别想溢出,千亿、万亿年。32位体系结构下:jiffies的值来自于64位jiffies的低32位。jiffies溢出后等于0,称为jiffies回绕。 在64位体系结构下:64位jiffies 和 jiffies是一个变量。

解决jifiies回绕的比较宏,中断在于将无符号长整数强制转化成有符号长整数来进行比较,这样就算是溢出了
time_before(timeA, timeB)等宏。 timeA < timeB 为真。

定时器:管理内核流逝的时间的基础。内核推后执行代码使用定时器。定时器不断被创建销毁,超时后自动销毁。x86中系统定时器主要采用可编程中断时钟PIT。

定时器数据结构:linux/timer.h<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值