學習目標
- 理解馮紐曼模型的核心思想
- 掌握馮紐曼模型的五大組件及其功能
- 理解程式執行的取指-解碼-執行循環
- 能夠解釋程式如何在馮紐曼架構下被執行
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 優點
- 簡單統一: 指令和資料使用相同的儲存和傳輸路徑
- 靈活: 程式可以像資料一樣被修改
- 通用: 適用於各種不同的應用
- 成本低: 硬體設計相對簡單
6.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. 考試重點提醒
- 五大組件要記熟: ALU、CU、記憶體、輸入、輸出
- 取指-解碼-執行循環: 這是必考重點,要能詳細說明每個階段
- 儲存程式概念: 要理解為什麼這是核心思想
- 程式計數器 (PC): 理解它在取指階段的作用
- 指令暫存器 (IR): 理解它存放當前正在執行的指令