Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 核心 jiffies 機制與時間管理深度解析

編輯:Linux 教學

Linux 核心透過硬體定時器產生週期性中斷 (tick),以 jiffies 全域變數記錄開機以來的 tick 總數。理解 jiffies 運作、回繞處理、超時判斷宏與 RTC (Real Time Clock) 角色,是核心開發與驅動程式設計的基礎。

核心定時器與 Tick Rate

  • 硬體定時器頻率 = HZ (每秒 tick 數)。早期 2.4 核心 HZ=100,2.6 核心可設 100/250/1000,預設常為 1000 (1ms 解析度)。
  • 每個 tick 觸發 timer_interrupt(),更新 jiffies、執行定時器隊列、進程排程、時間統計。

jiffies 定義與特性

/* linux/jiffies.h */
extern unsigned long volatile jiffies;
  • unsigned long:32 位元系統為 32 bits,約 49.7 天 (HZ=1000) 會回繞歸零。
  • volatile:防止編譯器優化,確保每次讀取都從記憶體取最新值 (中斷處理常更新)。

常見用法:超時判斷

unsigned long timeout = jiffies + HZ * 2;  // 2 秒後超時

if (time_before(jiffies, timeout)) {
    // 尚未超時
} else {
    // 已超時
}

安全比較宏 (避免回繞錯誤)

定義於 linux/jiffies.h,採用模算術比較:

宏含義
time_before(unknown, known)unknown 早於 known (未超時)
time_after(unknown, known)unknown 晚於 known (已超時)
time_before_eq(unknown, known)unknown 早於或等於 known
time_after_eq(unknown, known)unknown 晚於或等於 known

原理:將差值視為有號數比較,自動處理 32 位元回繞。

延遲與睡眠 API

  • schedule_timeout(jiffies):進程睡眠指定 jiffies (需先設定狀態 TASK_INTERRUPTIBLE)。
  • msleep(ms)、msleep_interruptible(ms):毫秒延遲。
  • udelay(us)、ndelay(ns):忙等待精確延遲 (不睡眠)。

實時時鐘 (RTC) 與 Wall Time

  • RTC:主機板上由電池供電的硬體時鐘,關機仍計時。
  • 核心啟動時讀取 RTC 初始化 xtime (struct timespec),作為系統牆鐘時間基準。
  • 定期 (11 分鐘模式) 或關機時將系統時間回寫 RTC。
  • hwclock 指令可手動同步:hwclock --hctosys (RTC→系統)、hwclock --systohc (系統→RTC)。

高解析度定時器

現代核心 (2.6.21+) 支援 High-Resolution Timers (hrtimers),基於硬體高精度事件計時器 (HPET) 或 Local APIC Timer,提供奈秒級解析度,不再受限於 HZ。適用於多媒體、即時控制等場景。

Copyright © Windows教程網 All Rights Reserved