歡迎來到電腦系統與架構

你有沒有想過,當你輕觸屏幕、開啟應用程式或玩遊戲時,電腦內部究竟在發生甚麼事?乍看之下,現代電腦簡直像魔法一樣神奇。然而,在玻璃與鋁合金外殼之下,其實是由各個基本構件緊密協作、運作井然有序且合乎邏輯的精密機器。

本章重點探討主題 A:電腦科學概念,特別是課題 A.1 電腦基礎。在這裡,我們將深入探討運算系統的基礎架構:硬件組件如何構建、記憶體如何組織,以及中央處理器如何一步一步執行指令。

相關章節備註:有關數字、字符和媒體如何轉換為原始二進制位元,會在數據表示與進位制中探討;而協調這些組件運作的軟件,則會在作業系統與系統軟件中詳細介紹。

1. 馮·諾曼架構 (Von Neumann Architecture)

在運算技術發展的初期,電腦只能用來執行單一的特定任務。如果你想讓機器做不同的運算,技術人員就必須手動重新接駁電線!到了 1940 年代,數學家兼博學家約翰·馮·諾曼(John von Neumann)提出了一項革命性的設計,直至今天現代電腦依然沿用這個概念:儲存程式概念 (stored-program concept)。

儲存程式概念:程式指令與正在處理的數據,皆以相同的數碼格式,一同儲存在同一個電子記憶體空間(主記憶體)中。

這意味著電腦不需要重新接線就能執行新任務。如果你想從試算表切換到電子遊戲,電腦只需將一組不同的指令載入到記憶體即可。

馮·諾曼架構的核心組件

馮·諾曼系統由四個基本組件組成:

• 中央處理器 (CPU):執行指令和處理數據的「大腦」。
• 主記憶體 (RAM):存放目前正在使用的程式碼與活躍數據的工作空間。
• 輸入及輸出 (I/O) 介面:讓電腦與外部世界進行通訊的通道(例如鍵盤、顯示器、感應器和網絡卡)。
• 輔助儲存裝置 (Secondary Storage):即使關機後仍能保留數據的永久儲存設備(例如硬碟或固態硬碟)。

生活比喻角:廚房比喻
試想像電腦系統就像一個專業廚房:
• CPU 是大廚,負責閱讀食譜步驟並烹調菜式。
• 主記憶體 (RAM) 是大廚的備料工作台。食材(數據)和食譜卡(指令)都放在這裡,以便即時取用。
• 輔助儲存裝置 是儲藏室或雪櫃。它長期存放所有食材,但大廚總不能在洋蔥還留在儲藏室時就動手切碎它吧!

重點總結:馮·諾曼架構的核心在於將程式與數據一併儲存於主記憶體中,並由 CPU 按順序擷取及執行指令。

2. 深入 CPU:內部組件與暫存器

中央處理器 (CPU) 負責擷取程式指令、解讀指令並加以執行。CPU 內部包含三大主要部分:控制單元 (Control Unit, CU)、算術及邏輯運算單元 (Arithmetic Logic Unit, ALU),以及稱為暫存器 (Registers) 的專用高速內部儲存單元。

控制單元 (CU)

控制單元就像樂團的指揮家。它本身不進行計算,也不長期儲存數據。相反,它的職責是:

• 引導指令和數據在 CPU 內部的流向。
• 利用週期性的時鐘脈衝,協調所有內部操作的時間節奏。
• 將每條指令解碼為特定的微控制訊號,指導其他組件應執行的動作。

算術及邏輯運算單元 (ALU)

算術及邏輯運算單元是 CPU 的計算器與決策中心。它負責執行兩大類基本運算:

• 算術運算 (Arithmetic operations):基本數學計算,例如加、減、乘、除。
• 邏輯運算 (Logical operations):比較與布爾邏輯判斷,例如測試兩個數值是否相等,或評估如 A AND NOT B 等條件。

CPU 暫存器:極速草稿紙

暫存器 (Registers) 是直接構建於 CPU 內部、容量極小但速度極高的記憶體單元。它們負責存放 CPU 在執行指令時需要即時使用的數據值、記憶體位址或指令。

剛接觸這些名稱時不用擔心!每個暫存器都有其專屬而明確的任務:

• 程式計數器 (Program Counter, PC):存放等待從 RAM 擷取的下一條指令的記憶體位址。指令被擷取後,PC 會自動遞增(前進)以指向下一個位址。

• 記憶體位址暫存器 (Memory Address Register, MAR):存放主記憶體中目前正在被存取的記憶體位址,無論 CPU 是要從該位址讀取指令/數據,還是將運算結果寫入該處。

• 記憶體數據暫存器 (Memory Data Register, MDR):又稱記憶體緩衝暫存器。存放剛從 RAM 讀取出來的實際數據或指令,或者等待寫入 RAM 的數據。

• 現行指令暫存器 (Current Instruction Register, CIR):存放剛擷取回來的二進制指令,供控制單元解碼為控制訊號。

• 累加器 (Accumulator, ACC):暫存由 ALU 運算或邏輯測試所產生的即時結果。

暫存器記憶法:
• PC:「Pointing to next step(指向下一步)」
• MAR:「Address roadmap(位址路線圖)」
• MDR:「Data courier(護送實際數據載荷的信差)」
• CIR:「Currently In Reading / Decoding(目前正在閱讀/解碼的指令)」
• ACC:「Accumulates answers(累積計算結果)」

重點總結:CU 指揮調度,ALU 負責運算與邏輯,而暫存器則是處理器內部的極速暫存位置。

3. 系統匯流排:內部的高速公路

CPU、主記憶體和 I/O 裝置之間是如何互相通訊的?它們透過一組並列的導電線路進行通訊,這組線路稱為系統匯流排 (system bus)。系統匯流排細分為三條專用通道:

• 位址匯流排 (Address Bus):將實體記憶體位址由 CPU(具體由 MAR)傳送至主記憶體或 I/O 控制器。位址匯流排是單向的 (unidirectional),意味著位址只能從 CPU 傳出至記憶體。位址匯流排的寬度決定了處理器能直接定址的最大記憶體容量。

• 數據匯流排 (Data Bus):在 CPU(具體由 MDR)、記憶體及外設裝置之間傳送實際的程式指令、數值或文字數據。數據匯流排是雙向的 (bidirectional),因為在讀取操作時數據需流入 CPU,而在寫入操作時數據需流出 CPU。

• 控制匯流排 (Control Bus):傳送由控制單元產生的同步訊號、狀態更新和命令指令(例如記憶體讀取、記憶體寫入、時鐘脈衝和中斷請求)。控制匯流排是雙向的,以允許訊號在各系統組件之間往來傳遞。

常犯錯誤提醒:千萬不要混淆位址匯流排與數據匯流排!位址匯流排傳遞的是「位置」(就像信封上的地址),而數據匯流排傳遞的則是「內容」(信封裡的信件本身)。

重點總結:位址匯流排單向傳送記憶體位址,數據匯流排雙向穿梭傳送數據,而控制匯流排則在整個系統中傳遞協調訊號。

4. 機器指令週期(擷取—解碼—執行)

電腦所執行的每一項工作——由計算 \(Delta = b^2 - 4ac\) 到渲染高清圖像——都可以分解為數以百萬計名為「擷取—解碼—執行」週期 (Fetch-Decode-Execute / FDE cycle)(亦稱為機器指令週期)的微小步驟。CPU 在開機運作期間會不斷重複這個循環。

第一階段:擷取 (Fetch)

此階段的目標是從主記憶體 (RAM) 中檢索下一條指令,並帶入 CPU 內部:

1. 程式計數器 (PC) 內的位址被複製到記憶體位址暫存器 (MAR)。
2. 控制單元 (CU) 沿控制匯流排向主記憶體發送讀取訊號。
3. 儲存在 MAR 中的位址透過位址匯流排傳送至 RAM。
4. 該記憶體位置的內容經由數據匯流排傳回,並儲存在記憶體數據暫存器 (MDR) 中。
5. 與此同時,PC 自動加一,指向下一個記憶體位址。
6. MDR 中的指令被複製到現行指令暫存器 (CIR)。

第二階段:解碼 (Decode)

此階段的目標是理解指令的具體含義:

1. 控制單元檢查儲存在 CIR 中的指令。
2. 指令被拆解為操作碼 (Opcode)(操作代碼,例如 ADD、LOAD 或 STORE)及操作數 (Operand)(數據值或存放該數據的記憶體位址)。
3. CU 將此操作碼翻譯成內部控制訊號,為 ALU 和系統匯流排做好執行該特定任務的準備。

第三階段:執行 (Execute)

此階段的目標是落實執行指定的指令:

• 如果指令涉及算術或邏輯運算,ALU 會執行計算並將結果儲存在累加器 (ACC) 中。
• 如果指令需要從 RAM 讀取數據,操作數中指定的記憶體位址會被載入 MAR,並透過數據匯流排擷取數據。
• 如果指令需要寫入數據,CPU 會將結果輸出至記憶體或輸出介面。
• 如果指令是跳轉或分支命令,PC 會被更新為一個全新的位址,而不再是循序遞增。

一旦執行完畢,週期便會緊接著下一條指令重新開始!

快速溫習:
• 擷取 (Fetch):RAM \(\rightarrow\) 匯流排 \(\rightarrow\) MDR \(\rightarrow\) CIR(PC 指向下一位址)。
• 解碼 (Decode):CU 解讀 CIR 中的操作碼。
• 執行 (Execute):完成操作(ALU 運算、更新暫存器或傳輸數據)。

重點總結:機器指令週期就像 CPU 連續不斷的心跳律動,有條不紊地從 RAM 擷取指令、解讀其含義,並執行相關命令。

5. 記憶體與儲存組織架構

電腦採用了記憶體階層架構 (memory hierarchy)。越靠近 CPU 的組件存取速度極快,但容量有限且製造成本高昂;距離 CPU 越遠,儲存容量隨之大增,但存取時間亦相對變慢。

主記憶體:RAM 與 ROM

主記憶體是指 CPU 能透過系統匯流排直接存取的記憶體。

1. 隨機存取記憶體 (RAM):
• 易失性 (Volatile):一旦切斷電源,RAM 內的全部內容便會立刻消失。
• 可讀寫:CPU 可以快速讀取任何 RAM 位置的數據,亦可寫入新數據。
• 功能:存放作業系統模組、正在運行的應用程式代碼,以及目前正在處理的即時用戶數據。

2. 唯讀記憶體 (ROM):
• 非易失性 (Non-volatile):即使電腦處於斷電狀態,ROM 仍能永久保留其中儲存的數據。
• 唯讀:數據在出廠製造時已被寫入,在正常運作情況下無法輕易修改。
• 功能:存放系統最初的開機引導指令(例如引導載入程式 (bootstrap loader) 或基本輸入輸出韌體),負責初始化硬件,並指示系統將主要作業系統從輔助儲存裝置載入 RAM 中。

快取記憶體 (Cache Memory)

縱使 RAM 速度已相當快,但現代 CPU 的運行速度遠超一般 RAM 晶片。如果 CPU 每次需要數據都要等待 RAM,它將有大部分時間處於閒置狀態。這種延遲被稱為記憶體瓶頸 (memory bottleneck)。

快取記憶體正是為了解決這個問題而生。它是一種容量極小但速度奇快無比的易失性記憶體,直接內建在 CPU 晶片上或緊鄰其旁。

• 運作原理:快取記憶體儲存常用指令和數據的副本。當 CPU 需要數據時,會先檢查高速快取(稱為快取命中 cache hit)。若快取中沒有該數據(稱為快取未命中 cache miss),才會轉而向較慢的 RAM 讀取。
• 快取層級:第 1 層 (L1) 快取容量最小、速度最快,直接設於處理器核心內部。第 2 層 (L2) 和第 3 層 (L3) 快取容量逐步擴大、速度稍遜,作為 L1 與主 RAM 之間的緩衝過渡區。

輔助儲存裝置 (Secondary Storage)

由於主要 RAM 具易失性且容量有限,電腦需要輔助儲存裝置來長期保留程式、檔案和作業系統。

• 非易失性:電腦關機後,儲存內容依然完好無損。
• 大容量且成本低:能以經濟實惠的成本提供千兆字節 (GB) 或太字節 (TB) 的儲存空間。
• CPU 無法直接存取:輔助儲存裝置中的數據必須先複製到主記憶體 (RAM) 中,CPU 才能執行或處理。

常見的儲存技術包括採用快閃半導體記憶體的固態硬碟 (SSD)、利用磁化磁碟盤的磁性傳統硬碟 (HDD),以及使用激光讀取反射光碟的光學儲存媒介。

重點總結:快取記憶體速度最快且最接近 CPU;RAM 為活躍程式提供快速、易失的工作空間;ROM 安全存放永久的開機代碼;而輔助儲存裝置則提供大容量、非易失的長期儲存。

6. 影響處理器效能的因素

你有沒有想過,為甚麼兩部外觀相似的電腦,實際運作表現卻有天壤之別?CPU 的效能取決於多項互相影響的硬件規格協同運作:

1. 時鐘頻率 (Clock Speed)

CPU 內建一個石英晶體震盪器,能以穩定的頻率發出脈衝來同步各項操作。指令週期的每一個微小步驟都緊隨時鐘脈衝發生。

• 時鐘頻率以赫茲 (Hz) 為單位,其中 \(1\text{ Hz} = 1\text{ cycle per second(每秒一次週期)}\)。
• 現代處理器普遍以吉赫 (GHz) 標示,其中 \(1\text{ GHz} = 1 \times 10^9\text{ cycles per second}\)。例如,一顆 \(3.2\text{ GHz}\) 的 CPU 每秒脈衝震盪高達 \(3.2\text{ billion(32 億)}\) 次。
• 影響:時鐘頻率越高,指令執行通常越快。然而,更高的時鐘頻率會產生明顯更多的熱量並消耗更多電力。

2. 處理器核心數目 (Number of Processor Cores)

以往的 CPU 只包含單一處理單元。現代處理器均為多核心 (multicore) 設計,在單一晶片上封裝了兩個、四個、八個甚至更多獨立的 CPU 核心。

• 影響:多核心支援平行處理 (parallel processing)(同時執行不同指令)與多工運作 (multitasking)(在不同核心上分別運行各個應用程式,無須爭奪同一個 ALU/CU)。
• 限制:核心數目加倍並不代表系統速度會自動翻倍!軟件必須經過特別編程,才能將工作拆分至多個核心。如果一項任務本質上是循序漸進的(步驟二嚴格依賴步驟一的結果),額外的核心便無法加速其處理。

3. 快取大小 (Cache Size)

由於存取晶片內建快取的速度遠快於讀取外部 RAM,較大的快取容量可讓 CPU 在觸手可及之處儲存更多指令與數據。

• 影響:較大的快取可帶來更高的快取命中率,意味著 CPU 可以減少因等待數據從 RAM 經外部數據匯流排傳送而浪費的時鐘週期。

重點總結:CPU 的數據吞吐量取決於時鐘頻率(每秒運算週期)、核心數目(平行執行能力)以及快取大小(減少檢索數據延遲)三者之間的平衡。

本章溫習與自我測驗題目

透過以下溫習題目,測試一下你對電腦系統與架構的理解:

1. 解釋儲存程式概念與早期運算機器之間的主要分別。
2. 指出哪個 CPU 暫存器負責存放等待被擷取的下一條指令的位址。
3. 就傳輸方向性及所傳遞的內容兩方面,區分位址匯流排與數據匯流排的不同。
4. 描述在機器指令週期的解碼階段會發生甚麼事。
5. 解釋為甚麼電腦既需要主記憶體 (RAM),同時又需要輔助儲存裝置。