到2038年1月19日這天,很多當代微處理器和電腦會停止運作!

時間靜止的一天

到了二○三八年一月十九日星期二的凌晨三點十四分,會有很多當代的微處理器和電腦停止運作,而這全都是因為它們儲存當下日期時間的方式。對電腦來說,光是要去記錄自己開機後的運作秒數,就已經會遇上很多問題;如果還要完全跟上真實日期,那情況會更棘手。所有那些要讓日曆和行星運動保持同步會遭遇的古老問題,電腦的計時方式全部都有,而且現在還有二進位編碼的現代限制要考量。

圖/Pixabay
圖/Pixabay
分享

當現代網際網路的首個前身在一九七○年代初期上線時,就需要一個一致的計時標準。電機電子工程師學會組織了一個委員會來解決這個問題,在一九七一年,他們建議所有的電腦系統都應該由一九七一年的第○秒開始,每六十分之一秒計數一次。供應以驅動電腦的電力頻率本來就是六十赫茲,所以這個決定簡化了在系統內利用這個頻率進行的工作。這是個非常聰明的辦法,只不過一個六十赫茲的系統會在比二年三個月稍長一些的時間過後,就用光一個三十二位元的二進位數字裡的全部空間。好吧,看來也不是真的那麼聰明。

所以他們重新校正了系統,改成從一九七○年的第○秒開始每過一秒計數一次,得到的數字被儲存成一個三十二位元的有號二進位數字,最多可以數算2,147,483,647 秒,這是一段從一九七○年算起總長度超過六十八年的時間。在一九七○年以前的六十八年時光裡,制定這個方法的委員會成員世代見證了人類一路的發展,從萊特兄弟發明第一架動力飛機,到有人在月球上跳舞。他們很肯定等到二○三八年,電腦大概已經改頭換面,不再使用Unix 作業系統的時間了。

圖/Pixabay
圖/Pixabay
分享

但看看現在的我們。時間距離終點已經剩下不到一半,可是我們還是在同樣的系統上。這下真的是在倒數計時了。

電腦確實已經改頭換面,但是在這不同的樣貌底下,Unix 時間仍然健在。如果你使用的是任何風味的Linux 裝置或Mac 電腦,Unix 時間位在作業系統架構的下半部,就在圖形使用者介面底下。若你手邊有一台Mac,不妨打開「Terminal」應用程式(那是通往電腦實際運作方式的入口),鍵入date +%s,然後按下Enter 鍵。在螢幕上直視著你的那個數字,就是從一九七○年一月一日至今已經過去的秒數。

如果你是在二○三三年五月十八日之前讀到這些文字,那還有時間見證數字到達二十億大關的那一刻,到時的派對該會有多麼盛大。哀傷的是,在我的時區,那個時間點會是在凌晨大約四點半。我記得在二○○九年二月十三日的晚上,我和幾個夥伴出門小酌,慶祝即將要流逝的第1,234,567,890 秒,時間點就在晚上十一點三十一分剛過的時候。我的程式設計師朋友喬恩寫了一個程式,讓我們可以朝向那一刻倒數,而酒吧裡的其他人都很困惑,不知道我們為什麼提早半小時慶祝情人節。

先別管慶祝的事了,我們通往毀滅的倒數已經剩下遠遠不及一半的距離。在第2,147,483,647 秒過後,一切都會停止。微軟的Windows有自己的計時系統,但是蘋果的MacOS 是直接建立在Unix 上的。更重要的是,從網際網路伺服器到你家的洗衣機等等各類的機器裡頭,有許多重要的電腦處理器運作的都是源自Unix 的作業系統。這些機器全都無力抵抗這個所謂的「二○三八千禧蟲」。

我不怪罪一開始設定Unix 時間的人,他們已經善用了當時手上可得的資源。一九七○年代的工程師猜想,在遙遠的未來,應該有人可以解決他們造成的問題吧(真是典型的嬰兒潮世代)。但說句公道話,六十八年是一段很長的時間。本書的第一版在二○一九年出版,我有時候會思考該怎麼做,才能讓本書在未來讀起來也不顯老舊。

也許我會使用「在寫作本書時」之類的句子,避免直接提到寫作的年代,或者小心架構用字,讓書裡的內容可以顧慮到未來事物的改變和進步,這樣本書就不會落到完全過時的地步。你可能是在二○三三年的二十億秒里程碑之後才讀到這段話,沒關係的,這我還可以接受。但是我完全不覺得有人會在二○八七年才讀到這本書,畢竟那可是六十八年以後了!

圖/Pixabay
圖/Pixabay
分享

已經有些尋求解決之道的措施在進行中了。所有這些預設使用三十二位元二進位數字的處理器,我們就稱作「三十二位元系統」。在你要購買新的筆記型電腦時,你可能不會想到要去檢查預設的二進位編碼模式,但近十年內的Mac 都是六十四位元,而大多數的常用電腦伺服器也都會轉移到六十四位元。

不過惱人的是,有些六十四位元系統還是會把時間記錄成三十二位元的有號數字,因為這樣它們就可以和那些比較老舊的電腦朋友一起玩。但是大體來說,如果你購入的是六十四位元系統,它會有能力在相當漫長的日子裡做好記錄時間的工作。

一個六十四位元的有號數字所能儲存的最大值是9,223,372,036,854,775,807,這麼多秒數相當於二千九百二十三億年。這樣的時間長度簡直可以把宇宙年齡拿來當做有效的測量單位,因為從此刻算起,六十四位元的Unix 時間將存續到目前宇宙年齡的二十一倍以後。假設我們在這段時間內沒有設法進行另一次升級,那麼到了西元二九二二七七○二六五九六年十二月四日,所有電腦都將停擺。對了,那一天會是星期日。

看更多 貓頭鷹出版 麥特‧帕克 Matt Parker《數學大觀念3:數學算什麼?從錯誤中學習的實用數學》

圖、文/貓頭鷹出版  麥特‧帕克 Matt Parker《數學大觀念3:數學算什麼?從錯誤中學習的實用數學》
圖、文/貓頭鷹出版 麥特‧帕克 Matt Parker《數學大觀念3:數學算什麼?從錯誤中學習的實用數學》
分享

延伸閱讀
回應