學習筆記:硬件與虛擬機 (A Level 課程 9618)

你好,未來的電腦科學家!本章將帶你深入電腦的動力室:先進的硬件架構,以及讓單一物理機器運作得像多台電腦一樣的精妙軟件技巧——**虛擬機 (Virtual Machine)**。

理解這些概念至關重要,因為它解釋了*為什麼*某些電腦處理特定任務時速度更快,以及現代數據中心如何管理龐大的工作負載。不用擔心 CISC 或 JK 正反器(JK flip-flop)這類術語聽起來很嚇人,我們會一步步為你拆解!


15.1 處理器、並行處理與虛擬機

15.1.1 比較處理器架構:RISC 與 CISC

CPU 能理解的指令集形成了它的**指令集 (Instruction Set)**。設計指令集主要有兩種哲學:

精簡指令集電腦 (RISC)
  • 指令集:小型且高度優化的指令集。
  • 指令複雜度:指令簡單且長度固定(通常只需 1 個時鐘週期)。
  • 記憶體存取:只有特定的 LOAD 和 STORE 指令能存取記憶體。所有其他運算(如 ADD)均在 CPU 暫存器內完成。
  • 目標:透過使用管線技術 (Pipelining) 來最大化執行速度。
  • 比喻:RISC 處理器就像一個只放了最精華、高品質工具的工具箱,讓工作流程既快速又高效。
複雜指令集電腦 (CISC)
  • 指令集:龐大且多樣化的指令集。
  • 指令複雜度:指令可以非常複雜(例如,一條指令可能同時處理記憶體讀取、算術運算和儲存)。它們通常需要多個時鐘週期才能完成。
  • 記憶體存取:許多指令可以直接操作記憶體中的資料。
  • 目標:減少完成任務所需的指令數量(使程式碼更精簡)。
  • 比喻:CISC 處理器就像一把多功能瑞士軍刀——它可以在一個步驟內完成許多複雜的工作,但每個步驟所需的時間較長。

中斷處理的差異:

處理中斷對處理器來說很棘手,特別是當指令需要多個週期才能完成時。

  • CISC:由於指令複雜,中斷處理相對簡單。處理器通常會等待當前的長指令完成後,再回應中斷。
  • RISC:指令簡單且快速(通常在管線中完成)。如果發生中斷,CPU 必須精確識別管線中哪一條指令失敗或需要處理,這可能需要清除管線並重新啟動,使得中斷機制的管理比 CISC 更為複雜。

15.1.2 RISC 的效率:管線技術與暫存器

RISC 架構旨在充分利用兩個關鍵概念:**管線技術 (Pipelining)** 和大量使用**暫存器 (Registers)**。

管線技術 (Pipelining):

想像汽車組裝線。與其造完一輛車才開始下一輛,不同的工作站會同時處理不同的車(例如,當 A 車在噴漆時,B 車正在安裝引擎)。

  • 在 CPU 中,指令週期(提取 Fetch、解碼 Decode、執行 Execute、儲存 Store)被拆分為多個階段。
  • 管線技術允許處理器同時執行多條指令的不同階段。
  • 由於 RISC 指令長度相同(固定格式)且只需一個週期,它們非常適合順暢的管線運作,從而提高了吞吐量(單位時間內完成的指令數)。

RISC 中的暫存器:

  • 與 CISC 處理器相比,RISC 處理器通常擁有更多數量的通用暫存器
  • 由於大多數運算必須在暫存器內完成(而非記憶體),擁有大量可用暫存器減少了頻繁存取較慢的主記憶體 (RAM) 的需求,這對於保持管線數據不斷供應至關重要。
重點回顧:RISC 與 CISC

記住 RISC 的 "R" 代表 Rapid (快速)Register (暫存器) 優先。記住 CISC 的 "C" 代表 Complex (複雜)Comprehensive (全面) 的指令。

15.1.3 電腦架構:並行處理 (弗林分類法 Flynn's Taxonomy)

電腦架構可以根據它們同時處理的指令流 (Instruction Streams, I)數據流 (Data Streams, D) 的數量進行分類,這就是弗林分類法 (Flynn's Taxonomy)。

I = 指令流 | D = 數據流

  1. SISD (單指令流單數據流)

    經典的馮·紐曼架構。一個 CPU 同一時間對一個數據項執行一條指令。
    例子:傳統舊式桌上型電腦,依序執行單一程式。

  2. SIMD (單指令流多數據流)

    多個處理單元同時對多個數據項執行相同的指令。
    例子:用於向量處理器或圖像處理器 (GPU),處理視頻渲染或圖像處理等任務,即對大量數據同時應用相同的操作(如改變像素顏色)。

  3. MISD (多指令流單數據流)

    不同的指令對同一個數據流進行操作。這種架構在實踐中很少見,但在理論上可行,通常用於容錯系統,由不同的處理器檢查相同的數據流。

  4. MIMD (多指令流多數據流)

    多個處理器同時對不同的數據集執行不同的指令。
    例子:現代多核心 CPU、大規模並行電腦和伺服器場。這是大規模並行電腦的基礎,能夠同時處理不同、獨立的任務(例如同時運行多個不同的應用程式)。

並行處理的核心重點: MIMD 是最強大且靈活的模型,用於通用並行處理;而 SIMD 對於特定、重複性的計算任務(如圖形處理)則極為高效。

15.1.4 虛擬機 (VM) 的概念

**虛擬機 (Virtual Machine, VM)** 是一種對電腦系統的模擬。它基於真實或假設的電腦架構及功能運作。
簡單來說,它就是運行在真實電腦內部的「軟件電腦」。

虛擬機由稱為**虛擬機監控器 (Hypervisor)** 或虛擬機管理程式的軟件來管理。

虛擬機的角色與例子
  • 測試與開發:開發人員可以在不同作業系統 (OS) 上測試軟件,而無需為每個 OS 購買實體硬件。
  • 遺留軟件:運行與現代作業系統不相容的舊應用程式(例如需要 Windows 98 的舊銀行系統)。
  • OS 整合:一台大型伺服器可以同時運行多個不同的虛擬伺服器 (VM),每個負責不同的任務(網站伺服器、數據庫伺服器、郵件伺服器等)。這在數據中心非常普遍。
  • 安全性:虛擬機提供了極佳的隔離性。如果惡意軟件感染了一個 VM,宿主系統和其他 VM 仍能受到保護。
虛擬機的優點與限制

優點:

  1. 隔離性:每個 VM 獨立運作;一個崩潰不會影響其他 VM。
  2. 可攜性:VM 映像檔可以輕鬆地從一台物理機器遷移到另一台。
  3. 資源效率:透過在多個虛擬作業系統間共享資源,最大化底層強力硬件的使用率。
  4. 快照 (Snapshots):允許用戶保存系統狀態並隨時回溯。

限制:

  1. 效能損耗:虛擬機監控層需要消耗運算效能,導致效能比直接在硬件上運行作業系統稍低。
  2. 資源爭奪:如果太多 VM 同時嘗試存取同一個物理資源(如硬碟),會發生瓶頸。
  3. 儲存空間:虛擬機需要大量磁碟空間來儲存各自的作業系統與數據。

15.2 布林代數與邏輯電路

AS Level 介紹過基礎邏輯閘(AND、OR、NOT),A Level 則要求你理解這些閘如何組裝以執行算術運算和儲存數據。

15.2.1 加法器:半加法器與全加法器

數碼電腦必須能執行二進制數加法,這是透過稱為「加法器」的邏輯電路來完成的。

半加法器 (Half Adder)

半加法器是最簡單的加法器電路。它接收兩個單位二進制輸入 (A 和 B),產生兩個輸出:**和 (Sum, S)** 與 **進位 (Carry, C)**。

  • 不能接受來自前一次加法的進位輸入。
  • 和 (Sum) 輸出是 XOR 閘的結果。
  • 進位 (Carry) 輸出是 AND 閘的結果。

真值表:

AB和 (S)進位 (C)
0000
0110
1010
1101

邏輯表達式:
和:\(S = A \oplus B\)
進位:\(C = A \cdot B\)

全加法器 (Full Adder)

全加法器對於多位二進制數的加法至關重要。它接收三個輸入:兩個數據位 (A 和 B) 以及來自前一位加法的**進位輸入 (\(C_{in}\))**。它產生一個**和 (S)** 和一個**進位輸出 (\(C_{out}\))**。

  • 全加法器通常由兩個半加法器和一個 OR 閘構成。
  • 這些全加法器串聯起來,構成了 CPU 中執行加法的**算術邏輯單元 (ALU)**。

邏輯表達式(概念):
和:\(S = A \oplus B \oplus C_{in}\)
進位輸出:\(C_{out} = (A \cdot B) + (C_{in} \cdot (A \oplus B))\)

15.2.2 數據儲存:正反器 (Flip-Flop)

**正反器 (Flip-Flop)** 是最基本的順序邏輯電路。與組合邏輯電路(如加法器,其輸出僅取決於當前輸入)不同,順序邏輯電路具有記憶功能。正反器可以儲存單個二進制位 (1 bit),是暫存器和緩存 (Cache) 的基本組件。

SR 正反器 (Set-Reset Flip-Flop)

SR 正反器有兩個輸入,置位 (Set, S) 和復位 (Reset, R),以及兩個輸出 Q 和 \(\overline{Q}\) (Q-bar,Q 的反相)。

  • S = 1, R = 0 (置位):強制 Q 為 1(儲存 1)。
  • S = 0, R = 1 (復位):強制 Q 為 0(儲存 0)。
  • S = 0, R = 0 (保持/記憶):Q 保持之前的狀態。
  • S = 1, R = 1 (禁用/無效):必須避免此狀態,因為產生的輸出 Q 是不可預測的,或會導致震盪。
JK 正反器 (JK Flip-Flop) (改進版本)

JK 正反器消除了 SR 型中的無效狀態。它有兩個控制輸入 J 和 K,通常還有一個時鐘輸入(使其成為時鐘正反器)。

  • J 類似於 Set,K 類似於 Reset。
  • J = 0, K = 0 (保持):Q 保持之前的狀態。
  • J = 1, K = 0 (置位):強制 Q 為 1。
  • J = 0, K = 1 (復位):強制 Q 為 0。
  • J = 1, K = 1 (翻轉):這是關鍵差異。輸出 Q 會翻轉為當前狀態的相反值。(如果 Q 原本是 1,則變為 0,反之亦然)。

你知道嗎?多個正反器串聯在一起就形成了暫存器(用於 CPU)和計數器。

15.2.3 簡化邏輯:布林代數與德摩根定律

**布林代數**提供了數學上的規則和定理來簡化邏輯表達式。簡化表達式意味著你可以用更少、更便宜或更快的邏輯閘構建相同的電路功能——這就是電路**優化**。

德摩根定律 (De Morgan's Laws)

這兩條定律對於簡化包含 NAND 和 NOR 閘的表達式至關重要(因為這些閘常被用於製造業)。

定律 1:合取 (AND) 的否定等於否定項的析取 (OR)。
表達式:\(\overline{A \cdot B} = \overline{A} + \overline{B}\)
記憶小技巧:拆開橫線,變換符號。一個反相的 AND (NAND) 等同於將兩個反相的輸入取 OR。

定律 2:析取 (OR) 的否定等於否定項的合取 (AND)。
表達式:\(\overline{A + B} = \overline{A} \cdot \overline{B}\)
記憶小技巧:拆開橫線,變換符號。一個反相的 OR (NOR) 等同於將兩個反相的輸入取 AND。

常見布林代數規則(用於簡化)
  • 恆等律: \(A + 0 = A\); \(A \cdot 1 = A\)
  • 零律/支配律: \(A + 1 = 1\); \(A \cdot 0 = 0\)
  • 冪等律: \(A + A = A\); \(A \cdot A = A\)
  • 補數律: \(A + \overline{A} = 1\); \(A \cdot \overline{A} = 0\)

15.2.4 視覺化簡化:卡諾圖 (Karnaugh Maps, K-Maps)

處理涉及三或四個變數的邏輯表達式時,單純使用布林代數可能既費時又容易出錯。**卡諾圖 (K-maps)** 提供了一種圖形化方法來尋找最簡的積之和 (Sum-of-Products, SOP) 表達式。

卡諾圖的工作原理

卡諾圖是一個方格網,每個方格對應真值表中的一行(即一種可能的輸入組合)。

  1. 映射真值表:將真值表中的輸出 '1' (True) 填入卡諾圖對應的方格中。
  2. 分組 '1':將相鄰的 '1' 分成矩形組。分組必須:
    • 是矩形(正方形或線條)。
    • 包含 2 的冪次方個 '1' (1, 2, 4, 8, 16...)。
    • 盡可能大。
    • 分組可以繞過卡諾圖的邊緣。
  3. 寫出表達式:對於每個分組,找出在該組內不改變狀態的變數。這些變數形成了簡化後的積項。(會變化的變數則剔除)。

卡諾圖的優點:

對於多達四個輸入變數的情況,卡諾圖能確保得出最簡化的電路設計,從而使用最少的邏輯閘,降低實體電路的成本、功耗並減少傳輸延遲。

邏輯學的核心重點:全加法器允許順序二進制加法,正反器用於儲存數據,而卡諾圖確保你的最終電路設計達到最高效率。