Unix即将迎来50岁生日。这是什么意思?

Unix时间,也称为“epoch时间”,是自1970年1月1日以来经过的秒数。在Unix 50周年之际,让我们来看看内核开发人员担心什么。

2020年对Unix来说是意义重大的一年。年初,Unix迎来了50岁生日。

虽然Unix的一些早期开发早于其正式的“纪元”开始之前,但是1970年1月1日仍然是POSIX时代的起点,也是所有Unix事物公认的起点。2020年1月1日将是自那一刻起的50周年纪念日。

Unix时间vs人类时间

就人类的时间而言,50年是一件大事。就Unix时间而言,50年并没有什么特别的。48.7年也同样重要。

Unix(包括Linux)系统以32位的方式将日期/时间值存储为自1970-01-01 00:00:00 UTC以来经过的秒数。要确定从那时起经过了多少秒,以及现在Unix时间值的样子,可以发出如下命令:

$ date +%s 1576883876

% s参数告诉date命令将当前日期/时间显示为自1970-01-01开始的秒数。

Unix系统可以管理多少时间?

为了了解Unix系统可以容纳多少时间,我们需要查看32位字段的容量。可以这样计算:

$ echo '2^32' | bc
4294967296

但是,由于Unix需要容纳负数,所以它为数字的符号保留一位,从而将其减少为:

$ echo '2^31' | bc
2147483648

由于Unix编号从0开始,这意味着我们有2,147,483,648个值,但是最大的可能值是2,147,483,647。Unix日期/时间值不能超过这个数字—就像您汽车上的里程表可能不能超过999,999英里一样。加1等于0。

一年有多长?

大多数年份的秒数可以这样计算:小时/天乘以分钟/小时乘以秒/分钟乘以一年的天数:

$ expr 24 \* 60 \* 60 \* 365 31536000

在闰年,我们只是增加了一天:

$ expr 24 \* 60 \* 60 \* 366 31622400

Unix将如何度过它的50岁生日?

2020年1月1日中午12点1577836800在时代的时间。这个计算有点复杂,但主要是因为我们必须适应闰年。自这个时代开始以来,我们已经经历了12个闰年,从1972年开始,最后一次是在2016年。到2020年,我们将有38个正常年份。

这是一个计算expr在这50年里,数秒的命令:

$ expr 24 \* 60 \* 60 \* 365 \* 38 + 24 \* 60 \* 60 \* 366 \* 12 1577836800

第一部分是计算38个非闰年的秒数。然后我们加上一个类似的计算闰年的366天。相反地,你可以使用之前提供的秒数,然后这样做:

$ expr 31536000 \* 38 + 31622400 \* 12 1577836800

这种跟踪日期和时间的方式使Unix系统对2000年问题几乎没有影响。1999年末,人们担心进入2000年将对计算机系统造成严重破坏。经历的问题比人们担心的要少得多。事实上,只有以两位数格式存储年份的应用程序才会将年份指向00视为时间向后跳跃的标志。尽管如此,许多应用程序开发人员仍然有一些繁琐的额外工作要做,以确保他们的系统在2000年到来时不会遇到严重的问题。

当Unix时间将运行问题

Unix系统不会遇到Y2K问题类型直到2038当上面所描述的存储日期将超出其32位空间分配时。但那是18年后的事了,内核开发人员已经在研究如何避免灾难了。现在开始恐慌还为时过早。

2038年的问题有时被称为Y2K38问题。我们必须在2038年1月19日星期二之前解决这个问题。如果这个问题没有解决,超过这个日期的系统可能会认为是1901年。解决这个问题的一种方法是切换到64位的日期/时间信息表示。有些人认为,即便如此,事情也比听起来要复杂得多。无论如何,现在恐慌可能还为时过早。同时,也许在这个除夕夜唱完《友谊地久天长》之后,您可以对Unix唱“生日快乐”。已经50岁了,这仍然是一件大事。

加入网络世界社区有个足球雷竞技app脸谱网LinkedIn对最重要的话题发表评论。
相关:

版权©2019Raybet2

工资调查:结果在