CLOCK_MONOTONIC與CLOCK_REALTIME區(qū)別

1 CLOCK_MONOTONIC(即monotonic time)
CLOCK_MONOTONIC:以絕對時間為準,獲取的時間為系統(tǒng)重啟到現(xiàn)在的時間,更改系統(tǒng)時間對它沒有影響。
字面意義:單調時間,表示系統(tǒng)啟動后流逝的時間,由變量jiffies來記錄的。
系統(tǒng)每次啟動時,jiffies初始化為0。每來一個timer interrupt,jiffies加1,即它代表系統(tǒng)啟動后流逝的tick數(shù)。
jiffies一定是單調遞增的,因為時間不可逆。

2 CLOCK_REALTIME(即wall time)

CLOCK_REALTIME:相對時間,從1970.1.1到目前的時間。更改系統(tǒng)時間會更改獲取的值。它以系統(tǒng)時間為坐標。
字面意思: wall time掛鐘時間,表示現(xiàn)實的時間,由變量xtime來記錄的。
系統(tǒng)每次啟動時,將CMOS上的RTC時間讀入xtime,這個值是”自1970-01-01起經(jīng)歷的秒數(shù)、本秒中經(jīng)歷的納秒數(shù)”。每來一個timer interrupt,也需要去更新xtime。
wall time不一定是單調遞增的。因為wall time是指現(xiàn)實中的實際時間,如果系統(tǒng)要與網(wǎng)絡中某個節(jié)點時間同步、或者由系統(tǒng)管理員覺得這個wall time與現(xiàn)實時間不一致,有可能任意的改變這個wall time。
最簡單的例子是,用戶本身可以去任意修改系統(tǒng)時間,這個被修改的時間應該就是wall time,即xtime,它甚至可以被寫入RTC而永久保存。

一些應用軟件可能就是用到了這個wall time。比如以前用vmware workstation,一啟動提示試用期已過,但是只要把系統(tǒng)時間調整一下提前一年,再啟動就不會有提示了。這很可能就是因為它啟動時,用gettimeofday去讀wall time,然后判斷是否過期,只要將wall time改一下,就可以欺騙過去了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容