日期:2010-02-04
hz
核心通過定時器中斷來跟蹤時間流,時鐘中斷由系統定時硬體以週期性的間隔產生,這個間隔由核心根據hz的值設定。
hz與體系結構有關,定義在中或者該檔案包含的某個子平台相關的檔案中。預設值為50 ~ 1200, x86的預設值為1000。如果想改變系統時鐘中斷的頻率,可以修改hz值。
jiffies
每次時鐘中斷產生,核心內部計數器的值加一。jiffies,是乙個64的變數。
呼叫需包含或
比較兩個jiffies快照的函式
int time_after()
int time_before()
int time_after_eq()
int time_before_eq()
diff = (long)t2 - (long)t1
msec = diff * 1000 / hz (轉換為毫秒)
時間表述形式
struct timeval; stuct timespec;
#include
unsigned long timespec_to_jiffies()
void jiffies_to_timespec()
unsigned long timeval_to_jiffies()
void jiffies_to_timeval()
對64位jiffies_64的訪問
32位cpu上對64位值的訪問不是原子的,需要通過這個函式來讀取
#include
u64 get_jiffies_54();
tsc(timestamp counter)
乙個64位的暫存器,記錄cpu時鐘週期數,通過計算時鐘週期來度量時間,從核心共建和使用者空間都可以讀取它。(x86的pentium的處理器開始提供該暫存器)
#include (machine-specific registers)
rdtsc(low32,high32);
rdtscl(low32);
rdtscll(var64);
1-ghz 的處理器,計數器的低半部分每4.2秒會溢位。可以根據實際情況來決定是讀取低32位呢還是64位。
有乙個平台無關的函式可以替代rdtsc,
#include (or linux/timex.h, 它包含前面那個標頭檔案)
cycles_t get_cycles(void);
關於當前時間的獲取和轉換
1 取jiffies
2 牆鐘轉換為jiffies的值
#include
unsigned long mktime(year, mon, day, hour, min, sec);
3 用秒/微秒填充struct timeval值(和gettimeofday系統呼叫使用同一變數)
#include
void do_gettimeofday(struct timeval *tv);
這裡是近似微秒,實際精度依賴平台
4 xtime(struct timespec)
#include
struct timespec current_kernel_time(void);
Linux中的時鐘概念Linux中的時鐘概念
linux的時鐘中斷中涉及至二個全域性變數乙個是xtime,另乙個則是jiffies。有乙個與時間有關的時鐘 實時時鐘 rtc 這是乙個硬體時鐘,用來持久存放系統時間,系統關閉後靠主機板上的微型電池保持計時。系統啟動時,核心 通過讀取rtc來初始化wall time,並存放在xtime變數中,即xt...
Linux,時鐘和時間
linux,時鐘和時間 介紹 您的計算機有兩個時鐘,乙個是始終執行的 由電池供電的 硬體的 bios或cmos 時鐘,另乙個是由執行在您的計算機上的作業系統維護的 系統 時鐘。硬體時鐘通常只在作業系統啟動時用來設定系統時鐘,然後直到重啟或關閉系統,由系統時鐘來記錄時間。在linux 系統中,您可以選...
Linux系統時鐘與硬體時鐘
linux系統有兩個時鐘 乙個是由主機板電池驅動的硬體時鐘 real time clock 也叫做rtc或者叫cmos時鐘。當作業系統關機的時候,用這個來記錄時間,但是對於執行的系統是不用這個時間的 另乙個時間是系統時鐘 system clock 也叫核心時鐘或者軟體時鐘,是由軟體根據時間中斷來進行...