在LINUX的時鐘中斷中涉及至二個全局變量一個是xtime,它是timeval數據結構變量,另一個則是jiffies,首先看timeval結構
struct timeval
{
time_t tv_sec; /***second***/
susecond_t tv_usec;/***microsecond***/
}
這個地方一直有很多人容易混淆,到底microsecond是毫秒還是微秒,我也經常犯這個錯誤,也被搞的糊塗了很久,我們理清一下吧,1秒=1000毫秒(3個零),1秒=1000 000微秒(6個零),1秒=1000 000 000納秒(9個零),1秒=1000 000 000 000皮秒(12個零)。秒用s表現,毫秒用ms,微秒用μs表示,納秒用ns表示,皮秒用ps表示,他們的分級單位是千,即每次3個零。混淆的原因找到了,由於毫秒用ms表示,所以我老是以為microsecond是毫秒,所以就把tv_usec理解錯了。microsecond查詞霸也是微秒的意思,看來單位的表示迷惑了我,也迷惑了大多數人,請朋友們牢記這裡,非常重要。
那麼xtime是從cmos電路中取得的時間,一般是從某一歷史時刻開始到現在的時間,也就是為了取得我們操作系統上顯示的日期。這個就是所謂的“實時時鐘”,它的精確度是微秒。
jiffies是記錄著從電腦開機到現在總共的時鐘中斷次數。在linux內核中jiffies遠比xtime重要,那麼他取決於系統的頻率,單位是Hz,這裡不得不說一下頻率的單位,1MHz=1000,000Hz(6個零),1KHz=1000Hz(3個零).頻率是周期的倒數,一般是一秒鐘中斷產生的次數,所以,假如我們需要知道系統的精確的時間單位時,需要換算了,假如我們系統的頻率是200Mhz,那麼一次中斷的間隔是1秒/200,000,000Hz=0.000 000 005秒看一下上面我們的時間單位,對照一下小數點後面是9個零,所以理論上我們系統的精確度是5納秒。LINUX系統時鐘頻率是一個常數HZ來決定的,通常HZ=100,那麼他的精度度就是10ms(毫秒)。也就是說每10ms一次中斷。所以一般來說Linux的精確度是10毫秒