學習目標

  • 理解馮紐曼模型的核心思想
  • 掌握馮紐曼模型的五大組件及其功能
  • 理解程式執行的取指-解碼-執行循環
  • 能夠解釋程式如何在馮紐曼架構下被執行

1. 歷史背景

馮紐曼模型(von Neumann Model)是由數學家約翰·馮紐曼(John von Neumann)在 1945 年提出的電腦架構模型。這個模型奠定了現代電腦的基本架構,至今仍被廣泛使用。

2. 核心思想:儲存程式概念

2.1 什麼是儲存程式?

馮紐曼模型的核心思想是「儲存程式 (Stored-program Computer)」的概念:

  • 指令 (Instructions)資料 (Data) 都以二進位形式存放在同一塊記憶體
  • CPU 可以像讀取資料一樣讀取指令
  • 程式可以像資料一樣被修改和儲存

2.2 為什麼重要?

在馮紐曼模型之前,早期的電腦(如 ENIAC)需要透過重新接線來改變程式,非常不方便。馮紐曼模型讓程式可以儲存在記憶體中,使得電腦更加靈活和通用。

3. 五大組件

馮紐曼模型包含五大主要組件:

3.1 算術邏輯單元 (ALU - Arithmetic Logic Unit)

功能: - 執行算術運算(加、減、乘、除) - 執行邏輯運算(AND、OR、NOT、XOR) - 執行比較運算(大於、小於、等於)

特點: - 是 CPU 的核心運算單元 - 所有計算都在這裡完成

3.2 控制單元 (CU - Control Unit)

功能: - 解讀指令(Instruction Decoding) - 指揮電腦各單元運作 - 控制資料流動 - 管理程式計數器 (Program Counter)

特點: - 是 CPU 的「大腦」,負責協調所有操作 - 決定下一步要做什麼

3.3 記憶體 (Memory)

功能: - 存放指令(程式碼) - 存放資料(變數、常數) - 提供快速的資料存取

分類: - 主記憶體 (Main Memory / RAM): 速度快但容量有限,斷電後資料消失 - 輔助記憶體 (Secondary Storage): 如硬碟、SSD,容量大但速度較慢

3.4 輸入單元 (Input Unit)

功能: - 接收外部資訊 - 將外部資料轉換為電腦可處理的格式

常見設備: - 鍵盤、滑鼠、觸控螢幕、麥克風、掃描器等

3.5 輸出單元 (Output Unit)

功能: - 呈現處理結果 - 將電腦內部資料轉換為人類可理解的格式

常見設備: - 螢幕、印表機、喇叭、投影機等

3.6 組件關係圖

┌─────────────────────────────────────────┐
│           記憶體 (Memory)                │
│  ┌──────────────┐  ┌──────────────┐   │
│  │   指令區      │  │   資料區      │   │
│  └──────────────┘  └──────────────┘   │
└─────────────────────────────────────────┘
              ↑ ↓
┌─────────────────────────────────────────┐
│              CPU                         │
│  ┌──────────────┐  ┌──────────────┐   │
│  │  控制單元(CU) │  │  算術邏輯單元 │   │
│  │              │  │    (ALU)     │   │
│  └──────────────┘  └──────────────┘   │
└─────────────────────────────────────────┘
         ↑ ↓              ↑ ↓
┌─────────────┐    ┌─────────────┐
│  輸入單元    │    │  輸出單元    │
└─────────────┘    └─────────────┘

注意: ALU 和 CU 常合稱為中央處理器 (CPU - Central Processing Unit)

4. 程式執行流程:取指-解碼-執行循環

程式在馮紐曼架構下的執行遵循一個固定的循環,稱為 Fetch-Decode-Execute Cycle(取指-解碼-執行循環)。

4.1 取指階段 (Fetch)

過程: 1. 控制單元 (CU) 根據程式計數器 (Program Counter, PC) 指向的記憶體位址 2. 從記憶體中取出下一個要執行的指令 3. 將指令載入到指令暫存器 (Instruction Register, IR) 4. 程式計數器自動加 1(或加上指令長度),指向下一條指令

示意圖:

PC → 記憶體位址 → 取出指令 → IR

4.2 解碼階段 (Decode)

過程: 1. 控制單元 (CU) 對取出的指令進行解碼 2. 分析指令的操作類型(如加法、載入、儲存、跳轉等) 3. 識別操作數的來源(暫存器、記憶體位址等) 4. 決定需要哪些硬體單元參與執行

範例: - 指令:ADD R1, R2, R3(將 R2 和 R3 相加,結果存入 R1) - 解碼結果:需要 ALU 執行加法運算,操作數來自 R2 和 R3,結果寫入 R1

4.3 執行階段 (Execute)

過程: 1. 控制單元發出控制信號給相關單元(主要是 ALU) 2. 從記憶體或暫存器中讀取所需的資料 3. 執行指令指定的操作(計算、比較、移動資料等) 4. 將結果寫回記憶體或暫存器 5. 更新相關的狀態標誌(如零標誌、進位標誌等)

範例: - 執行 ADD R1, R2, R3: 1. 從 R2 讀取值(如 5) 2. 從 R3 讀取值(如 3) 3. ALU 執行 5 + 3 = 8 4. 將結果 8 寫入 R1

4.4 循環重複

此循環不斷重複,直到: - 程式執行完畢 - 遇到停止指令 - 發生錯誤或中斷

4.5 完整流程圖

開始
  ↓
[取指] PC → 記憶體 → 指令 → IR
  ↓
[解碼] CU 分析指令,決定操作
  ↓
[執行] ALU/其他單元執行操作
  ↓
更新 PC 和狀態
  ↓
是否結束? ──否──→ [取指]
  ↓是
結束

5. 實際範例

假設我們要執行一個簡單的程式:計算 a + b,其中 a = 5, b = 3

程式碼(簡化版):

LOAD R1, [a]      // 將變數 a 的值載入暫存器 R1
LOAD R2, [b]      // 將變數 b 的值載入暫存器 R2
ADD R3, R1, R2    // 將 R1 和 R2 相加,結果存入 R3
STORE [result], R3 // 將 R3 的值存入 result

執行過程:

循環 1:執行 LOAD R1, [a] - 取指: PC=0,從記憶體位址 0 取出 LOAD R1, [a] - 解碼: 這是一個載入指令,需要從記憶體位址 [a] 讀取資料 - 執行: 從記憶體位址 [a] 讀取值 5,寫入暫存器 R1

循環 2:執行 LOAD R2, [b] - 取指: PC=1,從記憶體位址 1 取出 LOAD R2, [b] - 解碼: 載入指令,從記憶體位址 [b] 讀取資料 - 執行: 從記憶體位址 [b] 讀取值 3,寫入暫存器 R2

循環 3:執行 ADD R3, R1, R2 - 取指: PC=2,從記憶體位址 2 取出 ADD R3, R1, R2 - 解碼: 加法指令,需要 ALU 執行運算 - 執行: - 從 R1 讀取 5 - 從 R2 讀取 3 - ALU 計算 5 + 3 = 8 - 將 8 寫入 R3

循環 4:執行 STORE [result], R3 - 取指: PC=3,從記憶體位址 3 取出 STORE [result], R3 - 解碼: 儲存指令,需要將暫存器的值寫入記憶體 - 執行: 從 R3 讀取 8,寫入記憶體位址 [result]

6. 馮紐曼模型的優缺點

6.1 優點

  1. 簡單統一: 指令和資料使用相同的儲存和傳輸路徑
  2. 靈活: 程式可以像資料一樣被修改
  3. 通用: 適用於各種不同的應用
  4. 成本低: 硬體設計相對簡單

6.2 缺點(馮紐曼瓶頸)

  1. 記憶體頻寬限制: 指令和資料共用同一條匯流排,可能造成瓶頸
  2. 順序執行: 必須按照順序取指和執行,限制了並行處理能力

6.3 現代改進

現代電腦採用多種技術來克服馮紐曼瓶頸: - 快取記憶體 (Cache): 減少記憶體存取次數 - 指令管線化 (Pipelining): 同時處理多條指令的不同階段 - 分支預測 (Branch Prediction): 預測程式執行路徑 - 多核心處理器: 多個 CPU 核心並行工作

7. 練習題

練習題 1

請說明馮紐曼模型的五大組件及其主要功能。

參考答案: 1. 算術邏輯單元 (ALU): 執行算術和邏輯運算 2. 控制單元 (CU): 解讀指令並指揮各單元運作 3. 記憶體 (Memory): 存放指令和資料 4. 輸入單元 (Input): 接收外部資訊 5. 輸出單元 (Output): 呈現處理結果

練習題 2

請詳細說明取指-解碼-執行循環的三個階段。

參考答案: 1. 取指 (Fetch): CU 根據 PC 從記憶體取出指令到 IR 2. 解碼 (Decode): CU 分析指令,決定操作類型和操作數來源 3. 執行 (Execute): 相關單元執行操作,將結果寫回

練習題 3

為什麼說馮紐曼模型的核心是「儲存程式」概念?

參考答案: 因為它讓指令和資料都以二進位形式存放在同一塊記憶體中,CPU 可以像讀取資料一樣讀取指令,程式可以像資料一樣被修改和儲存,這使得電腦更加靈活和通用。

8. 考試重點提醒

  1. 五大組件要記熟: ALU、CU、記憶體、輸入、輸出
  2. 取指-解碼-執行循環: 這是必考重點,要能詳細說明每個階段
  3. 儲存程式概念: 要理解為什麼這是核心思想
  4. 程式計數器 (PC): 理解它在取指階段的作用
  5. 指令暫存器 (IR): 理解它存放當前正在執行的指令