歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

《Linux設計與實現》學習筆記——定時器和時間管理

基本概念

系統定時器
一種可編程硬件芯片,能夠以固定頻率產生中斷,定時器中斷,他的中斷處理程序負責更新系統時間,負責執行需要周期性運行的任務。 觸發中斷的頻率即節拍率,可以編程預定。 動態定時器
一種用來推遲執行程序的工具 HZ
系統定時器的頻率(節拍率)是靜態預處理定義的。 HZ數大小確定應考慮的因素:
HZ越高:
優勢:提高時間驅動事件的准確度;調度的粒度更細,進程搶占更准確; 內核定時器以更高的頻度和准確度執行。 劣勢:節拍率越高,時鐘中斷程序占用處理器時間越多;並且頻繁打亂處理器cache並增加耗電。

Jiffies 全局變量

系統啟動以來產生的節拍總數,位於
系統運行時間=jiffies/HZ
jiffies的定義
extern unsigned long volatile jiffies;

jiffies回繞的處理

//a超過b,返回真
#define time_after(a,b)  ( (long)(b) – (long)(a) < 0 ) 
//a未超過b,返回真
#define time_before(a,b) ( (long)(b) – (long)(a) > 0 )

unsigned long 使用源碼存儲,而signed long 使用補碼存儲,將signed long 強制轉換為unsigned long,unsigned long中最高位為1的就會變為負數,使用上面的宏可以在一定范圍內,即使發生回繞,時間先後判斷,也能正確。
舉例 8bit jiffies, jiffies = 255,time1 發生回繞了為1,time2沒回繞為254
強轉為signed long, jiffies=-1,time1=1,time2=-2
所以time_after(time1, jiffies) : -1 - 1 =-2 < 0
time_after(time2,jiffies) : -1 -(-2) = 1 > 0

實時時鐘

RTC用來持久存放系統時間的設備。 系統啟動時,內核讀取RTC來初始化牆上時間,該時間存放在xtime變量中 定時器:周期性觸發中斷機制。X86是可編程中斷時鐘PIT,PIT在PC機器中普遍存在

時鐘中斷處理程序的基本任務 :

體系結構相關部分,體系結構無關部分
與體系結構相關的例程作為系統定時器的中斷處理程序注冊到內核

獲得xtime_lock鎖,對jiffies_64和xtime進行保護 需要時應答或重新設置系統時鐘 周期性的使用牆上時間更新實時時鐘 調用體系無關的時鐘例程 : tick_periodic()
Jiffies_64+1 更新資源消耗的統計值值。比如當前進程所消耗的系統時間和用戶時間 執行已經到期的動態定時器 執行scheduler_tick()函數 更新牆上時間,存放著xtime中 計算平均負載值

定時器

也稱動態定時器/內核定時器,管理內核流逝時間的基礎。這個工具,能夠使工作在指定時間點上執行。
內核在時鐘中斷後執行定時器,定時器作為軟中斷在下半部上下文執行

Copyright © Linux教程網 All Rights Reserved