硬件給內核提供一個系統定時器用以計算和管理時間,內核通過編程預設系統定時器的頻率,即節拍率(tick rate),每一個周期稱作一個tick(節拍)。Linux內核從2.5版內核開始把頻率從100調高到1000(當然帶來了很多優點,也有一些缺點).
jiffies是內核中的一個全局變量,用來記錄自系統啟動一來產生的節拍數。譬如,如果計算系統運行了多長時間,可以用 jiffies/tick rate 來計算。jiffies定義在文件
extern unsigned long volatile jiffies;
可以利用jiffies設置超時等,譬如:
unsigned long timeout = jiffies + tick_rate * 2; // 2秒鐘後超時
if(time_before(jiffies, timeout){
// 還沒有超時
}
else{
// 已經超時
}
內核提供了四個宏來比較節拍計數,這些宏定義在文件
time_before(unknown, known)
time_after(unknown, known)
time_before_eq(unknown, known)
time_after_eq(unknown, known)
比較的時候用這些宏可以避免jiffies由於過大造成的回繞問題。
除了系統定時器外,還有一個與時間有關的時鐘:實時時鐘(RTC),這是一個硬件時鐘,用來持久存放系統時間,系統關閉後靠主板上的微型電池保持計時。系 統啟動時,內核通過讀取RTC來初始化Wall Time,並存放在xtime變量中,這是RTC最主要的作用。