千年虫
贡献者:xqh0813 浏览:3151次 创建时间:2009-08-19
-
1 介绍
2 程序
3 影响
4 解决
5 方案
6 新的考验
7 相关词条
8 参考资料
千年虫-介绍
比尔曾为千年虫问题愁眉不展
计算机2000年问题,又叫做"2000年病毒"、"千年虫"、"电脑千禧年问题"或"千年病毒".缩写为"Y2K".是指在某些使用了计算机程序的智能系统(包括计算机系统、自动控制芯片等)中,由于其中的年份只使用两位十进制数来表示,因此当系统进行(或涉及到)跨世纪的日期处理运算时(如多个日期之间的计算或比较等),就会出现错误的结果,进而引发各种各样的系统功能紊乱甚至崩溃。另外,更广泛地讲,是指由于计算机程序设计的一些问题,使得计算机在处理2000年1月1日以后的日期和时间时候,可能会出现不正确的操作,从而可能导致一些敏感的工业部门(比如电力,能源)和银行,政府等部门在2000年1月1日零点工作停顿甚至是发生灾难性的结果。“千年虫”还包括以下两个方面的问题:一个是在一些计算机系统中,对于闰年的计算和识别出现问题,不能把2000年识别为闰年,即在该计算机系统的日历中没有2000年2月29日这一天,而是直接由2000年2月28日过渡到了2000年3月1日;另一个是在一些比较老的计算机系统中,在程序中使用了数字串99(或99/99等)来表示文件结束、永久性过期、删除等一些特殊意义的自动操作,这样当1999年9月9日(或1999年4月9日即1999年的第99天)来临时,计算机系统在处理到内容中有日期的文件时,就会遇到99或99/99等数字串,从而将文件误认为已经过期或者将文件删除等错误操作,引发系统混乱甚至崩溃等故障。
Y2K问题,或者Y2k问题是两千年问题的一个通常叫法。其中Y表示"year"也就是年,而K则表示拉丁前缀"kilo",表示1000。Y2K或者Y2k就是指2000年。
一般来讲两千年问题的发生是由于计算机程序中使用两个数字来表示年份。这样导致2000年被表示为"00",而在它之前的1999年表示为"99",这是不连续的。这样将会导致某些程序在计算时得到不正确的结果。在嵌入式系统中可能存在同样的问题,这有可能导致设备停止运转或者发生更加灾难性的后果。但是不管怎么样,由于世界上各地的政府和企业都对两千年问题给予了足够的关注,1999年1月1日到2000年3月1日并没有出现大范围的计算机故障。
千年虫-程序
《财经》曾以千年虫为封面做了一期杂志
“千年虫”问题始于20世纪60年代,当时计算机内存和外部存储介质的成本很高,大多数数据处理需要借助于用穿孔卡片,它用80行文本表示所储存的数据。那个时候的编程语言,如COBOL和RPG,使用ASCII码和EBCDIC编码表示数据。如果用四位数字表示年份,就要多占用储存器空间,就会使成本增加,因此为了节省存储空间,计算机系统的编程人员采用两位数字表示年份,随着计算机技术的迅猛发展,虽然后来存储器的价格降低了,但在计算机系统中使用两位数字来表示年份的做法却由于思维上的惯性势力而被沿袭下来。对大多数程序员来讲,他们并不认为所编写的软件会持续使用很多年。年复一年,直到新世纪即将来临之际,大家才突然意识到用两位数字表示年份将无法正确辨识公元2000年及其以后的年份。1997年,信息界开始拉起了“千年虫”警钟,并很快引起了全球关注。
具体来讲,两千年问题要解决的事项包括以下几个要点:
软件在特定的日期会否出现运作错误。要留意的日期包括以下几个日子:
1999年1月1日
1999年4月9日 (1999年的第99日)
1999年9月9日
1999年12月31日
2000年1月1日
2000年2月28日
2004年2月29日
软件会不会利用特定的日期格式来表示档案完结,或档案已删除。
软件会否出现错误的日期,如“19100年”或“3000年”。
两千年问题是由Bob Bemer在1958年第一次提出的。在其后的二十年里,他用了很大的努力,希望政府、企业和国际组织(如IBM和ISO)来关注这个问题,但反响寥寥。直到2000年将要到来的时候,人们才感觉到两千年问题的紧迫性。于是社会和政府都投入了大量的人力和物力来避免发生大规模的计算机灾难。而从现在来看,这些努力也取得了相应的成果。
千年虫-影响
千年虫
“千年虫”影响是巨大的。从计算机系统包括PC机的BIOS、微码到操作系统、数据库软件、商用软件和应用系统等,到与计算机和自动控制有关的电话程控交换机、银行自动取款机、保安系统、工厂自动化系统等,乃至使用了嵌入式芯片技术的大量的电子电器、机械设备和控制系统,等等,都有可能受到“千年虫”的攻击。目前世界各国已纷纷由政府出面,全力围歼“千年虫”。
正当有公众质疑「千年虫」问题是否被夸大之际,西非国家冈比亚却成为全球首个受千年虫严重影响的国家,除不少地方电力供应中断外,预计未来数月,海空交通、金融和政府服务亦大受影响,其中财政部、税局和海关更因而无法运作。总部设在华盛顿的国际千年虫合作中心表示,冈比亚出现千年虫祸,其实是意料中事,皆因国际社会太迟帮助冈比亚除虫。
冈比亚爆发虫祸的部门,主要集中在一些政府机构。由于爆发大规模虫祸,冈比亚政府已宣布今天(周一)为非工作日,以暂时减轻出事机关所要承受的压力。埃及,索马里亦列高危
国际千年虫中心指出,联合国当局太迟拨出资金,令冈比亚未能及时修补海关和税局的系统。专家表示,若国际不加快援助冈比亚,问题可能持续至一月底或数月后。该中心承认,冈比亚的电力中断未必一定与千年虫有关,然而其他系统所出现的毛病,不少确实是因千年虫而起。幸其他国家顺利过渡
英国科技顾问公司「国际监察」早前曾发表报告,将埃及、索马里和孟加拉列为千年虫最高危国家,而冈比亚、土耳其和部分东南亚国家,则属于次一级。报告指这些国家均没有为对付千年虫作好准备。
幸而,千禧元旦来临时,除了冈比亚外,其他国家均顺利过渡,没有发生太大问题。现在,电脑专家最关注的是,周一各地的金融市场和商业机构重开时,会否出现千年虫祸。芝加哥开市最受关注
美国芝加哥的期货交易所将在当地时间周日下午五时半开市(香港时间上午七时半),是全球第一个在二千年进行电子买卖的重要国际市场,备受各界关注。当局表示,他们周六曾彻底测试电子买卖系统,发现一切正常。主要股市已完成测试
此外,全球其他重要的股票、证券市场和银行系统,早前均曾接受过渡千禧的测试,结果令人乐观。澳洲、新西兰、马尼拉、曼谷和很多其他地方,均表示它们的股票市场已完成测试。亚洲多国官员亦指出,贸易市场、通讯系统和其他重要基建设施均能顺利过渡。美国及不少国家均曾高度戒备,防范虫祸。现在多国已把戒备降级。
千年虫-解决
股市从业员关注“千年虫”问题
解决两千年问题不是一朝一夕的事情。有些程序可能会免在2000年出现闰日而强行修改计算日期的过程。这些程序如果继续在将来的闰年使用的话,有可能会导致日期错乱。所以,我们还不要对两千年问题掉以轻心。
另一方面,对于其它使用其它历法的地区,如台湾的民国纪年或泰国的佛历,类似问题也有可能在稍后年份出现。例如:民国100年就在2011年。如果所用的软件没有解决两位年份的问题,那其实只是将两千年问题从2000年推迟11年后再发生。
对于目前在世界上广泛用作服务器软件的Unix系统来讲,由于传统的Unix系统使用32位的整型数表示日期(这个32位数字表示从1970年1月1日起至所存储日期过去了多少秒),因此在2038年日期将会被卷回,类似于两千年问题。时间将可能重新从1970年1月1日开始计算,这将可能引起世界范围的计算机故障。这被称为2038年问题。
此外仍然有一个更加有趣的问题:是否存在10000年问题。当然,在10000年时候世界、人类文明、甚至网际网络有可能不再存在。纵然这些都是可能性的问题,但无论如何,这条仍是个充满意思的问题。
所以,两千年问题的关键在于计算机日期存储的格式:时间可能是无限,但你只能够用有限的储存空间表示时间。涉及到日期的运算又是非常常见的一种运算。如果要彻底的解决这一类问题,就必须在设计硬件或者软件时候充分估计到你所设计的对象可能服务的时间。并且找到最合适的日期表示方法,从而避免在将来可能出现的问题。
千年虫-方案
千年虫
“千年虫”不是电脑病毒,它不会主动传染,也不会对您的电脑系统进行主动攻击和破坏。同样的,千年虫也不是虫子,不会主动在您的系统里活动和游走。请注意,千年虫只是程序中固定存在的一种结构缺陷而已,这种缺陷是固定的,只有在进行日期处理时才发生错误,进而会引发混乱。如果没有日期处理,就根本谈不上错误。本人在此要申明的一点是,如果您经过严格的测试,能够确信在使用某系统的过程中所涉及的所有命令、函数和工具都不会受到千年虫的影响,那么即使这个系统还有您用不到的命令、函数或工具存在千年虫,也没有关系。因为在这种情况下,用不到那些有千年虫的工具或函数,千年虫也就根本没有发作的机会。当然,如果一个向其他程序输出计算结果和服务的基础程序因为千年虫发作而出错,会肯定造成使用其错误结果的其他程序也发生错误。但这种情况下,其他程序的错误并不是因为其本身的千年虫,而是因为使用了基础程序提供的错误数据结果。
2000年问题和CIH等病毒完全不一样,在技术上,前者充其量不过是设计上的疏漏,而后者却是以侵略计算机和破坏软硬件为设计目的。从形态上讲,前者不是一个物质实体,只是一种情况和可能;而后者在计算机看来,却是一种外来物质。
2000年问题并不神秘,也不具备主动的攻击性,所以一般用户特别是家庭用户不必为此特别担心。现在的系统已经完全可以抵御千年虫了。
千年虫-新的考验
继上个世纪上个世纪末给IT业界带来不少麻烦的Y2K bug,我们很快又将面临另一个和时间有关的bug-Y2038问题。
专家警告说,Y2038 bug将于2038年1月19日(星期二)03:14:07am(GMT)正式爆发,届时人们对千年虫问题的预言可能将一一实现,比如手机网络工作不正常,卫星脱离轨道,型号较老的电脑软件软硬件无法正常工作等。
什么是Y2038 bug
Time_t是C/C++ 等编程语言在内部代表/存储日期和时间的一种数据类型。Time_t实际上是一个代表秒数的整数,当它的值为0时,代表的时间是1970年1月1日12:00:00;当Time_t=60时,则表示1970年1月1日12:01:00,依此类推。
所有32位电脑系统都用带符号32位整型来存储time_t的值,也就是说t_time只能用31位二进制数来表示(第一位用来表示正负号),而其最大值转换为十进制是2147483647,换算成日期和时间刚好是2038年1月19日03:14:07am(GMT),而这一秒过后,t_time的值将变成-2147483647,代表的是1901年12月13日8:45:52pm,这样32位软硬件系统的日期时间显示就都乱套了。另外,无法接受time_t为负值的其他功能也将返回错误。
举个实际的例子来说,登陆上Yahoo messenger,给好友发个消息,恩没问题,现在把系统时间更改为2038年1月19日03:14:07am,此时如果再发消息Yahoo messenger就将崩溃。
现在就要想好对策
为何担忧?
也许有人觉得2038年还早着,无需担心这个问题。不幸的是,上世纪60年代的程序开发人员也抱有类似的错误想法,并由此导致了Y2K问题,给全球IT页带来数十亿美元的损失。
要知道时间对于许多电脑程序来说都非常重要, 操作系统、数据库程序、电子表格软件、实时控制系统等无不涉及到时间。因此我们必须在Y2038 bug爆发前做好充足的准备。
尽管到2038年,桌面PC和服务器基本上都将升级到64位甚至128位,但仍会有许多使用中的32位甚至更古老的系统。即使是在32位系统盛行的今天,大多数嵌入式系统仍是8位或16位的,而小型嵌入式系统的数量其实比台式机更多。
应该如何应对?
Y2038问题和Y2K一样难缠,其中一种解决办法就是用位数更多的数据类型来存储日期和时间。如果使用64位数据类型,time_t最大可以表示公元292000000000年,是宇宙估计年龄的20倍,最起码看到这篇文章的各位都不会再遇到什么YXXXX问题了。
目前对于Y2038 bug的影响有多大还存在争论,但有一点可以肯定的是:有备无患。相信我们能像克服Y2K问题那样圆满解决Y2038问题。
开放分类
参考资料
贡献者
本词条在以下词条中被提及:
关于本词条的评论共:(0条)