馮紐曼架構與哈佛架構的差異:比較指令與資料的處理

在馮紐曼架構中,指令與資料共用一個記憶體與一條匯流排,因此處理器無法同時進行指令的擷取與資料的存取。這個限制就是馮紐曼瓶頸。在哈佛架構中,指令與資料位於不同的記憶體,並有各自的匯流排,因此可以同時存取。現代大多數 CPU 結合了這兩者。主記憶體是共通的,但 L1 快取分成指令用與資料用。這稱為修正式哈佛架構。

項目馮紐曼架構哈佛架構
記憶體一個記憶體同時存放指令與資料指令用與資料用各有獨立的記憶體
匯流排共用的一條各自獨立的匯流排
指令擷取與資料存取爭用同一條匯流排(馮紐曼瓶頸)可以同時進行
傳輸量在相同匯流排速度下較低高。可以平行存取
靈活性高。因為程式就是資料,所以容易載入、產生與修改較低。程式碼與資料是分開的
記憶體的分配程式碼與資料的比例可以靈活改變各個記憶體的大小是固定的
硬體複雜度簡單複雜。兩個記憶體與兩條匯流排
代表性裝置通用電腦數位訊號處理器與許多微控制器(AVR 與 PIC 等)
在現代 CPU 中共通的主記憶體L1 的指令快取與資料快取是分開的(修正式哈佛架構)

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

馮紐曼架構
在通用運算中,從儲存裝置載入程式,且靈活性很重要時。
哈佛架構
像訊號處理或嵌入式裝置那樣,想以可預測的高傳輸量存取指令與資料時。

常見問題

什麼是馮紐曼瓶頸?

指令與資料共用一個記憶體與一條匯流排,因此處理器無法同時擷取指令與存取資料,使傳輸量受到限制。

現代 CPU 使用哈佛架構嗎?

部分是的。主記憶體是共通的,但 L1 快取分成指令用與資料用。這稱為修正式哈佛架構。

哪些微控制器使用哈佛架構?

AVR 與 PIC 等許多微控制器,各自擁有獨立的程式記憶體與資料記憶體。

自我修改程式碼能在哈佛架構的機器上運作嗎?

並不容易。因為程式碼與資料位於不同的記憶體。這種分離是馮紐曼架構比較靈活的原因之一。

理解度檢測

關於馮紐曼型(von Neumann)電腦的特徵,下列何者正確?

  1. A指令與資料一定放在各自獨立的記憶體中
  2. B藉由重新接線來更改程式
  3. C將程式(指令)與資料存放在同一個主記憶體中,依序讀出指令並執行
查看答案與解析

正確答案:C. 將程式(指令)與資料存放在同一個主記憶體中,依序讀出指令並執行

馮紐曼型(stored-program 儲存程式方式)將指令與資料放在同一個主記憶體中,由 CPU 依序讀出指令並執行。其優勢在於能把程式當作資料來改寫,具有高度彈性,是現今電腦的基礎。另一方面,指令與資料爭用同一條路徑會成為速度上的限制,稱為馮紐曼瓶頸。因此許多 CPU 會將 L1 快取分成指令用與資料用(哈佛型的觀念)。

將快取分為指令用(I快取)與資料用(D快取)的L1快取,其主要優點為下列何者?

  1. A即使指令與資料放在相同位址也不會衝突,容量看起來變成2倍
  2. B指令的提取與資料的讀寫可在同一個時脈中並行進行
  3. C指令不會被改寫,所以可以不需要D快取
查看答案與解析

正確答案:B. 指令的提取與資料的讀寫可在同一個時脈中並行進行

在管線中,每個時脈都要提取指令,同時另一條指令要讀寫資料。將L1分為指令用與資料用後,兩個存取不必爭用單一快取的埠即可並行進行,也能依各自的性質選擇配置。容量並不會變成2倍,而是將總容量分開使用。由於資料的讀寫始終是必要的,不可能不需要D快取。L2以後一般是指令與資料共用。

CPU 處理一道指令的基本流程,下列順序何者正確?

  1. A執行 → 解碼 → 擷取
  2. B擷取(fetch)→ 解碼(decode)→ 執行
  3. C解碼 → 擷取 → 執行
查看答案與解析

正確答案:B. 擷取(fetch)→ 解碼(decode)→ 執行

CPU 從記憶體擷取指令(fetch),解讀內容(decode)以決定要做什麼,然後執行運算等,必要時再將結果寫回暫存器或記憶體。要擷取的指令位置由程式計數器指示,解碼時則判定運算的種類與所用的暫存器。管線化就是讓這些階段重疊並行,使每個時脈完成一道以上指令的機制。

  1. 在管線中,當下一道指令立即使用前一道指令的結果(資料危障)時,不等待寫入暫存器,而將運算結果直接交給下一道指令的手法是下列何者?

前往CPU與架構的練習題

相關名詞的解說

馮紐曼架構
將程式與資料放在同一個主記憶體,依序讀出指令並執行的電腦架構。
快取記憶體
設置在 CPU 附近的高速、小容量記憶體。保存常用資料,以緩和與主記憶體之間的速度差。主要由 SRAM 製成。

相關的比較