很多人在之前討論最早的計算機的文章中有這樣的回復:
![]()
那么咱們今天就來扒一扒最早的計算機到底是個啥,這東西有哪些是現在的計算機不能企及的,又有哪些部分是現代計算機早已經遠遠超越的。
![]()
首先要說的是——ENIAC作為世界上第一臺真正意義上的電子計算機,其工作原理和今天的計算機既有傳承,也有巨大差異。它并不是靠“存儲程序”來運行的,而是依賴上萬個真空管、繼電器和電纜,通過物理插接和開關配置來定義運算路徑。
![]()
早期,在ENIAC上編程主要是依靠線纜跳線來完成的,所以,在上面照片中并不是工作人員在維護ENIAC,而是在執行真正的編程操作。
通常的情況下,ENIAC的計算程序設計會被先繪制在一張編程板上:
![]()
在解決一個計算問題的時候需要在這個板子上畫好了線路跨接路徑,定義好接線的次序和接線參數然后由操作員對照著紙上的連接提示把連接線相互連起來。
![]()
一旦連接線連接好了之后,ENIAC就可以通電走完整體的邏輯關系。實際上在單步計算上沒有現代計算機指令集的調用、沒有用到地址表、不需要進行復雜的尋址操作。因此它的計算速度會遠遠超過現代計算機。
但這并不意味著它整體算力超越現代計算機。原因很簡單:ENIAC沒有現代意義上的指令集和內存尋址機制,它靠人工布線,每一次編程就是一次硬件重構,復雜邏輯和數據存取全都要靠外部輔助。所以要清楚一點——它的“快”只是單一算術電路并行觸發的結果,而不是系統性的性能優勢。
由于每個步驟需要拔插電纜,在ENIAC的計算過程中反而費時費力的并不是計算本身,而是重新配置編碼盤接線。因此這個東西的整體計算效率并不高。
為了解決這個問題,就出現了一個關鍵的人物——馮·諾伊曼。馮·諾伊曼之所以成為計算機史上的轉折人物,就在于他敏銳地看到了 ENIAC 的局限:人工布線的編程方式把機器禁錮成了“巨大但僵硬的計算器”,只能解決單一問題,缺乏通用性。他提出的核心思想就是——把程序像數據一樣存儲在內存中,讓計算機通過讀取指令來自動完成邏輯控制,這就是后來被稱為“馮·諾伊曼結構”的體系。它徹底改變了計算機的編程模式:不再需要拔插電纜,而是通過指令流和數據流的調度,機器可以在一套硬件架構下反復執行不同的程序。用的東西很簡單——“打孔帶”。
![]()
這是一種在1725年就出現在提花織布機上的古老物件。通過在紙帶上打孔來控制織布機的行針方式,從而可以織出各種圖案的布匹。
![]()
到了1846年這種打孔帶也就逐漸的被應用在電報業務中。成了圖案之外的真正信息載體。
![]()
如果我們去看ENIAC的編碼盤,我們會發現這也是一個基于位置的陣列系統:
![]()
天生就和打孔紙帶上的陣列孔有相似特性。馮·諾伊曼就是利用了這一點,把接線規則替換成了光電信號。利用紙袋機替換掉了手工接線的過程。到了1948年前后,馮·諾伊曼借鑒了提花織機、打孔卡/紙帶的思想,把“信息載體”與“控制邏輯”綁定,讓電信號能自動驅動邏輯單元,而不是讓操作員每次都重新插線。
![]()
有了輸入設備(紙帶)、輸出設備(同樣是紙帶),加上統一的存儲結構和邏輯控制,計算機才真正進化成我們今天熟悉的“馮·諾伊曼機”。ENIAC是開端,而馮·諾伊曼的思想才是靈魂。
那么,我們能不能復現這個過程呢?其實是可以的!
![]()
例如上面這張圖片:就可以當作一個程序和數據的載體讓ENIAC執行計算工作。它的本質就是一個二維陣列:每一列代表一個時鐘周期的指令或數據,每一行對應不同的通道/寄存器。打孔的位置就是“1”,不打孔就是“0”。當紙帶通過光電讀頭時,電信號就會按照預設的節奏被送進邏輯電路,從而觸發加法器、乘法器或者跳轉控制。
為了讓大家能夠更直觀地感受到 ENIAC 的工作方式,今天沒事就專門寫了一個“ENIAC 紙帶模擬系統”。它的目標很簡單:讓現代人通過電腦和一塊廉價的 ESP32 開發板,就能體驗當年工程師用紙帶控制電子計算機的過程。
![]()
整個系統分成幾部分。首先是紙帶生成器,它能把二進制程序數據轉換成一張帶有鏈輪孔的“紙帶圖像”。圖像里包含了程序頭、數據區、CRC32 校驗等信息,完全模仿了歷史上的紙帶格式。然后是紙帶讀取器,它會把圖像再解碼回數據,并通過串口發送到 ESP32,等于是把“打孔紙帶”的物理過程轉化為現代通信。ESP32 這一端有一個接收程序,負責把數據保存到板載存儲,并且返回確認信號,確保傳輸可靠。
![]()
為什么用ESP32呢?這玩意便宜!,一個ESP32芯片本身的價格也就是7塊錢人民幣,而一個ESP32的開發板價格也就只有20多塊錢。
最核心的部分是彈道計算程序。ENIAC最初的用途就是做炮彈彈道表,我在程序里復刻了這一邏輯:以初速 850 m/s、發射角 32.5° 為參數,在重力作用下計算每個時間步長的位置,直到炮彈落地。計算公式依舊是經典的牛頓力學,軌跡點的推算完全按 ENIAC 累加器的思路來實現。
![]()
最后就是ENIAC模擬器。它會讀取剛才生成的程序文件,用虛擬的累加器和指令集執行,并打印出軌跡、射程和最大高度。相比真實的 ENIAC,這個模擬器快得多,但在架構邏輯上保留了“指令即電路”的特征,讓人能清晰看到那個時代的設計思路。
![]()
其實,在這個演示中,我們只需要運行幾個腳本,就能走完整套流程:生成程序、轉換為紙帶、發送到 ESP32、最后在模擬器執行。例如上面的這條紙袋所代表的含義則是:
速度: 890 m/s
射角: 32.5?
距離: 73179.04 m
最大高度: 11655.05 m
飛行時間: 97.49 s
ENIAC的“快”是電路層面的瞬時快,不是體系結構的可持續快。它是十進制環形計數器堆出的算術陣列:20個累加器、脈沖觸發、函數表外接常量,靠插接板與撥盤把數據路徑“焊死”成一次性的算法網絡。加法約0.2毫秒、乘法約2.8毫秒,這些數字只說明單個算術單元在被正確布線后響應迅速;但一旦問題變了,程序等于報廢,所有路徑重畫、重插、重校。1948年那次“改裝”,只是把函數表等部件當作臨時的程序只讀源,勉強串起有限的指令序列,它依然不是存儲程序機。因此,把ENIAC與現代處理器做“速度”對比,本身就是錯誤命題:缺少地址空間、條件控制與可重定位代碼的系統,談不上通用算力。
![]()
所以說,馮·諾伊曼結構真正改變的是編程對象。在這套結構里,程序與數據被一體安置到同一可隨機訪問的存儲器中,處理器以“取指—譯碼—執行”的時序循環驅動控制流,條件分支、循環、間接尋址與子程序由此成為一等公民。但是要注意——所謂“馮·諾伊曼結構”不是泛泛的“用了紙帶/卡片輸入”,而是把指令表示為可尋址的字,用統一的地址空間管理控制與運算,讓“重布線”退場,由“重編譯/重裝載”接管。從這一步開始,計算機才真正的獲得了抽象層級:匯編—高級語言—編譯器—操作系統,軟件得以迭代,硬件得以解耦。
還有一點得說說了,這是咱們目前計算機教育的缺失,在大多數計算機教材中都寫到現代計算機是“馮·諾伊曼結構”,其實這件事不對!甚至可以說是半個世紀之前的老皇歷了。
今天絕大多數通用處理器只在語義層承襲“存儲程序”思想:指令與數據共享統一的虛擬地址空間,處理器按“取指—譯碼—執行”來保證可編程性與可重定位代碼。這是一種編程契約,而不是對物理實現的準確描述。
到了實現層,主流CPU早已是“改良哈佛”。指令與數據各有獨立的一級緩存、TLB、預取與一致性路徑,前端還會把復雜指令拆成微操作并緩存在μop cache 里;后端亂序執行、寄存器重命名、分支預測與投機回滾,把“線性指令流”硬生生改造成并行的數據通道。所謂“馮·諾伊曼瓶頸”被多級緩存、帶寬并行與預取器部分掩蔽——這和傳統意義上的“單總線取指取數排隊”完全不是一回事。
![]()
再往上到系統層,我們已經是“多結構并存”:CPU保持通用性,GPU/TPU走數據流/空間映射路線(SIMD/SIMT、脈動陣列、片上SRAM作顯式工作區,靠DMA搬運),NPU/ISP/編碼器是更強的專用陣列;內存體系呈NUMA與異構分層(HBM+DDR+持久內存),總線與互聯(CCIX/CXL/Infinity/NVLink)提供跨設備一致性與共享虛擬內存。說白了,軟件語義仍是馮·諾伊曼的“存儲程序”,硬件形態卻同時在走哈佛化與數據流化。所以,現在很多人看到了一些計算機架構圖,例如:
![]()
你會發現這些看起來像是當初大學計算機課程里面學的馮·諾伊曼結構,但是又有一些不對勁。其實就是我們所學到的教材偷懶了。很多教材里那張“CPU—存儲器—輸入輸出”的框圖,說是“馮·諾伊曼結構”,在現在看只是一個歷史符號而已。它描述的是1940年代的理想模型,而不是2020年代的現實硬件。
到了今天,你隨便找一張現代主板的架構圖(比如上面這一張),CPU旁邊除了內存控制器,還有PCIe控制器;南橋PCH下面掛了一堆網卡、聲卡、硬盤控制器;緩存、預取、分支預測、亂序執行全都埋在處理器內部。這和當年“指令和數據走一根總線”的馮·諾伊曼機,已經完全不是一回事。
換句話說,我們繼承的是編程契約,不是物理實現。程序員眼里還是統一地址空間、取指執行循環,但硬件工程師眼里早已是“改良哈佛 + 異構數據流”的混合體。CPU在保持通用性的同時,身邊圍滿了GPU、TPU、NPU這些“專職干活的外援”,真正的算力早就不是單核、單總線能解釋的。
所以,當教材還在用“馮·諾伊曼結構”去概括“現代計算機”,其實就是一本半個世紀前的老皇歷。它方便教學,但別因此產生錯覺:好像我們今天用的電腦,還跟1948年的ENIAC是一個物種。事實恰恰相反——我們站在馮·諾伊曼抽象之上,但實現層早已四分五裂,硬件世界走的是混血架構。這才是當下計算機體系真正的樣子。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.