计算机 2000 年问题
[注:作为一名曾经亲身参与解决计算机 2000 年问题的计算机从业者,当 2000 年已经过去 一年之后,现在回想起来,2000 年问题虽然不像当初宣传得那么玄乎,但也决不是事后有些媒体传闻的那样,“是一场商业骗局”。因为 2000 年问题确实是存在的,直到现在,有些软件安装后还仍然须要再安装 Y2K 补丁,站长也曾经处理过一些政府机关的 Novell 网不能正确显示时间的问题。所以 2000 年问题仍然是计算机人员必须正视的计算机经典问题之一。]
(一)、什么是计算机 2000 年问题?
(二)、2000 年问题的危害
(三)、你的计算机有没有“千年虫”?
(四)、解决计算机 2000 年问题的办法
(五)、关于 2000 年问题的问答
(一)、什么是计算机 2000 年问题?
计算机 2000
年问题的起源可一直追溯到二十世纪中叶计算机的诞生。处于 20 世纪中叶的计算机工程师们没能超脱历史的局限,短视地认为 2000 年距离他们尚且遥不可及,于是在计算机的设计时“偷工减料”,将公元纪年以两位数字表示,
如“1946”用“46”而不是用“1946”来表示, 这就为 50 年后对时间敏感的程序埋下了巨大的隐患。因为在计算机看来,“1900”年和将要到来的“2000”年是同一年份,而将“2000”年误判断为“1900”年。这样以来,怪事就出现了:
● 九旬老人变成了 10 岁儿童:如果某人出生于 1910 年,那么2000 年时他正好 90 岁。但计算机的算法不是 2000-1910=90,而是
1900-1910=-10,再变为整数后为 10,这样一个 90 岁的老头就被计算机误判为 10 岁的孩童了。
● 你欠银行一笔巨款:如果你于 1998 年向银行存入一笔数额不小的存款,2000 年到来后,你实际存款时间为 2000-1998=2 年,此时若结息,利息为正值,表示银行欠你的款数。但计算机的算法为1900-1998=-98 年,再算出利息,为负值,表示你欠银行的款数,且以 98(九十八)年计算,数额之巨,可想而知!
计算机 2000 年问题的危害在前几年已被广大业界人士所认识,有人广义地把它称为“2000年病毒”,戏称“千年虫”,业界简称“Y2K”问题,(Y2K 即 Year 2000,2k=2x1024≈2000)。随着 2000年的逼近,人们预防和解决 2000 年问题的脚步正在加快,从硬件和软件同时入手,力争在 2000 年到来之前解决这一世纪课题,把损失减到最低程度。
(二)、2000年问题的危害
2000 年问题是人类自种的苦果,如果不妥善解决这一历史问题,那么,在 2000 年到来的第一个早晨,人们会发现许多意想不到的问题,许多依赖于计算机的行业就会发生混乱,人们奇怪的发现,他们没有进入 21 世纪,而是又站到了 20 世纪的门槛!
更让人吃惊的是,2000 年问题不仅仅只存在于计算机这一高科技产品上,其它许许多多的依赖于时间的电子产品中,如办公设备传真机、复印机,通讯设备手机,都可能存在 2000 年问题,因为这些电子产品的计时芯片与计算机的计时芯片一脉相承!
而且,2000 年问题不仅仅存在于世纪交替的那一刻,在 21 世纪开始的四、五年间,2000 年问题就可能在闰年和闰月中出现。
21 世纪的宏伟钟声即将敲响,20 世纪末的地球人类却在手忙脚乱地处理粗枝大叶的前人们遗留的棘手问题。解决 Y2K 问题将消耗人类数以亿计的巨额费用,这恐怕是世纪中叶那些智力超群自以为是的工程师们所始料未及的。
(三)、你的计算机有没有“千年虫”?
用户最关心的当然是自己手中正在使用的微机是否藏有“千年虫”了。其实用户可以对自己的计算机进行简单的手工测试:
(1)、开机进入 BIOS 设置日期时间项,检查日期项中是否用 4位数字表示“年”?如果不是,则该电脑存在 2000 年问题。
(2)、将日期设置为 1999 年 12 月 31 日,时间设置为:23:59:55,观察 BIOS 的时钟在走到 59 秒后能否顺利变到 2000 年 1 月 1日 0:0:01。如果不能进到 2000 年,则该电脑存在 2000 年问题。
(3)、将日期设置为 2000 年 2 月 28 日,时间设置为:23:59:55,观察 BIOS 的时钟在走到 59 秒后能否顺利变到 2000 年 2 月29 日 0:0:01。如果不能变到该日期,则该电脑存在 2000 年问题。
(4)、检查 02/29/2000-03/01/2000、02/28/2001-03/01/2001、02/28/2004-02/29/2004、02/29/2004-03/01/2004等日期的过渡情况,若不能正常过渡,则该电脑存在 2000 年问题。
软件测试法:
针对 PC 硬件 2000 年问题的测试,工业界由著名的美国国家软件测试实验室 NSTL 推出YMARK2000 测试工具 2000.EXE,该软件使用于 DOS3.2 以上环境。测试方法如下:
从 DOS 下启动机器。运行 2000.EXE 程序。阅读显示的运行结果。NSTL 的 Y2K 测试程序 YMARK2000 测试过程如下:
(1)、测试被测系统 RTC 芯片与 Motorola MC146818(标准 RTC芯片)的兼容性。该测试确认时间和日期符合 MC146818 标准,并且日期符合 BCD 格式。一些非 DOS 操作系统,如 UNIX,不是通过 BIOS而是通过驱动程序来直接访问实时钟。如果该芯片不兼容 MC146818标准,那么象 UNIX 之类的操作系统或程序进行直接读实时钟时就会出现错误。
(2)、检验从 1999 年 12 月 31 日到 2000 年 1 月 1 日的时钟运行情况。如果不能够自动跳转,那么需要进行手工设置日期的测试。
(3)、检验对转换到 2000 年后闰年的支持。该程序测试完成,如果YMark2000 提示需要进行手工重启测试,就重启进行手工测试,手工测试通过,可过渡到 2000 年。
(四)、解决计算机 2000 年问题的办法
计算机业界的众多厂家,如 IBM、Compaq、HP、MicroSoft、Sun、Legend 等,推出了不同的 2000 年问题解决方案,如 重写 BIOS 芯片,增加软件补丁,升级操作系统等。
一些硬件厂商早在几年前就推出了四位计年的计算机芯片,以支持 2000 年。我国联想公司推出的微机全部通过 2000 年测试。许多厂家在他们的互联网网站上放有“千年虫”问题的资料和 Y2K 问题的解决方案,并给用户免费提供更改主板上不同版本 BIOS 固化程序的数据和软件。
除过解决计算机硬件 2000 年问题外,一些计算机软件厂商,如美国微软(Microsoft,简称 MS),已推出了高版本的操作系统,以在软件上支持 2000 年,如 MSDOS6.xx,Windows9x 均通过了 2000 年测试。
一些著名的应用软件生产厂家,也号称已经或正在提升软件版本,让用户安全、放心的过渡到 2000 年。
一些世界著名的计算机专业测试公司,如美国国家软件测试实验室、美国迈阿密的 RighTime 公司,已经向全世界计算机用户推出了相应的千年虫问题诊断测试软件,以帮助众多的计算机用户检测他们的计算机设备是否具备顺利滚过 2000 年的能力,以免他们的计算机遭受“千年虫”的袭击。
用户若要了解更多的有关 2000 年问题的知识,可访问有关专业网站,如 www.nstl.com、www.rightime.com 等。
(五)、关于 2000 年问题的问答
●问:为什么需要硬件实时钟支持自动跳过 2000 年?
答:对多数应用程序它是不重要的。但是对于必须正确记录日期和时间的应用程序来说它是非常重要的。人所共知,对多数应用程序和某些操作系统用到的系统时钟( DOS 时钟)是不准确的。对于准确的时间,硬件时钟远远好过系统时钟。如网络操作系统、语音信息系统、自动确定时间系统等通常一天 24 小时都需要使用硬件时钟。有一种假象认为 DOS 设置的系统时钟就是实时钟。这种设置对
MSDOS 和 PCDOS 的后期版本是正确的。但对于早期的版本这是不对的。既然操作系统必须从硬件初始化日期和时间,所以有必要检测硬件时钟。为了避免不确定性,NSTL 的测试完全避开了操作系统,仅在 DOS 层测试时钟。有的操作系统,如 UNIX,日期的获得不是通过 BIOS 而是从 RTC 硬件直接获得,NSTL 的 Y2K 能保证 RTC 的年份是标准定位。NSTL 的 Y2K 测试不检测
DOS的时间和日期功能,测试界面仅为BIOS 中断 0x1A 的 2,3,4,5 功能。方法很简单,RTC 的日期和时间通过 BIOS 设置,并可允许跳到下一天,由程序显示的日期和时间是 BIOS 报的标准真实时间。下面方法可证明你的观察,这是手工检测,但也是硬件的检测。在 DOS 命令下,输入“2000 READ”,显示硬件的当前日期和时间,手工通过 DOS 设置日期和时间到下一个世纪,再输入“2000 READ”看新的日期和时间,使用 F3 键,再输入“2000READ”命令,观察时间和日期跳过午夜,我相信你会发现日期回到了1/1/1900。一旦回到 DOS,输入“2000 READ”,你会发现日期为 1/1/2000。这就是 NTSL 的手工 Y2K 检测不充分的原因。
●问:我的计算机不支持 2000 年怎么办?
答:和系统生产商联系 BIOS 升级,当然,必须保证升级的 BIOS是支持下一世纪的,如果升级不合适的话,最好的办法是换成支持 21世纪的操作系统。如果您自己动手来设置计算机系统日期,那么您的计算机将可以在下个世纪继续使用。请做一个测试:用日期“1/1/2000”给您计算机的系统时间进行重新设置,然后再重新启动您的计算机,请观察重启以后 DOS 返回的时间是否是“1/1/2000”。如果是,那么到了下个世纪,您只需人工地为您的计算机设置一次系统时间就足够了。在您的计算机里安装一些能解决这个问题(2000 问题)的程序似乎是一个办法,但应该注意到,这种办法只有当您每一次开机以后都把这个程序执行一遍才有可能实现。但不幸的是,对一些粗心的用户来说,他们常常会误以为他的系统里不再存在“2000问题”了,从而把那些程序给卸载了,因此这些程序并不能绝对安全地运行。面向下一个世纪,这种办法显然是不理想的。您也可以在每一次开机以后改正系统时间,或者您可以通过网络来恢复您的计算机的系统时间。
●问:Windows9x 可以通过其它操作系统所不能通过的 2000 年问题测试吗?
答:不一定。仅就 Windows95/98 自身而言,它是可以通过这个测试的。但是Windows95/98 是基于 DOS 的,而 DOS 却不能通过。因此,这个问题将很可能影响到那些只有在 DOS 环境下才能正确运行的程序。
●问:Windows NT 可以通过 2000 年问题的测试吗?
答:如果仅限于 NT 操作系统,NT 也是可以通过这个测试的。但对于其它基于 NT 的操作系统来说,这个问题也许仍是存在的。
●问:软件补丁程序是否能完全解决“2000年”问题呢?
答:要解决这个问题,您必须保证这些程序能够在您一开机就能被装入和执行,而且必须是您的系统上所有对时间敏感的应用程序之前执行。但不幸的是,驱动程序和 TSR 程序总是在操作系统装入以后就被装入,而且能很容易地绕过这些补丁程序。另外,对那些延用到下个世纪的计算机来说,这些补丁软件仍旧必须在计算机一开机后就被装入并运行,对于那些粗心的用户来说,他们也许并不知道这些补丁软件是干什么的,可能就会很轻易地就把这个补丁软件从 Config.sys
以及 Autoexec.bat 文件中删除了。