linux 系统时间是在哪里记录的,Linux系统如何记录时间
1、內(nèi)核在開機啟動的時候會讀取RTC硬件獲取一個時間作為初始基準時間,這個基準時間對應(yīng)一個jiiffies值(這個基準時間換算成jiffies值的方法是:用這個時間減去1970-01-01? 00:00:00? +0000(UTC)),然后把這個時間換算成jiffies數(shù)值,這個jiffies值作為我們開機時的基準jiffies值存在。然后系統(tǒng)運行時每個時鐘節(jié)拍的末尾都會給jiffies這個全局變量加1,因此操作系統(tǒng)就使用jiffies這個全局變量記錄下來當前時間。當我們需要當前時間點時,就用jiffies這個時間點去計算(計算方法就是先把這個jiffies值對應(yīng)的時間段計算出來,然后再加上1970-01-01 ? 00:00:00? +0000(UTC)即可得到這個時間點)
2、其實操作系統(tǒng)只在開機的時候讀取一次RTC,整個系統(tǒng)運行過程中RTC是無作用的。RTC的真正作用其實是在操作系統(tǒng)OS的兩次開機之間進行時間的保存。
3、理解時一定要點時間和段時間結(jié)合起來理解。jiffies這個變量記錄的其實是段時間(其實就是當前時間和1970-01-01? 00:00:00? +0000(UTC)這個時間的差值)。
4、一個時間節(jié)拍的時間取決于操作系統(tǒng)的配置,現(xiàn)代Linux系統(tǒng)一般是10ms或者是1ms。這個時間其實就是調(diào)度時間,在內(nèi)核中用HZ來記錄和表示。如果HZ定義為1000,那么時鐘節(jié)拍就是1/HZ,也就是1ms。學習驅(qū)動會用到這些知識。
5、Linux中與時間相關(guān)的系統(tǒng)調(diào)用
(1)、常用的時間相關(guān)的API和C庫函數(shù)有9個:time、ctime、localtime、gmtime、mktime、asctime、strftime、gettimeofday、settimeofday
它們的關(guān)系如下圖:
(2)、time系統(tǒng)調(diào)用返回當前時間以秒為單位的距離1970-01-01? 00:00:00? +0000(UTC)過去的秒數(shù)。這個time內(nèi)部就是用jiffies換算得到的秒數(shù)。其他函數(shù)基本都是圍繞著time來工作的。
(3)、gmtime和localtime會把time得到的秒數(shù)變成一個struct tm結(jié)構(gòu)體表示的時間。區(qū)別是gmtime得到的是國際時間,而localtime得到的是本地(指的是你運行l(wèi)ocaltime函數(shù)的程序所在的計算機所設(shè)置的時區(qū)對應(yīng)的本地時間)時間。mktime用來完成相反方向的轉(zhuǎn)換(struct tm到time_t).
(4)、如果從struct tm出發(fā)想得到字符串格式的時間,可以用asctime或者strftime都可以。(如果從time_t出發(fā)想得到字符串格式的時間用ctime即可)。
(5)、gettimeofday返回的時間是由struct timeval和struct timezone這兩個結(jié)構(gòu)體共同表示的,其中timeval表示時間,而timezone表示時區(qū)。settimeofday是用來設(shè)置當前的時間和時區(qū)的。
總結(jié):不管是用哪一個系統(tǒng)調(diào)用,最終得到的時間本質(zhì)上都是一個時間(這個時間最終都是從kernel中記錄的jiffies中計算得來的),只不過不同的函數(shù)返回的時間的格式不同,精度不同。
總結(jié)
以上是生活随笔為你收集整理的linux 系统时间是在哪里记录的,Linux系统如何记录时间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux内核计算代码时间,完成一个简单
- 下一篇: linux用cat查看本机ip,linu