龙空技术网

千年虫再次归来,如不更换系统,2038年还有问题

话语心得 2653

前言:

现时我们对“千年虫 2038”都比较重视,看官们都需要学习一些“千年虫 2038”的相关知识。那么小编也在网络上网罗了一些关于“千年虫 2038””的相关文章,希望各位老铁们能喜欢,咱们一起来了解一下吧!

还记得二十年前,在千禧之年来临的时候,多少人为自己的电脑忧心不已。生怕第二天,千年虫就让自

己的电脑再也无法启动。程序员坐在电脑前心惊胆战,因为他们用最简单的方法修补了“千年虫”。啥

叫千年虫?也难怪现在的很多亲们不知道,时间有点久远了,让我们徐徐道来。

20多年前,个人电脑或者工业电脑(也叫单片机),存储空间有限,而存储系统又很贵。有多贵呢?一条内存上千块,一个1G的硬盘上千块,就连电脑主板上的存储器都造价不菲。于是那就能省就省吧,程序员大多采用两位数来表示年份,比如 03/12/99,而不是 03/12/1999。

但是到了 2000 年,系统就又回到 01/01/00,无法明确表示这是 1900年还是 2000年。这下子问题的严重了:想想看, 1999 年最后一天的 23:59 结束时,电脑如何表示2000 年第一天时间?这个 00:00 代表什么?

麻烦何止这些,数百万台的个人电脑,以及关注国计民生的很多设备,比如电讯公司交换机,自动化仪

器仪表、电梯、警报系统、恒温灯等嵌入式设备上都存在千年虫隐患。全世界这么多的设备需要修改的

代码数量极其庞大。一时间,全球笼罩在所有自动设备和电脑都失效的恐慌中。

想想看,如果程序停止运行、崩溃或者发出错误指令,银行无法进行金融操作存款一夜清零、电站出现

停机、飞机航线错误,等等。恐怖袭击、飞机坠落、股市崩溃,世界将陷入混乱......

每逢谣言兴起,一大帮西方人已经把山洞当做避难所,存储了很多食物、医疗包等必需品,还有一些人

把银行存款纷纷取出来或者是购买黄金。

为了避免千年虫“灾难” 发生,各国政府和企业动用大量资源查找和修复这个 bug。业内人士估计,

如果修补 80% 的计算机,花在防备千年虫上的费用在 3000 亿到 5000 亿美元之间。所以阴谋论兴起

,有言论说千年虫是个商业大骗局。

修复 这个bug 的方式有两种:完全重写代码,或者采用 “windowing” 的方式快速修复。indowing”就是把

00 到 20 之间的所有日期都当做 20XX 年而不是 19XX 年。很显然,相比于把所有两位数表示的年份都

修改成四位数,这种方式更省钱、更快而且更容易。现在看来,这不是个很好的办法。然而在时间紧迫

和商家制造的恐慌中,很多个人和企业已经顾不得仔细揣摩了。

有硬件解决的,电脑主板插个能显示新时间模式的卡,能卖好几千块。有软件解决的,弄个软件运行一

下,到了时间节点,操作系统自动就切换四位数时间模式了。还有一些懂电脑的人或者程序员,很热衷

的为大家解决这个虫虫,小赚了一笔。

当时没有人打算彻底更换操作系统或者强制更换硬件解决问题吗?当时认为,等到投入大量的资金和时

间去永久修复好这些 bug 之后,操作系统早就更换了。所以,尽管 “windowing” 修复的程序只能是

用二三十年,也足够了。

拖延错误而不是解决,是人类的顽疾之一。二十年弹指一挥间,这群程序员老了,但是人们发现,要为

当初的懒惰而付出代价!

据《纽约时报》报道,2019年纽约的停车收费表从 2020 年 1 月 1 日开始可能将不支持信用卡付款,

整个城市的一万多个计费表仅通过现金或 ParkNYC 接受付款;波兰公司 Novitus 生产的收银机由于记

录时间故障而无法打印收据;视频游戏 WWE 2K20 于 2020 年 1 月 1 日午夜停止工作。

图 | 纽约市交通局表示,停车计时器的信用卡支付软件设定在 1 月 1 日失效,导致了一起大规模故

有相当数量的系统出现 #2020 错误。当年解决千年虫问题,不过是把这个问题推迟了 20 年而已。20

年后的今天,很多系统仍然还在使用,系统仍旧以为以为我们在 1920 年。”2020 年的到来,意味着我

们已经进入到了 1920-2020 窗口期的结尾。各大公司又开始为一些系统临时更改程序来解决。

即便躲过了这一关,在 2038 年我们将面临另一个数据存储问题。32 位的 Unix 和 Linux,能存储的最大

数字为 2 的 31 次方,即 2147483647。从 1997 年开始计算,2147483647 用来表示的秒数最多只能

用到 2038 年 01 月 19 日 03 时 14 分 07 秒,在这个时间之后,系统会回到 - 2147483648,代表的时

期是 1901 年 12 月 13 日 20 时 45 分 52 秒。不同于千年虫,2038 会影响的不仅仅是应用层,而是会

影响到最底层的时间控制功能。不过幸运的是,如果能在 2038 年之前把所有 32 位系统淘汰并采用 64

位的话,我们将会巧妙地躲开 2038 问题。

标签: #千年虫 2038