2038問題

2038年一月19號,星期二,凌晨3點14分7秒鐘的時候,如果Linux程序員會做惡夢的話,那麼夢的內容一定是關於這個日期的,在這一秒鐘滑過後,凡是安裝着linux的計算機都會死機或者陷入死循環,這會給很多的數據庫帶來極大的麻煩。這個可不是那些反對linux的人胡編亂造得東東,而是linux自身的千年蟲問題。

如果你想知道什麼是2038問題的話,你需要知道一些技術上的東西。這個bug是由用來寫linux的c語言引起的,c中用time_t來代表時間和日期,time_t是整數(int)型的,它用來記載從1970年1月1日到目前所經歷的秒數。

這個數據是以32位存儲的,第一位是符號位,其餘的31位用來存數字,而這31位數字可以存儲的最大數字爲2147483647

從1970年開始計算,這31位的數字可以表示的秒數最多可以用到2038年,當時間到達這個數字的時候系統將會出現問題,到時候數字不會自動增加,而是會變爲-2147483647,而這串數字代表的時間是1901年12月13號,這會導致很多的程序出現問題,甚至崩潰。

這個可比千年蟲問題更具有破壞力,因爲千年蟲問題只會導致應用層的程序出現問題,比如信用卡支付系統,或者管理系統。而2038這個bug,將會影響系統最底層的時間控制的功能.

Raju Mathur,GNU 和 Linux的顧問兼Linux Delhi Users Group的斑竹,說:“我認爲到時候首當其衝的將會是嵌入式領域,因爲這個領域內的軟件更新不是很頻繁。流程控制系統,手機,遊戲平臺,電話的交換機等等這類的設備將會是最大的受害者。”

但是他後來補充道,以現在技術革新的速度,到時候估計不會有人還會使用32位的系統。

但是目前呢?很多運行在Linux上的程序可以計算到30年後的日期,對於抵押以及保險行業來說,可能在D-Day之前就會有問題出現。

Charles Assissi,Chip雜誌的編輯說:“這個問題目前還不會讓很多人驚慌,除了那些脾氣不好的人”。

問題應該怎麼分類解決呢?較新的Linux程序可以64位的或者更長的數據來表示時間,從而解決這個問題。對於現有的系統,可能c現在記錄時間的方式將會被修改,然後所有的程序重新編譯。作遠遠的要比說難得多。

Mathur 說:“如果沒有上10億行的代碼在使用這個值的話,至少也有上百萬行,找到它們,修改他們,升級嵌入式的系統,然後再重新部署,我認爲是一項不可能的任務。”這會不會是另一個對於印度的開發團隊來說很好的機會呢?

發佈了16 篇原創文章 · 獲贊 3 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章