还记得2000年时千年虫危机令我们有多恐慌吗?所有的人都很担心,因为计算机在内部时钟里只用了两个数字来代表年份,这样2000年1月1日就会被显示为“1/1/00”,跟1900年1月1日的显示结果是一样的。
在1999年的时候,这个问题看起来似乎会给现代社会造成一次灾难性的影响,因为计算机里的时间错误会让很多系统完全乱套。
现在,又有一个跟软件编程有关的全球性难题出现了:由于软件代码运行时检测时间的方式存在一些问题,大量的计算机软件很可能会在2038年失效。
就象世纪之交时的情况一样,世界上的每一款软件和计算机编码都必须接受检查和升级。这个不是一件小事,它的工作量几乎是个天文数字。
在2000年的时候,我们通过改写软件程序绕过了千年虫问题。虽然千年虫并未演变成一场灾难,但是当时却给技术行业造成了巨大的破坏。整个世界上每一家使用软件的公司都必须正视千年虫问题并且聘请专家来解决它。最后,千年虫并没有给普通民众带来任何麻烦,但是技术行业却为此花费了大量的时间和资源。
所有利用32位签名整数来存储时间的软件都会受到2038问题的影响。当大批工程师在上个世纪七十年代开发出世界上的第一款UNIX操作系统时,他们做出了一个很随意的决定,即使用32位签名整数(或数字)来代表时间。整个计时系统的起始时间是1970年1月1日,例如,919642718代表的就是在上述时间之后过了919642718秒之后的那个时刻,经过换算它代表的就是美东时间1999年2月21日19点18分38秒。
之后,UNIX系统中的时间编码机制得到广泛应用,它被整合到所有需要检测时间的软件或硬件系统之中。
当你需要计算两个时刻点之间的时间长度时,这个系统是很有用的。但是这个时间编码机制存在一个严重的问题,因为32位软件能够检测到的最大秒值为2147483647。这就是32位系统能够显示出的最大数字。
通过计算,目前在各种软件中广泛应用的时间编码机制中的这个最大值对应的时间是2038年1月19日。也就是说,如果无法解决这个问题,地球上的所有计算机将在那个时刻点将时间计数“归零”,重新从1970年1月1日起算起。
为了更详细地了解这个问题,我们拜访了宾夕法尼亚州大学的计算机与信息科学教授乔纳森史密斯(Jonathan Smith)。
据史密斯教授称,这是一个真实存在的问题,它会对所有使用时钟累加机制的软件造成影响。
他解释说:“大多数基于UNIX的系统都使用的是起始时间为1970年1月1日的32位时钟,那个时钟系统将在2038年发生溢出错误。计时器可能会停止工作,跟时间有关的所有系统都会乱套。”
值得庆幸的是,要解决这个问题,从技术上来说并不困难。我们只要将时钟系统换成更高位数的值比如64位就行了,那样就会得到一个更大的最大值。在过去的几年里,很多个人电脑已经换成了64位系统,尤其是那些需要将计划做到2038年之后的公司比如需要处理30年贷款交易的银行。
实际上,64位系统只是将这个问题发生的时间向后推了而已,虽然看似治标不治本,但是其时钟系统的最大计数值对应的时间是2920亿年之后!因此这也等于很好地解决了这个难题。