系統啟動以來產生的節拍總數,位於
系統運行時間=jiffies/HZ
jiffies的定義
extern unsigned long volatile 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中 計算平均負載值
定時器
也稱動態定時器/內核定時器,管理內核流逝時間的基礎。這個工具,能夠使工作在指定時間點上執行。
內核在時鐘中斷後執行定時器,定時器作為軟中斷在下半部上下文執行