1,如何度量時間差,如何比較時間;
a,時間表示:
一》 hz,系統硬體定時器以一定的間隔週期性的產生時鐘中斷,這個間隔週期用hz的值來表示,這個值是和體系結構相關的,x86體系結構中預設設定為1000,hz被定義在linux/param.h標頭檔案中,可以根據需要修改hz的值,並重新編譯核心;
hz值得獲取,通過獲取/proc/interrupts 及 /proc/uptime 中從核心空間中匯出的值來計算hz,兩者相除即為hz;
二》 核心計數器,1》用途:核心計數器記錄系統引導以來的硬體定時器產生的時鐘中斷的次數即時鐘滴答數,在每次系統引導的時候初始化為0;
2》儲存:核心計數器的值用u64(無符號64位)型別的變數 jiffies_64儲存,無論在32位還是64位架構上均是64位,需要注意的是核心計數器的記憶體溢位問題;
3》程式設計使用:在核心開發中可以簡單的讀取unsigned long jiffies變數的值;
4》核心計數器讀取:在64位架構上jiffies與jiffies_64位同乙個值,而在32位架構上高位和低位讀取不是原子的,讀取高位低位可能變化,讀取低位高位可能變化,所以可能讀取錯誤的值,為了避免錯誤讀取,核心提供的輔助函式:unsigned long get_jiffies_64(void);來讀取核心計數器的值;
三》 hz與核心計數器jiffies_64之間的聯絡:核心計數器/hz=當前時間(jiffies/hz=當前時間);
四》 為了得到更加精確的時間解析度,使用與體系結構相關的cpu計數暫存器,例如inter x86架構cpu的 計數暫存器tsc暫存器;
核心提供了原子的讀取tsc暫存器值的巨集:unsigned long rdtsc(h32,l32) unsigned long rdtscl(l32) long long rdtsdll(var64)
五》 使用者空間時間表示:毫秒級別 struct timeval; 納秒級別 struct timespec;
為了實現使用者空間時間表示與核心空間時間表示的轉換,核心提供了輔助函式(使用者空間結構體與核心空間核心計數器的轉換):
b,時間差及時間比較:
一》 時間比較;
time_after(a,b); ——a 在 b之後則返回true;
time_before(a,b);——a 在 b之前則返回true;
time_after_eq(a,b);——a 在 b之後或a與b相等則返回true;
time_before_eq(a,b);——a 在 b之前或a與b相等則返回true;
上述巨集函式的實現原理是:首先檢查核心計數器是否溢位,typecheck(unsigned long,a); 其次,將核心計數器值轉換為signed long型別,然後做差比較大小;
二》 時間差:
時間差的計算可以用上述時間比較的實現原理,將核心計數器值轉換為signed long型別的資料然後進行減法運算;
2,獲取當前時間;
一》 獲取系統引導以來的時鐘滴答數jiffies的值:jiffies/hz = 當前時間(單位s)-- 計算時間間隔
二》 牆鐘,核心函式:
將年月日轉換為時鐘中斷次數;
unsigned long mktime(unsigned long year,unsigned long month,unsigned long day,unsigned long hour,unsigned long minis , unsigned long seconds);
void do_gettimeofday(struct timeval *);
struct timespec current_kernel_time();(解析度是納秒級,當時實際上達不到)
Oracle日期 時間查詢及操作紀要
oracle資料庫日期 時間查詢 select sysdate from dual select to char sysdate yyyy from dual 年 select to char sysdate mm from dual 月 select to char sysdate dd from...
時間轉化及應用
想法是替換成標準2017 06 26格式,然後使用date方法轉換成date格式 日期字串轉化date convertdatefromstring function datestring tostring 把 date 物件轉換為字串。tolocalestring 根據本地時間格式,把 date 物...
python 獲取網路時間及修改本地時間
本本經常時間錯亂,偶閒暇之作,專為同步本本時間。以前有朋友提到日期時間設定裡面的有些時間伺服器。限於不同的網路,有時候這些時間伺服器不一定能用。因此這次選擇的是www.baidu.com這個大家都能用吧。接下來上python 8 r.getheaders 獲取所有的http頭 9 ts r.geth...