jiffies 是 Linux 核心中代表系統啟動以來時脈中斷次數的全域變數,是核心時間管理的基石。本文深入剖析 jiffies 的資料型別、與秒數互換、內部 64 位元實作、回繞處理巨集、以及 USER_HZ 機制如何解決用戶空間相容性問題。

unsigned long(32 位元系統為 32 bits,64 位元系統為 64 bits)。HZ(每秒時脈中斷次數,常見值 100、250、1000)。jiffies / HZseconds * HZjiffies 為 jiffies_64 低 32 位,約 497 天會回繞(HZ=1000 時約 49.7 天)。get_jiffies_64() 以序列鎖(seqlock)安全讀取完整 64 位值,64 位元系統上直接回傳 jiffies。核心提供四組巨集正確處理無號長整數回繞:
time_after(a,b) // a 在 b 之後
time_before(a,b) // a 在 b 之前
time_after_eq(a,b) // a >= b
time_before_eq(a,b) // a <= b
64 位元版本對應 time_after64 等,需搭配 jiffies_64 或 get_jiffies_64() 使用。
ps, top)會因假設 HZ=100 而計算錯誤。USER_HZ(x86 上固定為 100),透過 jiffies_to_clock_t() 將核心 jiffies 轉為用戶空間期望的單位。clock_t_to_jiffies() 及 64 位元版 jiffies_64_to_clock_t()。核心巨集 do_div(n, base) 以內嵌組合語言在 32 位元系統上高效執行 64 位元除法,修改被除數並回傳餘數。
理解 jiffies 機制對編寫核心模組、高精度定時器與效能分析至關重要。