Bear's House
資訊科技

電腦與Y2K

 
 

首  頁

資訊科技

教育學習

有感而發

相關鏈結

批評指教

 

中研院計算中心 曾士熊  《計算中心通訊》第15卷第1期,1999年1月

  話說上帝俯瞰人間,發現人們貪婪、欺騙、淫亂,已是無可救藥,於是決定在公元1999年的最後一秒鐘毀滅地球。祂召來了柯林頓、葉爾辛和比爾蓋茲,告知這項決定。柯林頓回到白宮,立即召集內閣閣員和國會領袖們,宣布:「我有一個好消息和一個壞消息,好消息是真的有上帝,壞消息是上帝要毀滅世界。」葉爾辛回到克里姆林宮,同樣召集內閣閣員,宣布:「我有一個壞消息和一個更壞的消息,壞消息是真的有上帝,更壞的消息是上帝要消滅人類。」比爾蓋茲回到微軟總部,緊急召來全球經銷商,宣布:「我有一個好消息和一個更好的消息,好消息是,我是世界上最重要的三個人之一,更好的消息是Y2K問題已經解決了。」

  上面的故事當然純屬虛構,編故事者拿來諷刺微軟程式的Y2K問題,嚴重到必須毀滅世界才能解決。“Y2K”是「公元2000年電腦時序錯亂危機」的略稱【電腦人慣以K代替1000】。假設1999年1月4日那天,你到銀行存入一年期的定存,一年後要領回本息時,銀行的電腦卻顯示定存未到期,並且拒絕支付利息。別懷疑,你遇上Y2K了!早期的電腦程式為了節省記憶空間,日期裡的年份從俗只用兩位數,例如:1999年1月4日在資料檔裡就記為99-01-04。一年之後的同一天,電腦裡的日期將變成00-01-04。對人來講,這不是問題,不至於把00-01-04當成1900年1月4日【當時電腦還沒發明哪】。可是電腦程式只會拿年份的00來減99,得出你的存款期間為-99年,-99小於1,所以你的定存未到期,而且“本金×利率×存款期間”得出負數的利息,恐怕你想解約還得賠銀行利息哪!這只是個比較不嚴重的Y2K例子,由於人力可以介入,雖然產生一些困擾,還不至於發生金融危機。而且如果銀行事先修改電腦程式,就不會發生Y2K問題了。

  解決Y2K問題之道,無非修改或更換程式。如果擁有具備完整註解的程式原始碼(用C或COBOL等高階語言寫成者),很容易就能找出並修改所有處理日期的程式片段。修改方式有二:其一,將年份欄位由兩位數延長為四位數,除修改程式本身之外,資料也必須配合修改。其二,年份維持兩位數(即不變動資料本身),但加入一小段程式,將年份相減為負數者加上100。就上面的例子而言,-99加上100得出結果為1,可顯示一年期定存確實到期,且可正確計算利息。比較麻煩的是,許多程式的原始碼早就不見了,只剩下正在使用中的執行碼。由於執行碼的內容為二進數形式的指令,人無法直接閱讀,必須設法轉換成文字形式的組合語言程式,才有可能閱讀和修改。程式的執行碼可借由“還原組合語言程式”(Disassembler)轉換為組合語言程式,再設法從可能多達數十甚至數百萬行、完全沒有註解的組合語言指令當中,搜尋出可能用來處理日期的程式片段,然後修改這些程式片段。從無註解的組合語言程式中搜尋特定作用的程式片段,只能憑經驗猜測,是個極耗費人力的高難度工作,因此費用相當昂貴,而且疏漏在所難免。若有現成的還原組合語言程式可用,把執行碼轉換為組合語言程式並非難事。如果沒有現成的還原組合語言程式,就必須另外寫一個,當然要額外付費。怕的已經找不到原有電腦的組合語言手冊,連想寫個還原組合語言程式都做不到,就只有更換電腦、重新編寫程式一途了。總之,除非能找到原始程式碼,否則解決Y2K問題將極為困難而且昂貴。

  電腦軟體系統的Y2K問題,只是冰山一角。無所不在的嵌入式系統,其Y2K問題可能更為嚴重和更難以解決。嵌入式系統,簡單的說,就是“CPU inside”。晶片製造商每年大約賣出35億個CPU晶片,其中只有不到5%真正被用到大型主機、工作站、PC等電腦上。其餘絕大多數的晶片,都是使用在我們生活周遭的各種設備裡。工廠的自動化生產設備、交通工具、醫療設備和檢驗、監控等類儀器固然大量使用CPU晶片,即使日常生活用品(包括行動電話、鐘錶、計算器、電視、中高級音響、錄放影機、微波爐和號稱智慧型的冰箱、冷氣、洗衣機等)也都使用了CPU晶片。就以汽車為例,一般平價汽車大約使用12個左右的CPU晶片來控制引擎、煞車和其他系統,名貴汽車則可能多達有60個以上。總而言之,這些內含嵌入式系統的設備或用品,其內部都有一或多個特殊化的電腦:執行特定程式,從輸入介面接受命令,或是經由檢知器偵測周遭環境(例如溫度、速度等),經過處理或計算之後,再藉由輸出介面顯示結果或控制設備的動作。為什麼CPU晶片會大量的使用在各種設備裡?最重要的理由是增加功能、提高精確度和降低成本。

  和電腦系統的情況相同,當這些設備或用品的功能或作用與日期有關時,就可能會有Y2K問題。例如,控制生產流程的自動化設備、可預設起迄時間的實驗或醫療設備、鐘錶的日曆功能、錄放影機的預設錄影功能等,如果也是採用兩位數年份的話,將難逃Y2K的肆虐。由於絕大部分嵌入式系統的程式都是事先燒錄在CPU電路板的ROM晶片裡,無從修改,只能更換修改過程式的電路板或ROM晶片。至於有無“除過蟲”(debugged)的零件可更換,就得詢問製造廠商了。

  電腦系統和嵌入式系統的Y2K問題可能相當普遍,一部份系統可能涉及生命安全(例如醫療儀器、交通工具、核電監控系統等),或是與財物有關(例如銀行存款、稅務、保險、自動化生產等系統)。這些系統的Y2K問題當然不容忽視,必須及早補救。至於其它系統的Y2K問題,通常只會造成一些困擾,而且大多可以人工補救。例如,鐘錶的日曆只要在公元2000年時重新設定,錄放影機的預錄設定避免設定的時間跨過2000年1月1日0時0分即可,這些都不是難事。

  對本院同仁而言,電腦系統可能發生Y2K問題的項目,包括電腦裡的日曆、檔案備份、資料的統計分析等。電腦裡的日曆可以找廠商協助更新為四位數年份,或是等到2000年1月時再重新設定。檔案備份部分,如果00年的檔案無法自動取代99年或之前年份的檔案,不妨以人工方式強制取代。至於統計分析用的資料,其年份欄位只有兩位數的話(民國年份者,將在99年進入100年時發生相同問題),恐怕非得修改程式甚至資料不可。對本院同仁比較麻煩的將是嵌入式系統的Y2K問題,可能的項目包括:電梯、門禁、實驗儀器等。這些都必須向製造廠商詢問,確認是否存在Y2K問題,以及如何解決。針對Y2K問題,計算中心收集了相關資訊,進一步的資訊,請參考本院首頁的「Y2K相關問題」。

  總之,Y2K問題給人們的教訓,正是古人所說的:「人無遠慮,必有近憂。」思慮不週或是貪圖一時方便,可能帶來重大損失!