精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>已关闭版区>>● 千年虫>>有问有答>>转载软件报:RTC时钟是PC硬件Y2K的根源及

主题:转载软件报:RTC时钟是PC硬件Y2K的根源及
发信人: tytc()
整理人: (1999-10-25 09:23:53), 站内信件
http://y2k.363.net 
RTC时钟是PC硬件Y2K的根源及隐患 

软件报99年7月17日《办公自动化》版:追根溯源千年虫 
    众所周知电脑硬件向2000年过渡有三个时钟:RTC、BIOS及OS时钟。 

     
    RTC时钟是PC机主板上一块靠电池供电的时钟电路,它为整个计算机提供 
一个计时标准。由于该时钟是最原始最底层的时钟数据,因此解决了该 
平台的2000年问题,就彻底地解决了PC机硬件平台时钟2000年问题。遗憾 
的是现在许多计算机主板(包括目前流行的PII电脑,还有许多声称能解决 
Y2K问题的BIOS升级卡也只是简单地解决了BIOS时钟,而未对RTC时钟作任 
何处理,实际上也存在Y2K隐患)在设计时对该时钟生成电路均未作任何修 
改,主板CMOS仍沿用MC146818RTC时钟芯片,该芯片仅提供两位年份数据, 
故目前大部分PC机都存在RTC时钟问题(可用查虫程序进行测试),这也是 
PC硬件千年虫根源所在; 

    BIOS时钟是指通过BIOS功能调用INT 1AH来取得的系统时钟数据,一般 
软件为兼容性的要求,都是通过该调用来取得时钟数据的,BIOS控制的时钟 
并不是真正意义上的时钟,它更应该被称为一个计数器,计数器每秒钟跳 
18.2下,并且每24小时清零(重置成零)一次。可以这么说,BIOS时钟里 
面并不存储日期信息,在PC机刚开始启动操作系统向BIOS读取日期和时间信 
息时,其实是通过调用BIOS里的中断功能来获取RTC芯片里的日期和时间信 
息。(注:有些应用程序也直接从I/O 端口地址读取RTC中的日期和时间信息);
 


     
    操作系统OS时钟是操作系统在开机时通过取得系统硬件时钟(RTC、BIOS) 


数据,然后往下计数而形成的,该时钟仅在开机时才有效,每次关机再重开 
时它都要去从硬件时钟处获得一个初始时钟值。 操作系统(包括DOS、Windows 


 3.1、Windows95、Windows NT等)的系统时钟一般也叫虚拟时钟,最重要的 
一点是,操作系统仅在刚开始启动时通过BIOS调用向RTC获取当前的日期和时 
间信息,此后只要系统不关闭,系统时钟便和RTC时钟完全脱离关系,系统时 
钟的时间信息(小时/分/秒/)主要靠BIOS里面控制的计数器来维持,它一般 
通过把计数器里存储的计数值除以18.2换算成秒再换算成“小时/分/秒”格 
式的时间信息,然后每过24小时增加一日,以此类推。 

    同时解决了这三个时钟的2000年过渡问题的PC机,即是完整的适应2000 
年时间系统的PC,为应用系统合乎2000年要求的硬件基础环境。 

  信息产业部“计算机2000年问题专家小组”成员、清华大学计算机系程 
渝荣老师介绍说,现在大部分计算机厂商的解决方案都是只解决了BIOS和操 
作系统这一层次,即BIOS和操作系统能正确用四位表示年份,但RTC仍然是两 
位年表示法。这种方法一般是通过在BIOS或操作系统中加个驻留程序,当它 
们从RTC调用当前日期和时间时,通过某种算法强行将两位年转换成四位年。 
这样,BIOS和操作系统的时钟就能正确处理世纪信息,从而达到“解决”计 
算机2000年问题的目的。那电脑厂商为什么不直接对RTC进行改正呢?程老 
师认为有两个原因,一是支持四位年份的RTC芯片直到近两年才问世,计算 
机生产厂商没有办法采用;二是要把计算机中的两位年芯片换四位年芯片很 
不容易,需要进行大范围的改动,厂商不想也很难这么做。 

  事实上,对由于采用两位年的RTC芯片而存在2000年问题的PC,现在各 
大PC厂商,如IBM、HP、Compaq、Dell等,解决2000年问题的方案都是基于 
BIOS的。即在BIOS加入某个驻留程序,当系统开机时通过该程序强迫将世纪 
信息修正过来。厂商们也很清楚,这对于在跨越2000年时系统处于运行状态 
的计算机系统来说,仍然可能导致2000年问题。那为什么厂商们不直接从 
RTC入手,在根本上将PC机的2000年问题解决呢?Dell说原因有二:(1) 
换RTC芯片是困难的也是不经济的,同时,加入一个新的RTC芯片也会使计算 
机的性能受到很大影响;(2)这是不必要的,因为极大多数的应用程序不 
会直接从RTC读取时间。Dell的说法代表了大多厂商的态度。(注:本段素 
材来自各公司网站的相关内容。) 

     
    这样的“解决”会带来什么问题呢?程老师说,这有可能使应用程序 
得到错误的时间,从而导致应用系统出现问题。因为应用程序获取系统时 
间存在两种情况,有的程序从操作系统或BIOS调用系统时间,有的直接从 
RTC调用系统时间。对后者,由于RTC还是用两位表示年份,因此得到的必 
然是错误信息,由此而可能影响系统的正确运行。至于何种程序会直接从 
RTC读取时间,并无定论,且有很大的随机性。它往往跟程序员的喜好和 
实际需要相关。具体的后果表现在以下四个方面: 

    1.网络底层协议中时间数据的传输,若采用电平应答信号取得RTC时 
钟,会造成日志混乱、终端死机、服务器Down不下来而造成数据备份困难 
或丢失数据。  
    2. 如果你的应用程序为了追求实时响应的快捷性,而直接读取RTC时 
钟信息,在2000年后就会读到一个错误的年份“1900”,从而造成时间关 
键字排序和比较的错误,进而毁坏数据库。  

    3.造成操作系统文件管理混乱(如存储、排序时可能造成数据丢失)。  
    4.即使是单机运行,当你访问Internet网时,也可能遇到不测的麻烦。  
    实际应用中的事例:InfoWorld测试中心的工程师在测试PC机上运行 
的Windows NT 4.0的2000年符合性时发现,当时间跨越2000年时,操作 
系统Windows NT 4.0显示年份不正确,是“0000”而非“2000”。但他 
们同时测试到该机的BIOS能正确显示年份“2000”,Windows NT 4.0也 
是用四位表示年份。这就使他们感到奇怪,为什么BIOS能正确显示而操作 
系统却得不到正确结果呢?原因便是RTC在作怪。原来,Windows NT 4.0 
是直接从计算机的RTC读取时间,而非从BIOS调用。由于所测试的PC机采 
用的是基于BIOS的Y2K解决方案,因此,其RTC年份还是用两位表示。这样, 
当RTC时间不正确时,Windows NT 4.0就无法得到正确的时间值。虽然微 
软已发布NT4.0的补丁,使Windows NT 4.0可以逃脱RTC的困扰,但对于其 
它直接从RTC读取时间的应用程序来说,这仍然是个“隐患”。 

     
    对于广大用户而言,都希望自己的计算机系统能够万无一失。这该怎 
么办呢?不要急,有办法。目前国人已自主开发成功直接从RTC层解决电脑 
硬件千年虫隐患世纪卡,电脑硬件Y2K问题就是其RTC、BIOS时钟问题,世纪 
卡从RTC层解决所有PC硬件的Y2K问题,做到升级无风险,其价值所在是让所 
有的PC机彻底摆脱千年虫的阴影!详细资料可参阅http://y2k.363.net、 
INFOCD第6期光盘、电脑报KB2000光盘及中国计算机报6月7日报道。虽然也 
有软件解决RTC的方法,但它对硬盘的依耐性太大,一旦遇到病毒侵袭,又 
会使Y2K问题重现,也就是说利用软件来解决RTC时钟问题会将Y2K问题长期 
化、复杂化。 

     
    最后,还有个问题,即如何测试自己的PC机是否有RTC时钟问题呢?这 
儿介绍几个测试工具:一是美国NSTL(国家软件测试实验室)的YMARK2000, 
它可以在http://www.nstl.com/html/nstl-ymark2000.html处下载;二是信 
息产业部软件评测中心认证的RTC2000,它可以在网站http://y2k.363.net 
处下载(中国计算机报6月14日E15版介绍)。实际上,笔者利用上述软件对 
P III电脑硬件进行测试,结果表明其RTC同样存在Y2K问题。而人们通常认 
为:奔腾586/133以上的机型不存在Y2K问题,这是一个莫大的误解!估计至 
今仍有人还"蒙在鼓里",笔者在此提醒有关人士注意及时防范,以免造成不 
应有的损失。话又说回来,并不是所有电脑硬件都存在RTC时钟问题,象郁 
金香、大众、长城嘉裕等品种电脑均已直接从RTC层解决了这个问题。 
     
    有人问我,工业标准中的BIOS并不提供星期数据,为什么测试软件中还 
要测试星期这一项呢?这是因为在PC机的硬件时钟系统中,时钟数据都是存 
放于CMOS电路中,在CMOS电路中的06H位是用于存放星期数据的。虽然BIOS 
功能调用不提供星期的函数,但我们照样可以通过读写CMOS取得系统中保留 
的星期的数据。并且这种测试也是必要的,因为在有些机型中,系统做了一 
次BIOS日期的读写,CMOS中的星期位就会被清零,如果没有一套机制来重新 
校正CMOS的星期的话,就会给用到这一数据的软件带来不可预见的后果。有 
一个例子就是使用CTOS操作系统是,系统时间会莫名其妙地跳到1952年。 

     
    综上所述,我们建议凡是在网络中的机器,即使是新机,也要彻底解决 
到RTC这一层次,目前联想集团等国内一些知名电脑厂商已着手解决服务器自 
身存在的RTC时钟问题。对于应用软件,如果您能肯定您所使用的应用软件 
不会发生从RTC中调用日期、时间的情况,则硬件Y2K解决到BIOS层的未尝不 
可;如您对此无把握,或您的机器是用于重要的场合,还是选用解决到RTC 
层的产品为好。还有一点要提醒您,世纪卡卡只能解决PC机硬件的"千年虫" 
问题,软件的"千年虫"问题还得另行解决,千万不要以为解决了硬件千年虫 
就可以"万事大吉"了!  


--
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.102.120.191]

[关闭][返回]