天天看點

CPU架構漫談—諾曼架構與哈佛架構

作者:虎哥數位宅

衆所周知,馮·諾依曼架構(von Neumann architecture)和哈佛體系結構(Harvard architecture)是計算機CPU系統的兩種基本模型,或者稱之為兩種體系架構。前者,我們經常簡稱為“諾曼架構”;後者,我們經常簡稱為“哈佛架構”。

什麼是架構?

架構是一個計算機硬體的基本模型,它決定了計算機系統的運作方式。

計算機架構的三個要素是:

  • 中央處理器CPU
  • 記憶單元(存儲器)
  • 輸入/輸出接口 IO

如是果它們不同,就是架構不同。Intel 和AMD經常變動架構,變來變去,從CPU體系架構上來說,還是那個X86——馮·諾依曼架構,沒有本質上的變化。

諾曼架構和哈佛架構之間的顯著差異在于 CPU 與記憶體的存取方式。在這兩種架構中,CPU 使用兩種不同的方式通路記憶體,也就是說,它們處理指令和資料的方式是不同的。

諾曼架構

CPU架構漫談—諾曼架構與哈佛架構

諾曼架構是最常見的計算機體系結構之一,最早由馮·諾依曼于1945年提出。這種架構中,指令和資料存儲在同一個存儲器中,使用同一條位址總線和資料總線來傳輸資料和指令。它的主要特點如下:

  • 指令和資料共享同一個存儲器。
  • 一個CPU核心同時隻能執行一條指令。
  • 存儲器是被動的,需要 CPU 主動去讀寫資料。

我們的電腦用的X86 CPU,都是諾曼架構的。諾曼架構指令與資料共用條存總線,位址空間就在一起。是以,程式是CPU指令的集合,它也要占一定的位址空間。

CPU架構漫談—諾曼架構與哈佛架構

在x86架構中,保留記憶體的一部分通常被稱為BIOS或UEFI區域。這個區域存儲了系統啟動時需要的一些資訊和代碼,例如系統配置、硬體檢測程式和引導程式等。

是以,電腦安裝的記憶體條條,并不是都由你的程式支配。除了作業系統占用外,還有一部分是保留區域,是給BIOS或UEFI區域所占用。

上圖是windows的任務管理器,每個電腦都會有一定的保留記憶體區域。這是諾曼架構的特點決定的,并不是某個人的随意行為。

哈佛架構

CPU架構漫談—諾曼架構與哈佛架構

哈佛架構是一種分離式存儲器體系結構,它将指令和資料存儲在不同的記憶體中。CPU 通過不同的總線從指令記憶體和資料記憶體中讀取指令和資料。這意味着 CPU 可以同時通路指令和資料記憶體,是以可以同時執行多條指令。它的主要特點如下:

  • 指令和資料存儲在不同的記憶體中。
  • 一個CPU核心可以同時執行多條指令。
  • 存儲器是主動的,可以同時向 CPU 提供指令和資料。

哈佛架構多用于一些嵌入式系統或數字信号處理器等領域。我們普通人一般見不到它。

諾曼架構與哈佛架構的差別

我們知道,諾曼架構和哈佛架構的主要差別,在于它們如何處理指令和資料。

在諾曼架構中,指令和資料共享同一個存儲器,CPU 隻能執行一條指令,因為它需要等待指令和資料都被讀取到 CPU 中。而在哈佛架構中,指令和資料存儲在不同的記憶體中,CPU 可以同時通路指令和資料記憶體,是以可以同時執行多條指令。

是以,可以這樣了解,諾曼架構是單車道,而哈佛架構是多車道。

作為單車道的諾曼架構,它的缺點是明顯的。

  • 同時傳輸資料和指令,導緻存儲器和處理器之間的效率低下。
  • 存儲器中的指令和資料被混合存儲,指令可以被當作資料進行處理,是以程式可以動态地修改自身代碼,容易受到病毒、惡意程式等攻擊。
  • 指令和資料必須具有相同的位寬。

不過,諾曼架構也有好處,就是簡單、易于實作和設計。

哈佛架構有兩個獨立的存儲器,就像多車道那樣,它的優點也很明顯。

  • 指令與資料傳輸同時運作,運作效率高。
  • 存儲器中的指令和資料分開存儲,是以程式無法直接修改自身代碼,這樣會更加安全可靠、固若金湯。
  • 指令和資料的位寬可以不同。

但天下沒有十全的美事,哈佛架構實作和設計相對複雜的多。

哈佛架構也有一種好處,可以使用不同的技術來優化性能。例如,指令記憶體可以使用快速但昂貴的 SRAM 存儲器,而資料記憶體可以使用廉價的 DRAM 存儲器。這種技術上的優勢使得哈佛架構在一些應用中更具優勢,例如嵌入式系統和數字信号處理器。

總體而言,馮·諾依曼架構适用于大多數通用計算機,因為它能夠靈活地處理各種不同的計算任務,同時還可以使用緩存等技術來優化性能。而哈佛架構則适用于一些特定的應用領域,例如需要高效地處理大量資料的嵌入式系統,或數字信号處理器等領域。

繼續閱讀