漫畫:什麼是 “千年蟲” 問題?

福爾摩斯見了我哭發表於2020-11-24

在20世紀末,人類社會曾經遭遇過一場空前的大危機,如果這場危機真的降臨,甚至有可能終結整個人類文明。

後來,在全世界精英們共同努力之下,這場危機終於得以化解。

這場危機既不是地震,也不是海嘯,更不是瘟疫大流行,而是電子計算機帶來的“千年蟲”問題。

千年蟲問題,到底是怎麼來的呢?

說到這個問題,就不得不提起一位偉大的程式媛小姐姐,Grace Murray Hopper。

說起這位小姐姐,那可真是厲害了,她是美國海軍准將,也是一位電腦科學家。

Grace Murray Hopper都取得過哪些成就呢?

她發明了最早的現代編譯器:A-0系統。

她創造了最早的商用程式語言:COBOL。

她在出故障的計算機裡發現了一隻飛蛾,使得Bug與Debug成為了計算機領域的流行詞彙。

在上世紀60年代,計算機的儲存資源非常稀缺,程式設計師在編寫每一行程式碼的時候,都要為儲存的使用而精打細算。

為了更好的節約記憶體空間,Grace Murray Hopper採用了6位數字的組合來儲存時間資訊。比如1965年7月23日,對應儲存形式就是65/07/23,省去了前面的“19”。

這樣的儲存形式,很快就在計算機領域流傳開來。儘管它節約了一定的儲存成本,卻埋下了兩個隱患:

1. 由於年份只保留了後兩位,當2000年到來的時候,年份儲存的資訊是“00”,計算機無法區分這到底是1900年,還是2000年。

2. 1900年不是閏年,但2000年是閏年,如果年份的前兩位被預設為“19”,那麼2000年的2月29日就會被當做3月1日,儲存為00/03/01。

這兩大隱患,都是到了2000年才會爆發出來,所以這個問題被稱為“千年蟲”問題,英文縮寫為Y2K。

1.抓住重點

既然全量的程式改不過來,那就重點修改那些起到核心作用的程式,比如醫療、航空、金融、軍事領域的程式,這樣工作量就減少了許多。

2.修改時間視窗

對於大多數不那麼核心的程式,程式設計師們想出了一個取巧的方式,這種方式叫做windowing,翻譯過來就是時間視窗。

這種方法暫時保留了6位時間表達,但是表達的時間範圍不再是預設的1900年-1999年,而是1920年-2019年。

比如,程式當中的“10”年,以前預設代表著1910年,現在代表著2010年。

這個做法大大降低了修改成本,但是沒有根本解決問題,而是把問題的爆發推遲了20年。

非洲甘比亞,一些政府機構的軟體系統臨時癱瘓了。甘比亞政府特意宣佈當天(週一)為非工作日,以暫時減輕出事機關所要承受的壓力。

中國廣州,某商務公司的7臺電腦接二連三出現故障,當他們向軟體供應商公司求助時發現,那裡已經接到100多家公司資料庫癱瘓的訊息。

相關文章