萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 核心時鐘中斷機制深度解析:從硬體到時間管理

時間是作業系統核心的「節拍器」。Linux 核心不僅要維持即時時鐘供時間戳記使用,更需固定週期的定時器驅動排程器、網路協定堆疊等子系統。本文從硬體層面切入,詳細剖析 Linux 2.4 核心如何利用 RTC、PIT、TSC 三大時鐘裝置實現精準計時與中斷驅動。

三大時鐘硬體基石

即時時鐘(RTC, Real Time Clock)

RTC(如 MC146818/DS12887)由主機板電池供電,關機仍走時。其 64 個暫存器分為:時間/日曆組(10 個,BCD 格式)、狀態/控制組(4 個)、CMOS 設定資料。關鍵暫存器包括:

  • 狀態暫存器 A:UIP 位(更新中)、分頻器控制(通常設 32.768 kHz)、速率選擇位(決定週期性中斷頻率,BIOS 預設 1024 Hz)。
  • 狀態暫存器 B:SET 位(凍結更新)、PIE/AIE/UIE/SQWE(各類中斷啟用)、DM(BCD/二進位)、24/12 小時制。
  • 狀態暫存器 C/D:中斷旗標與電池狀態(VRT)。

透過 I/O 埠 0x70(索引)與 0x71(資料)讀寫暫存器,核心啟動時從 RTC 取得牆鐘時間初始化系統時間。

可程式區間定時器(PIT, 8254)

PIT 內建三個 16 位元倒數計數器,輸入頻率 1.193181 MHz。通道 0 連接 IRQ0,計數歸零產生時鐘中斷(tick),頻率約 18.2 Hz(預設 HZ=100 時經分頻調整)。通道 1 用於 DRAM 重整,通道 2 控制蜂鳴器。控制字(埠 0x43)決定計數器讀寫模式(LSB/MSB 順序)與運作模式(模式 2/3 常用於方波/速率產生器)。

時間戳計數器(TSC, Time Stamp Counter)

Pentium 以上 CPU 提供 64 位元 TSC,每時脈遞增,精度極高,核心常用於高解析度計時(gettimeofday、nanosleep)與效能分析。

核心時間管理架構

核心維護 xtime(struct timeval)為牆鐘時間,jiffies 計數自開機以來的 tick 數。時鐘中斷處理常式(timer_interrupt)執行:更新 jiffies、執行動態定時器隊列、更新進程時間片、平衡 CPU 負載等。動態定時器(timer_list)允許模組註冊未來時間點的回呼函數,廣泛用於網路超時、驅動輪詢等。

總結

RTC 提供開機初始時間,PIT 產生固定頻率 tick 驅動核心排程,TSC 提供高精度時間戳。三者協作構建 Linux 核心穩健的時間骨幹,理解其運作對驅動開發、即時系統調校至關重要。

copyright © 萬盛學電腦網 all rights reserved