CLOCK_MONOTONIC與CLOCK_REALTIME區別
CLOCK_MONOTONIC:以絕對時間為準,獲取的時間為系統重啟到現在的時間,更改系統時間對它沒有影響。
字面意義:單調時間,表示系統啟動後流逝的時間,由變量jiffies來記錄的。
系統每次啟動時,jiffies初始化為0。每來壹個timer interrupt,jiffies加1,即它代表系統啟動後流逝的tick數。
jiffies壹定是單調遞增的,因為時間不可逆。
2 CLOCK_REALTIME(即wall time)
CLOCK_REALTIME:相對時間,從1970.1.1到目前的時間。更改系統時間會更改獲取的值。它以系統時間為坐標。
字面意思: wall time掛鐘時間,表示現實的時間,由變量xtime來記錄的。
系統每次啟動時,將CMOS上的RTC時間讀入xtime,這個值是”自1970-01-01起經歷的秒數、本秒中經歷的納秒數”。每來壹個timer interrupt,也需要去更新xtime。
wall time不壹定是單調遞增的。因為wall time是指現實中的實際時間,如果系統要與網絡中某個節點時間同步、或者由系統管理員覺得這個wall time與現實時間不壹致,有可能任意的改變這個wall time。
最簡單的例子是,用戶本身可以去任意修改系統時間,這個被修改的時間應該就是wall time,即xtime,它甚至可以被寫入RTC而永久保存。
壹些應用軟件可能就是用到了這個wall time。比如以前用vmware workstation,壹啟動提示試用期已過,但是只要把系統時間調整壹下提前壹年,再啟動就不會有提示了。這很可能就是因為它啟動時,用gettimeofday去讀wall time,然後判斷是否過期,只要將wall time改壹下,就可以欺騙過去了。