衆所周知,馮·諾依曼架構(von Neumann architecture)和哈佛體系結構(Harvard architecture)是計算機CPU系統的兩種基本模型,或者稱之為兩種體系架構。前者,我們經常簡稱為“諾曼架構”;後者,我們經常簡稱為“哈佛架構”。
什麼是架構?
架構是一個計算機硬體的基本模型,它決定了計算機系統的運作方式。
計算機架構的三個要素是:
- 中央處理器CPU
- 記憶單元(存儲器)
- 輸入/輸出接口 IO
如是果它們不同,就是架構不同。Intel 和AMD經常變動架構,變來變去,從CPU體系架構上來說,還是那個X86——馮·諾依曼架構,沒有本質上的變化。
諾曼架構和哈佛架構之間的顯著差異在于 CPU 與記憶體的存取方式。在這兩種架構中,CPU 使用兩種不同的方式通路記憶體,也就是說,它們處理指令和資料的方式是不同的。
諾曼架構
諾曼架構是最常見的計算機體系結構之一,最早由馮·諾依曼于1945年提出。這種架構中,指令和資料存儲在同一個存儲器中,使用同一條位址總線和資料總線來傳輸資料和指令。它的主要特點如下:
- 指令和資料共享同一個存儲器。
- 一個CPU核心同時隻能執行一條指令。
- 存儲器是被動的,需要 CPU 主動去讀寫資料。
我們的電腦用的X86 CPU,都是諾曼架構的。諾曼架構指令與資料共用條存總線,位址空間就在一起。是以,程式是CPU指令的集合,它也要占一定的位址空間。
在x86架構中,保留記憶體的一部分通常被稱為BIOS或UEFI區域。這個區域存儲了系統啟動時需要的一些資訊和代碼,例如系統配置、硬體檢測程式和引導程式等。
是以,電腦安裝的記憶體條條,并不是都由你的程式支配。除了作業系統占用外,還有一部分是保留區域,是給BIOS或UEFI區域所占用。
上圖是windows的任務管理器,每個電腦都會有一定的保留記憶體區域。這是諾曼架構的特點決定的,并不是某個人的随意行為。
哈佛架構
哈佛架構是一種分離式存儲器體系結構,它将指令和資料存儲在不同的記憶體中。CPU 通過不同的總線從指令記憶體和資料記憶體中讀取指令和資料。這意味着 CPU 可以同時通路指令和資料記憶體,是以可以同時執行多條指令。它的主要特點如下:
- 指令和資料存儲在不同的記憶體中。
- 一個CPU核心可以同時執行多條指令。
- 存儲器是主動的,可以同時向 CPU 提供指令和資料。
哈佛架構多用于一些嵌入式系統或數字信号處理器等領域。我們普通人一般見不到它。
諾曼架構與哈佛架構的差別
我們知道,諾曼架構和哈佛架構的主要差別,在于它們如何處理指令和資料。
在諾曼架構中,指令和資料共享同一個存儲器,CPU 隻能執行一條指令,因為它需要等待指令和資料都被讀取到 CPU 中。而在哈佛架構中,指令和資料存儲在不同的記憶體中,CPU 可以同時通路指令和資料記憶體,是以可以同時執行多條指令。
是以,可以這樣了解,諾曼架構是單車道,而哈佛架構是多車道。
作為單車道的諾曼架構,它的缺點是明顯的。
- 同時傳輸資料和指令,導緻存儲器和處理器之間的效率低下。
- 存儲器中的指令和資料被混合存儲,指令可以被當作資料進行處理,是以程式可以動态地修改自身代碼,容易受到病毒、惡意程式等攻擊。
- 指令和資料必須具有相同的位寬。
不過,諾曼架構也有好處,就是簡單、易于實作和設計。
哈佛架構有兩個獨立的存儲器,就像多車道那樣,它的優點也很明顯。
- 指令與資料傳輸同時運作,運作效率高。
- 存儲器中的指令和資料分開存儲,是以程式無法直接修改自身代碼,這樣會更加安全可靠、固若金湯。
- 指令和資料的位寬可以不同。
但天下沒有十全的美事,哈佛架構實作和設計相對複雜的多。
哈佛架構也有一種好處,可以使用不同的技術來優化性能。例如,指令記憶體可以使用快速但昂貴的 SRAM 存儲器,而資料記憶體可以使用廉價的 DRAM 存儲器。這種技術上的優勢使得哈佛架構在一些應用中更具優勢,例如嵌入式系統和數字信号處理器。
總體而言,馮·諾依曼架構适用于大多數通用計算機,因為它能夠靈活地處理各種不同的計算任務,同時還可以使用緩存等技術來優化性能。而哈佛架構則适用于一些特定的應用領域,例如需要高效地處理大量資料的嵌入式系統,或數字信号處理器等領域。