關(guān)于閏秒
2012年6月30日,也就今天晚上,時(shí)間會(huì)多出現(xiàn)一秒,也就是我們所說(shuō)的閏秒。我不知道大家對(duì)閏秒的了解有多少,所以寫(xiě)下這篇文章。
背景知識(shí)
閏秒是在在UTC(中文“世界標(biāo)準(zhǔn)時(shí)間”或“世界協(xié)調(diào)時(shí)間”/英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”)是基于Atomic Clock(原子時(shí)鐘)的一種時(shí)間,向太陽(yáng)時(shí)(Solar Time )對(duì)齊的一種方法,因?yàn)樘?yáng)時(shí)是根據(jù)地球公轉(zhuǎn)來(lái)計(jì)算的。所以,1972年制定的UTC為了確保其時(shí)間相對(duì)于UTC的時(shí)間誤差不能超過(guò)0.9秒,因此在過(guò)一段時(shí)間后需要加一秒。下圖是有UTC以來(lái)閏秒的調(diào)整表(來(lái)自Wikipedia閏秒的中文詞條)
從上表中我們可以看到,從1972年到現(xiàn)在,在這四十年里已經(jīng)進(jìn)行過(guò)25次的閏秒調(diào)整。閏秒是在每年6月或12月的***一天的***一分鐘進(jìn)行跳秒或不跳秒。是否加入閏秒由位于巴黎的國(guó)際地球自轉(zhuǎn)和參考坐標(biāo)系統(tǒng)服務(wù)(IERS – International Earth Rotation and Reference Systems Service)決定。如果決定加入閏秒,那么這一秒是被加在第二天的00:00:00前的,也就是說(shuō),時(shí)間會(huì)出現(xiàn)23:59:60的情況,然后才是第二天的00:00:00。如果是負(fù)閏秒的話,23:59:58的下一秒就直接跳到第二天的00:00:00了?,F(xiàn)在,所有閏秒都是正閏秒。
計(jì)算機(jī)處理閏秒
那么,對(duì)于我們的電腦系統(tǒng)來(lái)說(shuō),怎么處理這個(gè)閏秒呢?一般來(lái)說(shuō),我們需要為我們的電腦系統(tǒng)配置UTC時(shí)鐘,并通過(guò)NTP (Network time protocol)來(lái)進(jìn)行時(shí)間同步,NTP服務(wù)器會(huì)一級(jí)一級(jí)地下發(fā)閏秒事件通知直到最邊緣的NTP服務(wù)器,然后NTP服務(wù)器就會(huì)把閏秒通知發(fā)給客戶端的操作系統(tǒng),由操作系統(tǒng)來(lái)處理閏秒通知。
雖然閏秒調(diào)整對(duì)普通民眾的日常生活不會(huì)產(chǎn)生影響。不過(guò),這個(gè)問(wèn)題將影響部分開(kāi)啟ntp服務(wù)的Linux操作系統(tǒng)——會(huì)導(dǎo)致Linux內(nèi)核Crash!Linux kernel是在2.6.18-164.e15之后的版本中解決了這個(gè)問(wèn)題。換句話說(shuō),Linux kernel低于2.6.18-164的Linux系統(tǒng),無(wú)論是什么公司的Linux都將受到影響。(今晚過(guò)后大家可以查看一下你的Linux系統(tǒng)日志,看看閏秒有沒(méi)有發(fā)生)
可以參看下面的bug描述:
- 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
那么,我們的操作系統(tǒng)是怎么處理正閏秒通知的?通常來(lái)說(shuō)有三種實(shí)現(xiàn):
- 后退一秒。
- 停止一秒。
- 真正的增加一秒。
懂編程的人一眼就能看出來(lái),前兩種方式是以一種Workaround或Hack的方式解決這個(gè)問(wèn)題。***種方式會(huì)導(dǎo)致一些基于timestamp的消息通知亂序了,而第二種會(huì)導(dǎo)致出現(xiàn)兩個(gè)一模一樣的timestamp。***一種不會(huì)出現(xiàn)timestamp的問(wèn)題。對(duì)了,你還記得以前那篇《你確信你了解時(shí)間嗎?》的文章嗎?
***,說(shuō)說(shuō)Windows,Windows Time Service不支持閏秒通知,所以,當(dāng)閏秒發(fā)生的時(shí)候,你的Windows上的時(shí)間會(huì)比實(shí)際時(shí)間快一秒鐘,這需要等下一次的時(shí)鐘同步才會(huì)完成修正。
【編輯推薦】