RTC

RTC 是用来存放系统时间的设备。即使是系统关闭后也能通过主板上的电池进行供电。

当系统启动后,内核读取 RTC 来初始化 墙上时间 。该时间存放在 xtime 变量中。

epoch

Unix 中日期的计算基准有两个:epoch 和 Unix epoch,后者为事实上的标准。

根据 rfc1305 的定义,时间由两部分组成:

字段名数据类型解释

seconds

u32

自 epoch 起始的秒数

fraction

u32

\(2^{-32}\) 秒

epoch 以 1900 年为时间基准,根据定义,时间会在 2036 年发生溢出。目前只有 NTP 协议以此为时间基准。

unix epoch 以 1970 年为时间基准。目前为事实上的标准。

TIPS: unix epoch 和 epoch 相差 2_208_988_800s。

PIT

x86 体系中,主要依赖于 PIT(可编程中断时钟)实现定时器效果。内核在启动时根据 HZ 对 PIT 进行初始化,使其以指定间隔产生时钟中断。

所谓 HZ,是内核编译时定义的常量。规定了每秒中产生的时钟中断数量(通过 PIT 实现)。HZ 是内核计时的最小单位。

早期操作系统一般将 HZ 设置为 100。现代操作系统更新为 1000。更高的 HZ 代表了时钟中断产生的频繁程度。同时也能提高时间驱动事件的精度。但是也意味着耗电量的提升。

jiffy

jiffy 变量储存了系统启动以来产生的节拍数量。启动时被初始化为零,此后每次时钟中断都会将此值进行递增。

由于一秒钟内时钟中断的次数为 HZ,因此 jiffies 一秒内增加的值也为 HZ。系统自启动以来运行的时间为 \(\frac{jiffies}{HZ}\) 。

jiffy 变量的类型为 usize。对于 32 位系统,在 100HZ 的情况下,497 天后溢出,在 1000HZ 的情况下 49.7 天溢出。在 64 系统下不会出现溢出。

Last moify: 2022-12-04 15:11:33
Build time:2025-07-18 09:41:42
Powered By asphinx