1 CLOCK_MONOTONIC(即monotonic time)
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是指現實中的實際時間透敌,如果系統要與網絡中某個節(jié)點時間同步酗电、或者由系統管理員覺得這個wall time與現實時間不一致内列,有可能任意的改變這個wall time话瞧。
最簡單的例子是寝姿,用戶本身可以去任意修改系統時間饵筑,這個被修改的時間應該就是wall time处坪,即xtime稻薇,它甚至可以被寫入RTC而永久保存塞椎。
一些應用軟件可能就是用到了這個wall time。比如以前用vmware workstation服傍,一啟動提示試用期已過骂铁,但是只要把系統時間調整一下提前一年拉庵,再啟動就不會有提示了钞支。這很可能就是因為它啟動時,用gettimeofday去讀wall time婴洼,然后判斷是否過期撼嗓,只要將wall time改一下且警,就可以欺騙過去了斑芜。