千年蟲

電腦通訊 9547 517 2014-11-24

千年蟲是在計算機中對於年份和日期的表示方式不完整而引起的程序出錯,它包含三個方面的內容:

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的簡寫。

同時,從上面的第三個問題中,我們已經看出,假如只用兩位數來表示年份的話,當我們在進行不同世紀裡的兩個年份之間的計算時,我們會得出多麼錯誤的結果。而對於這個結果,我們目前僅僅感覺到的是它的錯誤可笑,但當這樣的錯誤一旦發生到關鍵部門的話,其帶來的後果又是不可想像的。



,