Linux中的時鐘與時間

2021-06-18 02:35:23 字數 1674 閱讀 3933

日期: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 也叫核心時鐘或者軟體時鐘,是由軟體根據時間中斷來進行...