日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你真的理解计算机时间吗?

發(fā)布時間:2023/12/29 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你真的理解计算机时间吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

對于計算機系統(tǒng)中的時間,如果你曾經(jīng)思考過下面的問題,但是沒有結(jié)論,那么通過本文將給你詳細(xì)的解答:

  • 閏秒是怎么產(chǎn)生的,在2012年6月30日UTC插入一個閏秒后,大量linux服務(wù)器宕機的原因是什么?
  • 計算機系統(tǒng)是怎么保證自己的時間是準(zhǔn)確的?
  • 計算機系統(tǒng)我們經(jīng)常使用微妙甚至納秒,它怎么來提供這么高精度的時間?
  • 計算機系統(tǒng)是沒有時間概念的機器,那么它是怎么來計算與管理時間的?
  • 背景

    時間是一個非常抽象的問題,吸引著許多偉大的神學(xué)家、哲學(xué)家和物理學(xué)家花畢生精力去解釋時間的本質(zhì)是什么,然而依然沒有定論。幸運的是我們只需要討論計算機系統(tǒng)中的時間相關(guān)的問題,可以不用關(guān)心宇宙、黑洞、相對論和量子力學(xué)等等繁復(fù)的課題。但雖然僅僅局限在計算機這一個很小的范疇中,這看似已經(jīng)不再復(fù)雜的主題,卻并也不會如此簡單。

    計算機系統(tǒng)的時鐘

    在計算機系統(tǒng)中主要有兩種時鐘:一種是墻上時鐘,一種是單調(diào)時鐘。它們都可以衡量時間,但卻有著本質(zhì)的區(qū)別,下面我們一一來分析。

    墻上時鐘

    墻上時鐘又稱為鐘表時間,顧名思義,和我們平時使用的鐘表的時間一樣,表示形式為日期與時間。在linux系統(tǒng)中墻上時鐘的表示形式為UTC時間,記錄的是自公元1970年1月1日0時0分0秒以來的秒數(shù)和毫秒數(shù)(不含閏秒),linux系統(tǒng)需要處理閏秒的邏輯就是由于linux系統(tǒng)使用UTC時間,但是系統(tǒng)中記錄的UTC時間是不含閏秒導(dǎo)致的,后面閏秒相關(guān)的部分會詳細(xì)的介紹。

    時間同步

    根據(jù)定義可以發(fā)現(xiàn),墻上時鐘的標(biāo)準(zhǔn)是在計算機外部定義的,所以需要確保墻上時鐘的準(zhǔn)確性就變成一個問題。計算機內(nèi)部的計時器為石英鐘,但是它不夠精確,存在過快或者過慢的問題,這主要取決于機器的溫度。所以依靠計算機自身來維持墻上時鐘的準(zhǔn)確性是不可能的。目前普遍采取的一種方式為計算機與NTP時間服務(wù)器進行定期通過網(wǎng)絡(luò)同步。當(dāng)然這個方式受限于網(wǎng)絡(luò)環(huán)境的影響,一般來說至少會有35毫秒的偏差,最大的時候可能會超過1秒。

    對于一些對時間精度要求很高的系統(tǒng),通過NTP進行同步是遠(yuǎn)遠(yuǎn)不夠的,而通過GPS接收機接受標(biāo)準(zhǔn)的墻上時鐘,然后在機房內(nèi)部通過精確時間協(xié)議(PTP)進行同步。PTP是一種高精度時間同步協(xié)議,可以到達亞微秒級精度,有資料說可達到30納秒左右的偏差精度,但需要網(wǎng)絡(luò)的節(jié)點(交換機)支持PTP協(xié)議,才能實現(xiàn)納秒量級的同步。

    對于時間同步,Google的做法更酷,通過GPS接收機接受標(biāo)準(zhǔn)的墻上時鐘,然后通過機房內(nèi)部部署原子鐘(精度可以達到每2000萬年才誤差1秒)來防止GPS接收機的故障。通過這些時間協(xié)調(diào)裝置會連接到特定數(shù)量的主服務(wù)器,然后再由主服務(wù)器向整個谷歌網(wǎng)絡(luò)中運行的其他計算機傳輸時間讀數(shù)(TrueTime API)。Google正是基于上面的時間精度保證,在此基礎(chǔ)上實現(xiàn)了第一個可擴展的、全球分布式的數(shù)據(jù)庫Spanner。

    閏秒出現(xiàn)的原因

    目前存在兩種時間計量系統(tǒng):基于地球自轉(zhuǎn)的世界時(UT1),它以地球自轉(zhuǎn)運動來計量時間,但由于地球自轉(zhuǎn)速率正在變慢,所以世界時的秒長會有微小的變化,每天達到千分之幾秒。原子時是取微觀世界的銫原子兩個超精細(xì)能級間躍遷輻射頻率來度量時間,精確度非常高,每天快慢不超過千萬分之一秒。從上面可以看出,原子時是度量時間均勻的尺度,但是與地球空間位置無關(guān);世界時度量時間的均勻性不好,但是它定義地球自轉(zhuǎn)一周為一天,繞太陽公轉(zhuǎn)一周為一年,這對人們的日常生產(chǎn)生活非常重要。

    為了統(tǒng)一原子時與世界時直接的差距,就產(chǎn)生了協(xié)調(diào)世界時(UTC)。從1972年1月1日0時起,協(xié)調(diào)世界時秒長采用原子時秒長,時刻與世界時時刻之差保持在正負(fù)0.9秒之內(nèi),必要時用階躍1整秒的方式來調(diào)整。這個1整秒的調(diào)整,就稱為閏秒(增加1秒為正閏秒,較少1秒為負(fù)閏秒)。UTC從1972年1月正式成為國際標(biāo)準(zhǔn)時間,它是原子時和世界時這兩種時間尺度的結(jié)合。

    閏秒的處理

    由于linux系統(tǒng)記錄的是自公元1970年1月1日0時0分0秒以來的秒數(shù)和毫秒數(shù),但是不含閏秒,這表示在linux系統(tǒng)中每分鐘有60秒,每天有86400秒是系統(tǒng)定義死的。所以linux系統(tǒng)需要額外的邏輯來處理閏秒。

    跳躍式調(diào)整

    當(dāng)UTC時間插入一個正閏秒后,linux系統(tǒng)需要跳過1秒,因為閏秒的這一秒鐘在linux系統(tǒng)中不能被表示;當(dāng)UTC時間插入一個負(fù)閏秒后,linux系統(tǒng)需要插入1秒,因為閏秒的這一秒鐘在linux系統(tǒng)中不存在。目前l(fā)inux系統(tǒng)就是采用該方式來處理閏秒的。在2012年6月30日UTC時間插入一個正閏秒的時候,由于linux系統(tǒng)的某些版本的閏秒處理邏輯觸發(fā)了一個死鎖的bug,造成了大規(guī)模的linux服務(wù)器內(nèi)核死鎖而宕機。

    NTP服務(wù)的slew模式

    NTP服務(wù)的slew模式并不使用跳躍式修改時間,而是漸進式的調(diào)整。比如當(dāng)UTC時間需要插入一個正閏秒,NTP服務(wù)會每秒調(diào)整一定ms來緩慢修正時間。這樣linux系統(tǒng)從NTP服務(wù)同步時間的時候就不會感知閏秒的存在了,內(nèi)核也就不需要啟動閏秒相關(guān)的邏輯了。

    單調(diào)時鐘

    單調(diào)時鐘它總是保證時間是向前的,不會出現(xiàn)墻上時鐘的回?fù)軉栴}。它非常適合用來測量持續(xù)時間段,比如在一個時間點讀取單調(diào)時鐘的值,完成某項工作后再次獲得單調(diào)時鐘的值,時鐘值之差為兩次檢測之間的時間間隔。

    但是單調(diào)時鐘的絕對值沒有任何意義,它可能是計算機自啟動以后經(jīng)歷的納秒數(shù)等等。因此比較不同節(jié)點上的單調(diào)時鐘的值是沒有意義的。

    時間的管理

    時間的概念對于計算機來說有些模糊,計算機必須在硬件的幫助下才能計算和管理時間。前面說的石英鐘就是用來做計算機的系統(tǒng)定時器的,系統(tǒng)定時器以某種固定的頻率自行觸發(fā)時鐘中斷。由于時鐘中斷的頻率是編程預(yù)定的,所以內(nèi)核知道連續(xù)兩次時鐘中斷的間隔時間(這個間隔時間就稱為節(jié)拍)。通過時鐘中斷,內(nèi)核周期性地更新系統(tǒng)的墻上時鐘和單調(diào)時鐘,從而計算和管理好時間。

    時間的精度

    目前系統(tǒng)定時器的中斷頻率為1000HZ,那么計算機能處理的時間精度為1ms。然而很多時候需要更加精確的時間,比如1微妙,計算機是怎么來解決這個問題的呢?

    在每一次計算機啟動的時候,計算機都會計算一次BogoMIPS的值,這個值的意義是處理器在給定的時間內(nèi)執(zhí)行指令數(shù),通過BogoMIPS值,計算機就可以得到很小很小的精度了。比如1秒計算機執(zhí)行了N條指令,那么計算機的精度就可以達到N分之一秒。很明顯N是一個非常非常大的數(shù)目,因而計算機可以得到非常非常精確的時間。

    總結(jié)

    在本文中,我們討論了計算機系統(tǒng)時間同步的方式,同時分析了閏秒產(chǎn)生的原因,以及l(fā)inux系統(tǒng)應(yīng)對的辦法,然后概覽性的講了linux系統(tǒng)是怎么進行時間的計算與管理的,最后分析了linux系統(tǒng)可以提高高精度時間的方法。

    參考

    • LKML: Chris Adams: Re: Bug: Status/Summary of slashdot leap-second crash on new years 2008-2009
    • Bug 479765 – Leap second message can hang the kernel
    • Robert Love.Linux Kernel Development
    • Martin Kleppmann.Designing Data-Intensive Applications

    總結(jié)

    以上是生活随笔為你收集整理的你真的理解计算机时间吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。