Y2K 计算机危机的主要问题是什么?人们如何尝试解决这些问题?

哈维穆德学院计算机科学助理教授乔什·霍达斯(Josh Hodas)给出了以下概述

图片:美国商务部
警告标志。美国商务部网站上的标志表明,人们正优先解决潜在的 Y2K 问题。

“Y2K 问题”包括一系列可能持续数年,并且由于某些计算机软件和硬件表示日期的方式而产生的问题——因此得名“Y2K”,即“2000 年”(K 是“千”的缩写)。简而言之,由于许多计算机系统在日期中仅存储年份的最后两位数字,因此您无法真正判断该日期属于哪个世纪。


支持科学新闻报道

如果您喜欢这篇文章,请考虑通过以下方式支持我们屡获殊荣的新闻报道 订阅。通过购买订阅,您将帮助确保关于塑造我们当今世界的发现和想法的具有影响力的故事的未来。


直到最近,这种歧义在大多数情况下并不重要。计算机处理与最近事件相关的日期,因此它们能够将所有日期视为属于本世纪。然而,随着我们越来越接近新的千年,许多系统将需要处理来自两个不同世纪的日期,并且它们必须能够区分它们,才能避免无数的故障。

想想您可能正在携带的新信用卡——其中许多信用卡已经有下个世纪的到期日期。当您尝试购买东西时,信用卡终端必须确定该卡是否已过期。为此,它会运行一个程序,检查到期日期是否大于当前日期。如果卡在 2003 年到期,那么答案显然应该是肯定的。但是,如果系统仅使用两位数字来表示年份,则会发现 03 不大于 99,并且您的卡已过期。这种问题——一些主要的信用卡已经面临过——可能会困扰任何依赖日期比较的系统。

在上述情况下,至少有一个人在发生问题时可以介入:持卡人或发卡机构。更令人不安的是,可能是 Y2K 问题的“沉默杀手”版本,它可能发生在计算机、烤面包机、汽车、发电厂和许多其他设备中使用的数百万个嵌入式处理器中。

接下来,考虑一个需要每年运行一次内部安全测试的系统。系统会定期检查当前日期与上次测试日期之间的差值是否大于 365 天。但是,当本世纪的上次测试日期减去下个世纪的日期时,答案是一个小于 365 的负数,因此系统不会认为现在是执行测试的时候。事实上,如果保持原样,该系统在 100 年内不会再进行另一次安全检查。

为什么这些系统会做出如此糟糕的假设?在大多数情况下,设计人员从未想过他们编写的程序会使用这么长时间——也就是到 21 世纪。当时,在日期中使用较短的两位数年份确实有实际优势。

有很多不同的方法来解决这个问题。理想情况下,我们可以重写所有有问题的程序并修改所有现有的存储数据。但是在很多情况下,该程序太旧了,原始的“源代码”(程序员在将其转换为计算机可理解的数字形式之前编写的形式)丢失了,并且修改数字形式是不切实际或不可能的。

当源代码存在时,可能不再有与该代码语言版本兼容的“编译器”(将源代码转换为其数字形式的程序)。即使可以成功修改程序,更改所有存储的数据也是不切实际的。许多不依赖于日期的程序也需要更改,因为当添加额外日期数字的空间时,文件中数据的放置位置会发生变化。

在最后一种情况下,即可以更改代码但无法更改存储的数据的情况下,有时可以争取一些时间。最流行的技术称为“窗口化”:它利用了许多系统仅存储关于相对较短时间段(称为窗口)的信息的事实。例如,在我的大学,成立于 1955 年,我们可以安全地假设,00 到 55 范围内的任何存储的毕业日期都指的是下个世纪。因此,在未来的 55 年内,不会出现关于毕业日期的歧义,并且通过少量编程,我们可以将更大的问题推迟到那时。当然,对于记录学生的出生日期,我们必须使用不同的窗口。对于教职员工的出生日期,还有不同的窗口,依此类推。

另一种流行的技术是更有效地重用为两位日期分配的空间。由于使用了相同的空间,其他数据不会移动,并且其他不访问日期字段的程序不需要重写。事实证明,这是可能的,因为在许多较旧的数据库中,数字使用相当低效的表示形式存储,称为扩展二进制编码十进制交换码(EBCDIC,发音为“ehb-sih-dik”)。

尽管有很多提出的解决方案,但真正的问题是很难想象如何在必要的时间范围内修复所有需要修复的系统。此外,对于数百万个嵌入式处理器来说,尚不清楚如何传播修复程序。

那么,您应该卖掉房子,搬到带有 10,000 加仑燃料箱和装满食物的掩体的木屋吗?尽管这一切听起来很糟糕,但许多人认为,那些厄运的预测实际上只是千年热的变体。虽然肯定会出现一些挫折,但大多数专家认为最糟糕的问题将被避免。许多主要行业和政府机构已经进行了测试:他们将计算机上的时钟提前到下个世纪的各个日期,以查看会发生什么。在大多数重要的情况下——包括银行,什么也没发生。

© . All rights reserved.