新闻  |   论坛  |   博客  |   在线研讨会
什么是千年虫?千年虫是什么?
yanqin | 2009-05-19 20:11:06    阅读:18470   发布文章

  

  千年虫是在计算机中对于年份和日期的表示方式不完整而引起的程序出错,它包含三个方面的内容:

 

1.由于只使用了两位数来表示年份,会引起跨世纪的日期计算得出错误结果,比如用02减去98会得-96,而用2002减去1998结果是4。

 

2.由于特殊日期(9/9/99)和计算机中特殊定义的字符串相冲突而有可能引起操作错误。

 

3.闰年问题,即能否正确计算2000年是闰年,2月份有29日这一天。

 

  根据以上三个方面的表现,我们可以肯定地说,千年虫在所有使用了智能程序进行有关日期的处理和操作的地方都有可能发作。举个例子来说,对于一部星期一至星期五工作时间开放、星期六、日下班时间关闭的定时开关电梯来说,由于它能够定时开关,电梯里必定有智能程序,同时智能程序中也必定有和日期有关的操作,才能够计算出一年中每个月的每一天是星期几,那么当2000年来临时,如果这部电梯因为只使用了两位数来表示年份,就会将2000年识别为1900年,从而带来其中的日历计算错误,造成电梯的自动功能紊乱。因此在此需要特别指出的是,千年虫不但存在于我们熟知的计算机系统中,对于那些使用了智能芯片的设备,只要其中有和日期有关的操作,也就有可能在2000年来临时导致千年虫发作。而对于我们所熟知的计算机系统,千年虫也并不只是存在于我们所编写的应用程序和软件中,包括操作系统、硬件在内的计算机组成部分,由于其中也使用了进行日期操作的各种各样的小程序(如微机硬件中就有BIOS),也就会有可能受到千年虫的影响。

 

  哪些地方有千年

 

  那么,千年虫主要会在什么地方发作呢?就世界上的情况来说,千年虫主要集中发作于两个方面:

 

  一个是配备比较早(大约在80年代中期以前投入使用)的主机上的应用系统,如在IBM4381,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年问题。

 

  而对于目前应用的操作系统(如DOS5.0以上版本、Windows3.x、Windows95、Windows98以及Linux、SCOUnix、WindowsNT)时钟来说,其年份都是用四位数来表示的,因此不会存在2000年问题。但目前的问题是操作系统中附带的一些小实用程序、工具或函数调用,有可能因为年份表示不完整而引起千年虫发作,但可以肯定的一点是,只要你不使用到这些小实用程序或工具,就不会引发2000年问题。如果你要详细了解这些操作系统中到底有哪些实用程序、工具或函数调用存在2000年问题,可以到本人站点(http://www.netease.com/~year2000)的微机Y2K和业界支持两个栏目中查询,同时站点里也有关于微机2000年问题方面的详细论述。

 

  总之,对于我们自己使用的微机来说,其系统方面的2000年问题是相对简单的,其难点还应该是其上面规模庞大的应用程序上。

 

千年虫怎么扰乱我们的生活?

 

  如果千年问题没有得到及时的解决,那么我们的生活可能会出现一些意想不到的混乱……

 

金融业:到了2000年,银行里面的电脑可能将2000年解释为1900年,引起利息计算上的混乱,甚至自动将所有的记录消除;自动取款机会拒收“00”年的提款卡;

 

保险业:保险公司可能会将每份保险的年限算错。

 

电信业:你在1999年12月31日23:59分打了三分钟的电话,电话局的账单却可能显示为(100年-3分钟);

 

电力系统:美国夏威夷电力公司曾经做了一项实际的实验,输入00年,结果电厂自动停止操作,在某些情况下也发生电压与频率方面的变化,造成用户全面停电、电器故障甚至烧毁;美国联邦核管处更是担心全美的百余座核电厂里的仪器由于2000年问题失控造成核辐射外泄等灾难。

 

税务系统:税务局的电脑可能会认为你拖欠了100年的税款,从而寄来天文数字般的补税通知。

 

医药业:医疗仪器如救生系统或监视系统可能死机导致患者生命危急以及血库管理、医嘱系统与病历、器材管理全部无法正常运作。

 

交通系统:由于控制雷达的电脑失灵,空中管制完全瘫痪,班机停飞。

 

  最近,2000年问题更成了美国各大汽车公司的头疼问题,原来,美国汽车都有确定的使用年限(比如10年),超过该时间期限后汽车便会自动拒绝发动。麻烦出在一些刚刚生产出来的自动化程度较高的汽车,其内部控制芯片仍用两位10进制数表示年份,那么到了2000年后,由于年份变成了00年,和出厂日期(比如1998年)一比较,竟然已运行了98年,汽车当然便会自动拒绝发动了。美国花旗银行(CITYBANK)在对其属下的汽车进行2000年问题测试时,便发现了这个问题。

 

  怎么样,即使你还没有买电脑,也不会觉得千年虫与你一点关系没有吧。不过,随着各行各业解决千年问题的迅速进展,上述问题也几乎不可能在我们的生活中发生了。

 

计算机千年虫(2000年问题)的定义:

 

  计算机2000年问题,又叫做“2000年病毒”、“千年虫”、“电脑千禧年问题”或“千年病毒”。

 

  2000年问题,就是指在某些使用了计算机程序的智能系统(包括计算机系统、自动控制芯片等)中,由于其中的年份只使用两位十进制数来表示,因此当系统进行(或涉及到)跨世纪的日期处理运算(如多个日期之间的计算或比较等)时,就会出现错误的结果,进而引发各种各样的系统功能紊乱甚至崩溃。

 

另外,更广泛的讲,2000年问题还包括其他两个方面的问题:

 

  一个是在一些计算机系统中 ,对于闰年的计算和识别出现问题,不能把2000年识别为闰年,即在该计算机系统的日历中没有2000年2月29日这一天,而是直接由2000年2月28日过渡到了2000年3月1日;

 

  另外一个是在一些比较老的计算机系统中,使用了数字串99(或99/99等)在程序中来表示文件结束、永久性过期、删除等一些特殊意义的自动操作,这样当1999年9月9日(或1999年4月9日即1999年的第99天)来临时,计算机系统在处理到内容中有日期的文件时,就会遇到99或99/99等数字串,从而将文件误认为已经过期或者将文件删除等错误操作,引发系统混乱甚至崩溃等故障。这个问题有的时候也被称为“9999虫”。

 

  2000年问题(英文为 Year 2000 Problem)在国际上有各种各样的叫法,比较通俗的一种就是“千年虫”,英文为Millennium Bug,其中 Millennium是“一千年”的意思。而Bug在汉语中是“臭虫”,它是美国常用俗语,在计算机界表示那些程序开发中没有注意到的漏洞和毛病。2000年问题就是当初设计程序时没有注意到的一个毛病,它在2000年来临时才发作,所以我们把他叫做“千年虫”(Millennium Bug)。另外,国外经常把一千(KILO-)简写为K,所以2000年问题(Year 2000 )国际上也简称为Y2K,其中Y是英语单词Year的简写,2K是2000的简写。

 

  同时,从上面的第三个问题中,我们已经看出,假如只用两位数来表示年份的话,当我们在进行不同世纪里的两个年份之间的计算时,我们会得出多么错误的结果。而对于这个结果,我们目前仅仅感觉到的是它的错误可笑,但当这样的错误一旦发生到关键部门的话,其带来的后果又是不可想象的。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客