Linux系統(tǒng)有兩個時鐘:一個是由主板電池驅(qū)動的“Real Time
Clock”,也叫做RTC或者CMOS時鐘,硬件時鐘。當操作系統(tǒng)關(guān)機的時候,用這個來記錄時間,但是對于運行的系統(tǒng)是不用這個時間的。另一個時鐘是 “System
clock”,也叫內(nèi)核時鐘或者軟件時鐘,是由軟件根據(jù)時間中斷來進行計數(shù)的,內(nèi)核時鐘在系統(tǒng)關(guān)機的情況下是不存在的,所以,當操作系統(tǒng)啟動的時候,內(nèi)核時鐘是要讀取RTC時間來進行時間同步(有些情況下,內(nèi)核時鐘也可以通過ntp服務(wù)器來讀取時間)。這兩個時鐘通常會有一些誤差,所以長時間可以導致這兩個時鐘偏離的比較多,最簡單的保持兩個時間同步的方法是用軟件測出他們之間的誤差率,然后進行修正。在每次重新啟動系統(tǒng)的時候,系統(tǒng)都會用hwclock命令對時間進行同步。如果內(nèi)核時鐘在每一個時間中斷都快或者慢的話,可以用adjtimex命令進行調(diào)整,使得RTC和內(nèi)核時間走的快慢一致.
Linux的內(nèi)核時間實際上是記錄從1970年1月1日距離現(xiàn)在的秒數(shù),并且以GMT(格林尼治時間)(或者叫UTC- Coordinated Universal Time)為標準,UTC是不隨著DST(夏令時)變換,需要有變化的是由應(yīng)用程序自身來完成時間的轉(zhuǎn)換。通常,本地時間=UTC時間+時區(qū)。
從Linux啟動過程來看,系統(tǒng)時鐘和硬件時鐘不會發(fā)生沖突,但Linux中的所有命令(包括函數(shù))都是采用的系統(tǒng)時鐘設(shè)置。不僅如此,系統(tǒng)時鐘和硬件時鐘還可以采用異步方式。這樣做的好處對于普通用戶意義不大,但對于Linux網(wǎng)絡(luò)管理員卻有很大的用處。例如,要將一個很大的網(wǎng)絡(luò)中(跨越若干時區(qū))的服務(wù)器同步,假如位于美國紐約的Linux服務(wù)器和北京的Linux服務(wù)器,其中一臺服務(wù)器無須改變硬件時鐘而只需臨時設(shè)置一個系統(tǒng)時間,如要將北京服務(wù)器上的時間設(shè)置為紐約時間,兩臺服務(wù)器完成文件的同步后,再與原來的時鐘同步一下即可。這樣系統(tǒng)和硬件時鐘就提供了更為靈活的操作。