哈維穆德學院計算機科學助理教授喬什·霍達斯(Josh Hodas)給出了以下概述
圖片:美國商務部 警告標誌。美國商務部網站上的標誌表明,人們正優先解決潛在的 Y2K 問題。 |
“Y2K 問題”包括一系列可能持續數年,並且由於某些計算機軟體和硬體表示日期的方式而產生的問題——因此得名“Y2K”,即“2000 年”(K 是“千”的縮寫)。簡而言之,由於許多計算機系統在日期中僅儲存年份的最後兩位數字,因此您無法真正判斷該日期屬於哪個世紀。
支援科學新聞報道
如果您喜歡這篇文章,請考慮透過以下方式支援我們屢獲殊榮的新聞報道 訂閱。透過購買訂閱,您將幫助確保關於塑造我們當今世界的發現和想法的具有影響力的故事的未來。
直到最近,這種歧義在大多數情況下並不重要。計算機處理與最近事件相關的日期,因此它們能夠將所有日期視為屬於本世紀。然而,隨著我們越來越接近新的千年,許多系統將需要處理來自兩個不同世紀的日期,並且它們必須能夠區分它們,才能避免無數的故障。
想想您可能正在攜帶的新信用卡——其中許多信用卡已經有下個世紀的到期日期。當您嘗試購買東西時,信用卡終端必須確定該卡是否已過期。為此,它會執行一個程式,檢查到期日期是否大於當前日期。如果卡在 2003 年到期,那麼答案顯然應該是肯定的。但是,如果系統僅使用兩位數字來表示年份,則會發現 03 不大於 99,並且您的卡已過期。這種問題——一些主要的信用卡已經面臨過——可能會困擾任何依賴日期比較的系統。
在上述情況下,至少有一個人在發生問題時可以介入:持卡人或髮卡機構。更令人不安的是,可能是 Y2K 問題的“沉默殺手”版本,它可能發生在計算機、烤麵包機、汽車、發電廠和許多其他裝置中使用的數百萬個嵌入式處理器中。
接下來,考慮一個需要每年執行一次內部安全測試的系統。系統會定期檢查當前日期與上次測試日期之間的差值是否大於 365 天。但是,當本世紀的上次測試日期減去下個世紀的日期時,答案是一個小於 365 的負數,因此係統不會認為現在是執行測試的時候。事實上,如果保持原樣,該系統在 100 年內不會再進行另一次安全檢查。
為什麼這些系統會做出如此糟糕的假設?在大多數情況下,設計人員從未想過他們編寫的程式會使用這麼長時間——也就是到 21 世紀。當時,在日期中使用較短的兩位數年份確實有實際優勢。
有很多不同的方法來解決這個問題。理想情況下,我們可以重寫所有有問題的程式並修改所有現有的儲存資料。但是在很多情況下,該程式太舊了,原始的“原始碼”(程式設計師在將其轉換為計算機可理解的數字形式之前編寫的形式)丟失了,並且修改數字形式是不切實際或不可能的。
當原始碼存在時,可能不再有與該程式碼語言版本相容的“編譯器”(將原始碼轉換為其數字形式的程式)。即使可以成功修改程式,更改所有儲存的資料也是不切實際的。許多不依賴於日期的程式也需要更改,因為當新增額外日期數字的空間時,檔案中資料的放置位置會發生變化。
在最後一種情況下,即可以更改程式碼但無法更改儲存的資料的情況下,有時可以爭取一些時間。最流行的技術稱為“視窗化”:它利用了許多系統僅儲存關於相對較短時間段(稱為視窗)的資訊的事實。例如,在我的大學,成立於 1955 年,我們可以安全地假設,00 到 55 範圍內的任何儲存的畢業日期都指的是下個世紀。因此,在未來的 55 年內,不會出現關於畢業日期的歧義,並且透過少量程式設計,我們可以將更大的問題推遲到那時。當然,對於記錄學生的出生日期,我們必須使用不同的視窗。對於教職員工的出生日期,還有不同的視窗,依此類推。
另一種流行的技術是更有效地重用為兩位日期分配的空間。由於使用了相同的空間,其他資料不會移動,並且其他不訪問日期欄位的程式不需要重寫。事實證明,這是可能的,因為在許多較舊的資料庫中,數字使用相當低效的表示形式儲存,稱為擴充套件二進位制編碼十進位制交換碼(EBCDIC,發音為“ehb-sih-dik”)。
儘管有很多提出的解決方案,但真正的問題是很難想象如何在必要的時間範圍內修復所有需要修復的系統。此外,對於數百萬個嵌入式處理器來說,尚不清楚如何傳播修復程式。
那麼,您應該賣掉房子,搬到帶有 10,000 加侖燃料箱和裝滿食物的掩體的木屋嗎?儘管這一切聽起來很糟糕,但許多人認為,那些厄運的預測實際上只是千年熱的變體。雖然肯定會出現一些挫折,但大多數專家認為最糟糕的問題將被避免。許多主要行業和政府機構已經進行了測試:他們將計算機上的時鐘提前到下個世紀的各個日期,以檢視會發生什麼。在大多數重要的情況下——包括銀行,什麼也沒發生。