如果世界上所有軟體消失,要怎麼做,才能讓一台電腦正常運行起來?

腦洞大開,在想計算機原理時想到這個問題,如果以前,還可以人工打孔紙帶寫程序,從0開始,現在怎麼辦?消失的是所有的軟體,包括引導,操作系統,開發軟體,應用軟體,燒錄器上的軟體,相當於所有存儲設備包括書籍、竹簡、泥版、雕版、青銅器被清零,只有人的大腦未受影響。


現在BIOS裡面都是程序呀(EEPROM),而且關鍵在於BIOS裡面還有各種掌管硬體電源的控制程序,所以結果呢就是現在的電腦根本就上不了電,全部都開不了機了。寫引導什麼的基本不可能了。

以下是個人設想的最快重建方法:

1 &> 到2手販子里找到尚存的用MaskROM做BIOS的電腦。這些電腦沒有丟BIOS固件的風險,這就解決了開機的問題了(順利通電自檢)。可是性能遠遠不夠,還不能上網,但關鍵是沒有硬碟能用(現在硬碟主控一般都是ARM核的,肯定丟固件電機都轉不起來)。

2 &>@bombless 的方法比較實際,先讓微電子攻城獅連夜用土方法搞出些勉強能用的MaskROM。上面主要是解析鍵盤輸入的程序,只讀。方便碼代碼,再搞些簡單的早期的語言編譯器,不必從C語言搞起。不過最後一定要有C的編譯器(嵌入式設備的固件要靠它)。

此外,接上軟碟機把寫好的程序保存到軟盤上(為什麼不用硬碟?那個時代軟碟機主控都是ASIC,沒有丟固件的問題,邏輯都是由物理存在的電路決定的。反而現在硬碟主控一般都是ARM核的,肯定丟固件電機都轉不起來,而且因為各種複雜的硬體策略,一時半會寫不出能用的固件)。方便傳播程序,因為包括核心路由和各種程式控制交換機在內的整個互聯網都宕機了。

3 &> 程序猿們可以開始開心地敲代碼以後,RMS把GCC搞出來了,然後呢就把簡單些的操作系統源碼拿來(請linus背出linux源碼?),操作系統這一關基本就有頭緒了。

同時面對眾多的嵌入式設備嵌入式攻城獅不得不加班加點寫固件,然後交給程序猿們人肉彙編,在軟體攻城獅搞定交叉編譯器之前不得不這樣做。電子攻城獅們把燒錄器的數字電路邏輯整理出來,同樣做出MaskROM和燒錄電路,人手打板去一個一個地搞出CMOS神馬的吧,這樣就可以寫固件了。同時因為很多行業設備的MCU都是一次寫入的(熔絲),估計也不會丟程序,這樣攻城獅們只要考慮那些被擦掉FLASH的就好了。

這一步是最關鍵的,同時也應該是耗時最長的。汽車飛機能開動都依靠這一步,搞好後電廠能發電了,交通都基本回復正常了,製造業才能上軌。

在軟體攻城獅這一邊,各種IDE都出來了。嵌入式攻城獅有了工具,開始折騰著給空的硬碟主控寫程序,用不了的硬碟也能轉起來了,程序猿終於可以擺脫軟盤1.44M的魔咒了!更有甚者還給SSD主控寫好了固件,磨刀不誤砍柴工!

4 &> 再過了幾年,各種網路設備的固件都寫好了,最近一代的主板的BIOS也寫好了,神馬小黑水果也能通電了,智能手機也成功燒進了bootloader,一些行業設備基本能用了,功能機固定電話能打了,電視也能看了。電腦的性能也有了,程序猿攻城獅們的幹勁更足了。

最後,電腦上常用的軟體足了,智能手機也能上網了。程序猿攻城獅們又能在知乎2上面扯小黑水果哪個更適合做開發了,扯開源閉源了。想想都開心呢↖(^ω^)↗

請忽略那些核電站失控核彈頭亂飛油氣管爆炸電網失控火車地鐵追尾銀行股市清零的悲劇吧,未來還是很光明滴。

手機凌晨碼字,比較亂,歡迎提修改意見。


連硬碟的驅動程序都沒了,那就沒戲了,電腦也沒用了,假設你不能逆向工程的話,全部都要重新做。


第一件事情大概就是寫一段程序,然後人肉把電路圖畫出來,然後手工焊接一個電路板,這個電路板可以燒一個小的CMOS。然後後面就好辦了。


為什麼一定是照現在的樣子重建套系統 而不是新建一套完全不同的系統?


那隻能讓長門有希來重構世界了┑( ̄Д  ̄)┍


給我個焊台,給你造個世界


最困難的部分還是布線軟體沒法用了…但是也還好,反正到九十年代都有晶元是純手工布線的。

既然硬體都還在,最直接的就是把存儲能力找回來咯…先實現一個電路板,它的作用就是模擬一個只讀的硬碟,它要實現一個小程序,解析鍵盤輸入的以逗號分割的數字順序寫入到接入的一塊硬碟中。

有了這個程序的幫助我們可以實現大型一點的程序了,例如basic解釋器(前例是蓋茨用8080彙編寫了basic解釋器,他用的是紙帶,跟我們這裡難度一樣),如果我們再加把勁可以做一個簡單的編輯器。有編輯器可用了我們可以用前面的小程序實現彙編器和鏈接器。

有了鏈接器和彙編器再加上編輯器我們直接可以做複雜一點的東西了,比如emacs和emacs中的elisp就是MIT幾個人用PDP-10彙編做的。

不知不覺我們已經有三樣語言可以用了,basic、彙編還有lisp。

(不同的人熟悉不同的硬體,所以這個階段世界上也許有人為不同的硬體實現了不同的彙編器)。

再接下來就是挽起袖子造軟體了。

先造庫,比如別的不說,先實現一個FAT32吧,要不然大家只能單打獨鬥不同軟體合作起來太困難。有些人可能還是習慣用C造基礎軟體,那麼有了文件系統,用lisp或者basic實現C編譯器。

有了C就方便造操作系統了,雖然反正有了如今的硬體直接用lisp的環境也可以很愉快。

接下來就沒什麼了,早期可以把tcp ip棧搞好了,於是有了smtp、ftp、http全世界程序員又可以愉快地合作了,當然還是要搞一搞版本控制系統。

當然了,不能光顧著恢復互聯網大家就爽了,畢竟沒了軟體全世界都停轉了。地鐵調度程序、紅綠燈控制程序、發電站監控程序、電網併網監控程序、水電站管理程序,等等等等都需要各領域工程人員通力合作的,畢竟,沒了現代交通和電力,互聯網不可能恢復嘛。

最後解釋一下一些槽點。

1.最開始的控制鍵盤並寫硬碟的硬體是怎麼實現的。這個用純手工實現的模擬電路來達到平時ide硬碟的效果。

這個電路我相信是可以手工畫出來印成PCB電路的。印製過程也只好用一些土辦法了。

2.為什麼最開始是basic和lisp而不是C。相信我一般人不會想用彙編實現C的。歷史上C也是由CPL、BCPL、B這樣的工具做的。有了語言工具再重寫彙編器和鏈接器讓它們直接訪問文件系統也挺好的。

3.幹嘛不最初就實現文件系統。反正我比較樂意把文件系統在早期實現成basic或者lisp庫。

手機在凌晨打字的,腦洞比較大,歡迎討論。


固件都消失了咋整呢?

答案是先用74弄個小計算機出來,然後再用74的計算機寫x86彙編,把固件恢復基本的功能,再靠它對BIOS晶元重新編程。接下來的事情就不用我說了吧~


推薦閱讀:

有哪些好用的開源軟體?
在軟體開發時,選用編程語言的標準是什麼?
BAT、華為網易等大公司軟體開發職位要求的計算機網路基礎和資料庫知識,相關書籍有哪些?
如何清晰定位目標,並高效的寫一個工具,既不會和github重複,有自己的特點,從而不是造輪子?
如何看待每天上班十二小時,公司領導依然覺得員工不夠努力認真?

TAG:軟體開發 | 編程 | 計算機 | 計算機原理 |