我们身边的千年虫

Author: 贾广向 Date: 1999年 第12期 33版

    随着2000年的日益临近,千年虫(也称2000年问题,Year 2000,简称Y2K)这个话题正越来越多地见诸于报端、电视等媒体,日益引起大家的关注。那么,千年虫都发作于哪些地方,它对我们的生活到底有哪些影响呢?(^123301a^)
#1    什么是千年虫?
    千年虫会发生在哪些地方?要回答这个问题,需要先明确一下千年虫的定义和起因,千年虫是在计算机中对于年份和日期的表示方式不完整而引起的程序出错,它包含三个方面的内容:
    1. 由于只使用了两位数来表示年份,会引起跨世纪的日期计算得出错误结果,比如用02减去98会得-96,而用2002减去1998结果是4。
    2. 由于特殊日期(9/9/99)和计算机中特殊定义的字符串相冲突而有可能引起操作错误。
    3. 闰年问题,即能否正确计算2000年是闰年,2月份有29日这一天。
    根据以上三个方面的表现,我们可以肯定地说,千年虫在所有使用了智能程序进行有关日期的处理和操作的地方都有可能发作。举个例子来说,对于一部星期一至星期五工作时间开放、星期六、日下班时间关闭的定时开关电梯来说,由于它能够定时开关,电梯里必定有智能程序,同时智能程序中也必定有和日期有关的操作,才能够计算出一年中每个月的每一天是星期几,那么当2000年来临时,如果这部电梯因为只使用了两位数来表示年份,就会将2000年识别为1900年,从而带来其中的日历计算错误,造成电梯的自动功能紊乱。因此在此需要特别指出的是,千年虫不但存在于我们熟知的计算机系统中,对于那些使用了智能芯片的设备,只要其中有和日期有关的操作,也就有可能在2000年来临时导致千年虫发作。而对于我们所熟知的计算机系统,千年虫也并不只是存在于我们所编写的应用程序和软件中,包括操作系统、硬件在内的计算机组成部分,由于其中也使用了进行日期操作的各种各样的小程序(如微机硬件中就有BIOS),也就会有可能受到千年虫的影响。
#1    哪些地方有虫?
    那么,千年虫主要会在什么地方发作呢?就世界上的情况来说,千年虫主要集中发作于两个方面:
    一个是配备比较早(大约在80年代中期以前投入使用)的主机上的应用系统,如在IBM 4381,IBMAS/400等机型上运行的应用程序。这些机器系统国际上都应用的相当早,因此其上面的应用程序经过十余年的开发和发展其规模已经非常庞大,比如美国的AT&T电讯公司,其内部就有超过3.6亿行的应用程序需要检测是否存在2000年问题,这确实是很大的工作量,因此给解决2000年问题造成了极大的麻烦。
    千年虫另外一个容易发作的方面是嵌入式设备。所谓嵌入式设备,就是指设备中使用了智能芯片的系统,由于智能芯片价格低廉,目前嵌入式设备已变成无处不在,由生产线、大量的自动化仪器仪表、汽车、电梯、警报系统、消防检测器到医疗设备,以至电话交换机、空调机、交通灯、恒温器等,可谓渗透到日常生活每个角落。这些设备中应用的程序往往都已经固化到元器件中,因此一旦产品只使用了两位数来表示年份,就会引发2000年问题,而要替换这些芯片,又往往不得不把整个系统都替换,这会造成资金和操作上的困难,使解决2000年问题更加麻烦,也是无法按时解决2000年问题的隐患之一。
    对于我们普遍使用的PC机又会怎样呢?
    从硬件角度讲,2000年问题主要存在于微机的BIOS不能实现向2000年的自动过渡,相对来讲是比较简单的。否则问题一旦发作起来就会让你手忙脚乱,狼狈不堪。具体来讲,在微机硬件中有一个实时系统时钟,它依靠微机主板上的纽扣电池作为电源和动力,时刻保持运转,这样微机在关机时也能够保持时间前进。这个实时系统时钟的时间数值是保存到主板BIOS中的存储器(CMOS)中的。当微机启动时,微机操作系统从BIOS的那个时间存储器里读取当前时间,包括四位数的年份以及月份、日、小时、分钟、秒等,从此,只要不关机,操作系统的时钟就会以微机外接电源(不再是主板上的纽扣电池)为动力单独向前运转,并保存在微机的内存中(不再是BIOS中的存储器)。微机的2000年问题主要表现在,尽管RTC—实时系统时钟中使用了四位数来表示年份,但其年份数据的前两位(世纪信息,如“19”,“20”等)并不和后两位发生联系,也就是说,当后两位从“99”变为“00”时,并不能向前进位使前两位数由“19”变为“20”,这样,RTC中1999年的下一年便应该是1900年,从而引发了2000年问题。
    而对于目前应用的操作系统(如DOS 5.0以上版本、Windows 3.x、Windows95、Windows 98以及Linux、SCO Unix、Windows NT)时钟来说,其年份都是用四位数来表示的,因此不会存在2000年问题。但目前的问题是操作系统中附带的一些小实用程序、工具或函数调用,有可能因为年份表示不完整而引起千年虫发作,但可以肯定的一点是,只要你不使用到这些小实用程序或工具,就不会引发2000年问题。如果你要详细了解这些操作系统中到底有哪些实用程序、工具或函数调用存在2000年问题,可以到本人站点(http://www.netease.com/~year2000)的微机Y2K和业界支持两个栏目中查询,同时站点里也有关于微机2000年问题方面的详细论述。
    总之,对于我们自己使用的微机来说,其系统方面的2000年问题是相对简单的,其难点还应该是其上面规模庞大的应用程序上。
#1    千年虫怎么扰乱我们的生活?
    如果千年问题没有得到及时的解决,那么我们的生活可能会出现一些意想不到的混乱……
    金融业:到了2000年,银行里面的电脑可能将2000年解释为1900年,引起利息计算上的混乱,甚至自动将所有的记录消除;自动取款机会拒收“00”年的提款卡;
    保险业:保险公司可能会将每份保险的年限算错。
    电信业:你在1999年12月31日23:59分打了三分钟的电话,电话局的账单却可能显示为(100年-3分钟);
    电力系统:美国夏威夷电力公司曾经做了一项实际的实验,输入00年,结果电厂自动停止操作,在某些情况下也发生电压与频率方面的变化,造成用户全面停电、电器故障甚至烧毁;美国联邦核管处更是担心全美的百余座核电厂里的仪器由于2000年问题失控造成核辐射外泄等灾难。
    税务系统:税务局的电脑可能会认为你拖欠了100年的税款,从而寄来天文数字般的补税通知。
    医药业:医疗仪器如救生系统或监视系统可能死机导致患者生命危急以及血库管理、医嘱系统与病历、器材管理全部无法正常运作。
    交通系统:由于控制雷达的电脑失灵,空中管制完全瘫痪,班机停飞。
    最近,2000年问题更成了美国各大汽车公司的头疼问题,原来,美国汽车都有确定的使用年限(比如10年),超过该时间期限后汽车便会自动拒绝发动。麻烦出在一些刚刚生产出来的自动化程度较高的汽车,其内部控制芯片仍用两位10进制数表示年份,那么到了2000年后,由于年份变成了00年,和出厂日期(比如1998年)一比较,竟然已运行了98年,汽车当然便会自动拒绝发动了。美国花旗银行(CITYBANK)在对其属下的汽车进行2000年问题测试时,便发现了这个问题。(^123301b^)
    怎么样,即使你还没有买电脑,也不会觉得千年虫与你一点关系没有吧。不过,随着各行各业解决千年问题的迅速进展,上述问题也几乎不可能在我们的生活中发生了。