#21日圖形卡挑戰(zhàn)#
快要進入2000年的時候,電腦出了問題。就是著名的千年蟲事件。
“千年蟲”不是現(xiàn)實生活中我們看到的蟲子,而是計算機系統(tǒng)因時間障礙而產生的蟲子。
從1999年到2000年,計算機沒有意識到bug這次的變化,導致了系統(tǒng)崩潰。
至于為什么會出現(xiàn)“千年蟲”,這要從計算機的誕生開始。
時間回到1960年,當時計算機的存儲設備非常昂貴,很多大公司負擔不起。
5MB磁盤一年需要35000美元的租金,只能出租。
所以程序員寫代碼的時候,只能盡量簡化所有的字符。
被譽為軟件之母的格雷斯霍夫(美國計算機科學家)提出,通過6位數(shù)的表達時間,可以節(jié)省存儲設備空間。
例如:1960年8月11日,可以縮寫為600811。
霍夫女士發(fā)明的這種寫法確實節(jié)省了存儲空間,很快被人們接受和推廣。
但是這種寫法有先天缺陷。也就是說,年份前兩位數(shù)將基本縮寫。
當時縮寫的是19XX年中的19年,時間到了2000年,節(jié)目無法準確地表達時間。
例如:2000年1月1日,縮寫為6位數(shù)的是000101。
電腦會懷疑人生。如何回溯時間?
然后,計算機系統(tǒng)可能出現(xiàn)故障。
例如,程序是在1999年預設的,一年后自動刪除文件。
2000年,關于節(jié)目回到了1900年,此時沒有刪除或刪除文件嗎?
像這樣的問題導致的計算機故障就是“千年蟲”的問題。
當人們廣泛使用6位數(shù)字來表示日期時,當時一位計算機科學家敏銳地注意到,到2000年可能會出大事,他就是鮑勃貝爾默。
他在企業(yè)、大學、政府、機關之間奔波,呼吁人們防備“千年蟲”。
但是鮑勃貝爾默的聲音沒有引起人們的注意,相反,人們認為他是杞人憂天。
當時人們認為這個程序不能用2000年。
以后存儲設備成本會降低,所以如果存儲空間充足,就不會再用6位數(shù)了。(大衛(wèi)亞設)。
所以沒有人改變這個寫法。
這個問題一直拖到1990年,計算機行業(yè)才開始重視,在新推出的程序中采用8位數(shù)的寫法。
但是由于以前的延誤,麻煩很快就來了。
因為有很多電腦在運行舊程序,特別是需要考慮耐久性和穩(wěn)定性的行業(yè)。
例如,交通系統(tǒng)、醫(yī)藥業(yè)、稅務系統(tǒng)、電力系統(tǒng)、通信業(yè)、保險業(yè)、金融業(yè)等這些行業(yè)的計算機都在使用6位數(shù)表達時間的老程序。
這意味著,“千年蟲”一旦發(fā)作,就會對人們的生活產生非常不舒服的影響。
人們?yōu)榱吮苊狻扒晗x”發(fā)作,開始了計算機歷史上最大規(guī)模的bug修復工作。
程序員加班重寫程序的代碼。
但是程序員很快發(fā)現(xiàn),使用6位數(shù)表達時間的程序太多,如果都要重寫的話,在2000年到來之前無法完成的問題。
所以他們做出了機智的選擇,只重寫重要行業(yè)的計算機程序,其他計算機的舊程序采用方便快捷的Windowing恢復方法。(威廉莎士比亞(Windows))。
ca3734acd188d2?from=article.detail&_iz=31825&index=5" width="640" height="427"/>簡單來說,Windowing修復法就是通過更改時間窗口,只計算1920-2020之間的年份。
因為已經把1900年排除在外,00這兩個數(shù)字只能代表2000年,所以計算機在時間的表達上就不會存在歧義。
這個方法不需要把六位數(shù)時間代碼更改為八位數(shù),因此能大大加快bug修復進度。
在隨后的時間里,程序員們利用Windowing,修復了世界上80%的計算機,基本完成除蟲行動。
當2000年的鐘聲敲響后,除了一些個人計算機崩潰以外,總體上還是相安無事的。
但是,還有其他與“千年蟲”類似的程序bug,并未因此放過人類。
它們一直潛伏在計算機當中,尋找合適的機會發(fā)作。
上面提到修復“千年蟲”的方法,只是簡單把程序的時間計算區(qū)間調整為1920-2020年。
因為人們覺得到了2020年,大家應該都換新電腦了。
大家也許會說這個想法似曾相識,沒錯,這是人們又在自以為是地拖延問題。
因為到了2038年,有可能再次發(fā)生類似“千年蟲”的事件,這就是“2038年問題”。
大家在平時或許有聽說過,計算機的操作系統(tǒng)有32位和64位之分。
現(xiàn)在大多數(shù)計算機采用Unix時間戳的計時方法,簡單來說就是:以1970年1月1日0時0分0秒為起點,然后通過計算秒數(shù)來算出當前時間。
比如:2021年5月7日15:00:00,換算一下就是1620370800秒。
由于32位操作系統(tǒng)所能計算的秒數(shù)有限,到2038年1月19日3:14:07,就會達到極限。
當操作系統(tǒng)所計算的秒數(shù)超過上限后,會自動把日期跳回到1901年,然后各種程序因為時間錯亂而導致崩潰,跟之前的“千年蟲”發(fā)作時類似。
理論上到了2038年,人們應該淘汰掉了32位操作系統(tǒng),轉而使用沒有“2038年問題”的64位操作系統(tǒng)。
但是從前面的“千年蟲”事件來看,沒準還有變數(shù),說不定最終還得程序員想辦法去解決。
所以說,請大家對身邊的程序員好一點,因為他們不僅要跟發(fā)際線、甲方斗爭,還要為了拯救世界跟時間代碼戰(zhàn)斗。
好了,本期就到這里了,歡迎大家在評論區(qū)留下自己的看法。
我是月林科普,關注我,每天分享好玩有趣的科普知識。
1.《【2038年】程序員揭示什么是“千年蟲”事件,什么是“2038年問題”》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡信息知識,僅代表作者本人觀點,與本網(wǎng)站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《【2038年】程序員揭示什么是“千年蟲”事件,什么是“2038年問題”》僅供讀者參考,本網(wǎng)站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉載時請保留本站內容來源地址,http://f99ss.com/guoji/2971665.html