关于闰秒

系统
2012年6月30日,也就今天晚上,时间会多出现一秒,也就是我们所说的闰秒。我不知道大家对闰秒的了解有多少,所以写下这篇文章。

2012年6月30日,也就今天晚上,时间会多出现一秒,也就是我们所说的闰秒。我不知道大家对闰秒的了解有多少,所以写下这篇文章。

背景知识

闰秒是在在UTC(中文“世界标准时间”或“世界协调时间”/英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”)是基于Atomic Clock(原子时钟)的一种时间,向太阳时(Solar Time )对齐的一种方法,因为太阳时是根据地球公转来计算的。所以,1972年制定的UTC为了确保其时间相对于UTC的时间误差不能超过0.9秒,因此在过一段时间后需要加一秒。下图是有UTC以来闰秒的调整表(来自Wikipedia闰秒的中文词条)

 

从上表中我们可以看到,从1972年到现在,在这四十年里已经进行过25次的闰秒调整。闰秒是在每年6月或12月的***一天的***一分钟进行跳秒或不跳秒。是否加入闰秒由位于巴黎的国际地球自转和参考坐标系统服务(IERS – International Earth Rotation and Reference Systems Service)决定。如果决定加入闰秒,那么这一秒是被加在第二天的00:00:00前的,也就是说,时间会出现23:59:60的情况,然后才是第二天的00:00:00。如果是负闰秒的话,23:59:58的下一秒就直接跳到第二天的00:00:00了。现在,所有闰秒都是正闰秒。

计算机处理闰秒

那么,对于我们的电脑系统来说,怎么处理这个闰秒呢?一般来说,我们需要为我们的电脑系统配置UTC时钟,并通过NTP (Network time protocol)来进行时间同步,NTP服务器会一级一级地下发闰秒事件通知直到最边缘的NTP服务器,然后NTP服务器就会把闰秒通知发给客户端的操作系统,由操作系统来处理闰秒通知。

虽然闰秒调整对普通民众的日常生活不会产生影响。不过,这个问题将影响部分开启ntp服务的Linux操作系统——会导致Linux内核Crash!Linux kernel是在2.6.18-164.e15之后的版本中解决了这个问题。换句话说,Linux kernel低于2.6.18-164的Linux系统,无论是什么公司的Linux都将受到影响。(今晚过后大家可以查看一下你的Linux系统日志,看看闰秒有没有发生)

可以参看下面的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

那么,我们的操作系统是怎么处理正闰秒通知的?通常来说有三种实现:

  1. 后退一秒。
  2. 停止一秒。
  3. 真正的增加一秒。

懂编程的人一眼就能看出来,前两种方式是以一种Workaround或Hack的方式解决这个问题。***种方式会导致一些基于timestamp的消息通知乱序了,而第二种会导致出现两个一模一样的timestamp。***一种不会出现timestamp的问题。对了,你还记得以前那篇《你确信你了解时间吗?》的文章吗?

***,说说Windows,Windows Time Service不支持闰秒通知,所以,当闰秒发生的时候,你的Windows上的时间会比实际时间快一秒钟,这需要等下一次的时钟同步才会完成修正。

【编辑推荐】

  1. 计算机在做些什么:建模、连接、交互利用
  2. SUSE助力OpenStack ***中国云计算基础建设
  3. Google携手清华助力西部高校培养创新实用型计算机人才
责任编辑:Yeva 来源: coolshell
相关推荐

2015-07-10 09:42:33

2012-07-04 15:50:02

系统

2012-07-02 09:55:28

闰秒技术故障

2015-01-13 11:09:14

闰秒Linus Torva

2015-07-03 09:27:43

网络闰秒

2017-01-05 18:43:58

闰秒Linux服务器

2012-07-03 09:57:11

闰秒Linux 服务器

2012-07-02 16:38:22

Linux服务器闰秒

2015-07-01 18:18:39

网络中断

2012-07-05 09:56:04

千年虫闰年虫闰秒虫

2015-06-26 10:11:18

操作系统闰秒新支点

2022-11-23 14:15:17

2015-06-25 15:33:17

oracle数据库

2022-07-26 15:41:24

计算机闰秒

2019-10-17 13:57:38

戴尔

2011-08-08 14:44:11

2011-06-28 10:13:45

翰纬ITSM运维管理

2022-08-01 09:43:19

程序员Googlefacebook

2015-08-17 09:59:49

MVCReact数据库

2011-01-21 12:12:54

sendmail
点赞
收藏

51CTO技术栈公众号