標籤: 暫無標籤

所謂千年蟲,泛指由於各種原因,計算機時鐘系統不能在1999年以後正確計時,從而導致軟體或硬體系統不能正常工作甚至發生崩潰。這裡主要是一個兩位計年(比如:99年)到四位計年(2000年)轉化的問題,由此引發在PC機、收款機、工控機等等計算機控制系統上不可預料的操作故障。

1 千年蟲 -介紹

千年蟲比爾曾為千年蟲問題愁眉不展
計算機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日並沒有出現大範圍的計算機故障。

2 千年蟲 -程序

千年蟲《財經》曾以千年蟲為封面做了一期雜誌
「千年蟲」問題始於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年將要到來的時候,人們才感覺到兩千年問題的緊迫性。於是社會和政府都投入了大量的人力和物力來避免發生大規模的計算機災難。而從現在來看,這些努力也取得了相應的成果。

3 千年蟲 -影響

千年蟲千年蟲

「千年蟲」影響是巨大的。從計算機系統包括PC機的BIOS、微碼到操作系統、資料庫軟體、商用軟體和應用系統等,到與計算機和自動控制有關的電話程式控制交換機、銀行自動取款機、保安系統、工廠自動化系統等,乃至使用了嵌入式晶元技術的大量的電子電器、機械設備和控制系統,等等,都有可能受到「千年蟲」的攻擊。目前世界各國已紛紛由政府出面,全力圍殲「千年蟲」。

正當有公眾質疑「千年蟲」問題是否被誇大之際,西非國家甘比亞卻成為全球首個受千年蟲嚴重影響的國家,除不少地方電力供應中斷外,預計未來數月,海空交通、金融和政府服務亦大受影響,其中財政部、稅局和海關更因而無法運作。總部設在華盛頓的國際千年蟲合作中心表示,甘比亞出現千年蟲禍,其實是意料中事,皆因國際社會太遲幫助甘比亞除蟲。

甘比亞爆發蟲禍的部門,主要集中在一些政府機構。由於爆發大規模蟲禍,甘比亞政府已宣布今天(周一)為非工作日,以暫時減輕出事機關所要承受的壓力。埃及,索馬利亞亦列高危
國際千年蟲中心指出,聯合國當局太遲撥出資金,令甘比亞未能及時修補海關和稅局的系統。專家表示,若國際不加快援助甘比亞,問題可能持續至一月底或數月後。該中心承認,甘比亞的電力中斷未必一定與千年蟲有關,然而其他系統所出現的毛病,不少確實是因千年蟲而起。

英國科技顧問公司「國際監察」早前曾發表報告,將埃及、索馬利亞和孟加拉列為千年蟲最高危國家,而甘比亞、土耳其和部分東南亞國家,則屬於次一級。報告指這些國家均沒有為對付千年蟲作好準備。

幸而,千禧元旦來臨時,除了甘比亞外,其他國家均順利過渡,沒有發生太大問題。現在,電腦專家最關注的是,周一各地的金融市場和商業機構重開時,會否出現千年蟲禍。芝加哥開市最受關注。

美國芝加哥的期貨交易所將在當地時間周日下午五時半開市(香港時間上午七時半),是全球第一個在二千年進行電子買賣的重要國際市場,備受各界關注。當局表示,他們周六曾徹底測試電子買賣系統,發現一切正常。主要股市已完成測試。

此外,全球其他重要的股票、證券市場和銀行系統,早前均曾接受過渡千禧的測試,結果令人樂觀。澳洲、紐西蘭、馬尼拉、曼谷和很多其他地方,均表示它們的股票市場已完成測試。亞洲多國官員亦指出,貿易市場、通訊系統和其他重要基建設施均能順利過渡。美國及不少國家均曾高度戒備,防範蟲禍。現在多國已把戒備降級。

4 千年蟲 -解決

 股市從業員關注『千年蟲』 問題股市從業員關注「千年蟲」問題
解決兩千年問題不是一朝一夕的事情。有些程序可能會免在2000年出現閏日而強行修改計算日期的過程。這些程序如果繼續在將來的閏年使用的話,有可能會導致日期錯亂。所以,我們還不要對兩千年問題掉以輕心。

另一方面,對於其它使用其它曆法的地區,如台灣的民國紀年或泰國的佛歷,類似問題也有可能在稍後年份出現。例如:民國100年就在2011年。如果所用的軟體沒有解決兩位年份的問題,那其實只是將兩千年問題從2000年推遲11年後再發生。

對於目前在世界上廣泛用作伺服器軟體的Unix系統來講,由於傳統的Unix系統使用32位的整型數表示日期(這個32位數字錶示從1970年1月1日起至所存儲日期過去了多少秒),因此在2038年日期將會被卷回,類似於兩千年問題。時間將可能重新從1970年1月1日開始計算,這將可能引起世界範圍的計算機故障。這被稱為2038年問題。

此外仍然有一個更加有趣的問題:是否存在10000年問題。當然,在10000年時候世界、人類文明、甚至網際網路有可能不再存在。縱然這些都是可能性的問題,但無論如何,這條仍是個充滿意思的問題。

所以,兩千年問題的關鍵在於計算機日期存儲的格式:時間可能是無限,但你只能夠用有限的儲存空間表示時間。涉及到日期的運算又是非常常見的一種運算。如果要徹底的解決這一類問題,就必須在設計硬體或者軟體時候充分估計到你所設計的對象可能服務的時間。並且找到最合適的日期表示方法,從而避免在將來可能出現的問題。

5 千年蟲 -方案

千年蟲千年蟲
「千年蟲」不是電腦病毒,它不會主動傳染,也不會對您的電腦系統進行主動攻擊和破壞。同樣的,千年蟲也不是蟲子,不會主動在您的系統里活動和遊走。請注意,千年蟲只是程序中固定存在的一種結構缺陷而已,這種缺陷是固定的,只有在進行日期處理時才發生錯誤,進而會引發混亂。如果沒有日期處理,就根本談不上錯誤。本人在此要申明的一點是,如果您經過嚴格的測試,能夠確信在使用某系統的過程中所涉及的所有命令、函數和工具都不會受到千年蟲的影響,那麼即使這個系統還有您用不到的命令、函數或工具存在千年蟲,也沒有關係。因為在這種情況下,用不到那些有千年蟲的工具或函數,千年蟲也就根本沒有發作的機會。當然,如果一個向其他程序輸出計算結果和服務的基礎程序因為千年蟲發作而出錯,會肯定造成使用其錯誤結果的其他程序也發生錯誤。但這種情況下,其他程序的錯誤並不是因為其本身的千年蟲,而是因為使用了基礎程序提供的錯誤數據結果。

2000年問題和CIH等病毒完全不一樣,在技術上,前者充其量不過是設計上的疏漏,而後者卻是以侵略計算機和破壞軟硬體為設計目的。從形態上講,前者不是一個物質實體,只是一種情況和可能;而後者在計算機看來,卻是一種外來物質。

2000年問題並不神秘,也不具備主動的攻擊性,所以一般用戶特別是家庭用戶不必為此特別擔心。現在的系統已經完全可以抵禦千年蟲了。

千年蟲 現在被用來泛指2000年以後出生的孩子,他們區別於80后 90后形成了獨特的群體。

計算機2000年問題,又叫做"2000年病毒"、"千年蟲"、"電腦千禧年問題"或"千年病毒".縮寫為"Y2K".是指在某些使用了計算機程序的智能系統(包括計算機系統、自動控制晶元等)中,由 於其中的年份只使用兩位十進位數來表示,因此當系統進行(或涉及到)跨世紀的日期處理運 算時(如多個日期之間的計算或比較等),就會出現錯誤的結果,進而引發各種各樣的系統功 能紊亂甚至崩潰。另外,更廣泛地講,「千年蟲」還包括以下兩個方面的問題:一個是在一 些計算機系統中,對於閏年的計算和識別出現問題,不能把2000年識別為閏年,即在該計算 機系統的日曆中沒有2000年2月29日這一天,而是直接由2000年2月28日過渡到了2000年3月1 日;另一個是在一些比較老的計算機系統中,在程序中使用了數字串99(或99/99等)來表示 文件結束、永久性過期、刪除等一些特殊意義的自動操作,這樣當1999年9月9日(或1999年4 月9日即1999年的第99天)來臨時,計算機系統在處理到內容中有日期的文件時,就會遇到99 或99/99等數字串,從而將文件誤認為已經過期或者將文件刪除等錯誤操作,引發系統混亂 甚至崩潰等故障。

「千年蟲」問題的根源始於60年代。當時計算機存儲器的成本很高,如果用四位數字錶示年 份,就要多佔用存儲器空間,就會使成本增加,因此為了節省存儲空間,計算機系統的編程 人員採用兩位數字錶示年份。隨著計算機技術的迅猛發展,雖然後來存儲器的價格降低了, 但在計算機系統中使用兩位數字來表示年份的做法卻由於思維上的慣性勢力而被沿襲下來, 年復一年,直到新世紀即將來臨之際,大家才突然意識到用兩位數字錶示年份將無法正確辨 識公元2000年及其以後的年份。1997年,信息界開始拉起了「千年蟲」警鐘,並很快引起了 全球關注。

6 千年蟲 -新的考驗

千年蟲

繼上個世紀上個世紀末給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問題。

上一篇[硫酸鹽]    下一篇 [脫色]

相關評論

同義詞:暫無同義詞