2010年3月5日星期五

攪錯閏年全球大當機

前天下午看到"千年蟲式故障 PS3全球大當機"的新聞標題,即時被它吸引視線,因以N年前參與過Y2K project,當年全球IT界都關心跟他們有關的電子用品/儀器其system clock能否順利過渡2000年,所以印象尤深。

1999年12月31日23:59:59那一刻,不知多少人盯著電視看新聞,看看有否千年蟲造成的恴外,幾秒過後,幾分鐘過後,幾小時過後,風平浪靜,無飛機出事,無人困lift,銀行戶口存款無多無少,衛星無失靈,安全渡過!

有誰會猜到出現system clock的問題是近幾年的產品呢!明報報導,新力指故障原因是由於舊型PS3主機內部的系統時鐘,誤將2010年判斷為閏年。

由於報導寫是關係system clock,所以DeepC初時推論是chip的Low-level programming language program 或 DLL 出事,這應該不會是遊戲的High-level programming languages program 問題,因為寫Games的程式人員不需寫Program去計系統時間,只而用command就可讀得或設定(get/set)時間。

看過大力的"索尼公司宣報,不要玩你的PS3",提及閏年計算,也許新力包攬產品所有製作,否則不用處理閏年計算。

不過剛剛看到自由電子報 - PS3全球大當機 主因是閏年設定錯誤的報導:

全球大當機的主因=>「因為誤把2010年當成閏年,增設2月29日,這項時間設定上的bug就是造成」

問題解決方法=>「重新調整時間設定,刪除2月29日,並且改回3月1日之後,問題已獲得解決」


看完後 WOW 了聲!
System date是由程式配上石英的震頻計算出來,怎能特別刪減或增設一天?!
如果以上的解釋真是出自Sony,那他們就有所隱瞞!
如果刪減一天可以即時舛解決問題,也許是系統有一個作Pointer或Identifier功能的Table儲多了一個29/2/2010的數值吧! (當pointer或identifier value 不是有效的日期,就會出現Exception,如果沒有設exception處理,那9x9會當機了~)

沒有留言:

發佈留言