歡迎來到電腦的心臟!
你有沒有想過,你的電腦在每一毫秒內到底在做什麼?這不是魔法,而是一個非常快速且嚴謹的流程,稱為提取-執行週期(Fetch-Execute Cycle)。你可以把它想像成 CPU 的心跳。在本指南中,我們將拆解電腦如何處理指令,以及當突發狀況需要引起它的注意時(中斷 Interrupts)會發生什麼事。
如果剛開始覺得這些內容有點「硬」,別擔心!我們會一步一步慢慢學!
1. 主要角色:認識暫存器 (Registers)
在進入週期之前,我們先來認識暫存器。這些是位於處理器(Processor)內部的超高速微型儲存空間。你可以把它們想成是 CPU 用來記錄當下急需資料的「便利貼」。
專用暫存器
- 程式計數器 (Program Counter, PC): 保存下一條要提取的指令的記憶體位址。它就像書籤一樣,告訴 CPU 目前在書中的位置。
- 記憶體位址暫存器 (Memory Address Register, MAR): 保存目前要存取的記憶體位址(用於讀取或寫入資料)。
- 記憶體緩衝暫存器 (Memory Buffer Register, MBR): 保存剛從記憶體提取出來,或即將寫入記憶體的資料或指令。
- 現行指令暫存器 (Current Instruction Register, CIR): 保存目前正在解碼 (decode) 和 執行 (execute) 的指令。
- 狀態暫存器 (Status Register, SR): 保存用來標示運算結果的「旗標 (flags)」(位元),例如「剛才的算術運算結果是零嗎?」或「發生了溢位錯誤嗎?」。
指揮官
- 控制單元 (Control Unit, CU): 這是老大。它負責協調 CPU 的所有活動,並利用時鐘 (Clock) 來保持所有作業同步。
- 算術邏輯單元 (Arithmetic Logic Unit, ALU): 這是計算機。它處理所有數學運算(如加法)和邏輯運算(如比較兩個數值的大小)。
快速回顧: PC 指向下一步,MAR 指向一個位址,MBR 負責存放資料,而 CIR 則負責存放當下的工作。
你知道嗎? 時鐘並不是用來看時間的。它會發出恆定的脈衝(以 Gigahertz 為單位),告訴 CPU 何時該執行週期的下一步!
2. 提取-執行週期:逐步拆解
電腦每秒會執行數十億次這樣的週期。它主要分為三個階段:提取 (Fetch)、解碼 (Decode) 和 執行 (Execute)。
階段 1:提取 (Fetch)
這是 CPU 從主記憶體 (RAM) 取得指令的過程。
- 將程式計數器 (PC) 中的位址複製到記憶體位址暫存器 (MAR)。
- PC 遞增(加 1),為下一個週期做好準備。
- 記憶體中位於 MAR 指定位址的指令,會透過資料匯流排 (Data Bus) 傳送,並儲存到記憶體緩衝暫存器 (MBR)。
- 將指令從 MBR 複製到現行指令暫存器 (CIR)。
階段 2:解碼 (Decode)
CPU 需要釐清該指令的實際含義。
- 控制單元 (CU) 會檢視 CIR 中的指令。
- 它會將指令拆分為運算碼 (Opcode)(要做什麼,例如「ADD」)和運算元 (Operand)(對什麼資料做,例如記憶體位址或具體數值)。
階段 3:執行 (Execute)
現在,CPU 開始真正的工作!
- 若涉及數學或邏輯運算,ALU 會進行計算。
- 資料可能從記憶體載入或存入記憶體。
- 運算結果會儲存在暫存器中,或透過 MBR 送回記憶體。
類比時間:廚房裡的廚師
想像一位廚師(即 CPU):
1. 提取: 廚師查看工作台上的食譜卡(指令)。
2. 解碼: 廚師閱讀卡片內容,明白上面寫著「切洋蔥」。
3. 執行: 廚師開始動手切洋蔥!
重點總結: 整個週期使用匯流排 (Buses) 來傳遞資訊(位址匯流排用於找位置,資料匯流排用於攜帶實際資料,而控制匯流排則用於傳送「讀取」或「寫入」等訊號)。
3. 中斷:那句「不好意思!」
電腦非常忙碌!有時硬體裝置(例如印表機沒紙了)或軟體程式需要 CPU 立即處理某些事情,這就稱為中斷 (Interrupt)。
CPU 如何處理中斷?
CPU 不會直接中斷手邊的工作。相反,它會在每個提取-執行週期結束時檢查是否有中斷請求。
- 在週期結束時,CPU 會檢查「中斷線」是否有訊號。
- 如果偵測到中斷,CPU 會完成當前工作,然後儲存其揮發性環境 (Volatile Environment)。
- CPU 隨後執行一個名為中斷服務常式 (Interrupt Service Routine, ISR) 的特殊程式來處理問題。
- ISR 完成後,CPU 會恢復之前儲存的狀態,回到剛才中斷的地方繼續工作。
什麼是「揮發性環境」?
如果你在看書時有人叫你,你會放個書籤以免忘記看到哪裡。CPU 也是如此。它會儲存暫存器的內容以便稍後繼續工作,包括:
- 程式計數器 (PC)(讓 CPU 知道下一條指令是什麼)。
- 狀態暫存器 (SR)。
- 堆疊指標 (Stack Pointer) 及其他通用暫存器。
常見誤區: 學生常以為中斷發生的那一瞬間 CPU 就會停下來。錯的!它一定會先完成當前的提取-執行週期,之後才會處理中斷。
重點總結: 中斷機制讓電腦更有效率。CPU 不需要在那乾等慢速的印表機完成工作,而是可以去執行其他任務,等到印表機發出「我準備好了!」的中斷訊號時才回來處理。
快速總結檢查清單
- 你能列出所有暫存器嗎? (PC, MAR, MBR, CIR, SR)
- 你知道週期的三個階段嗎? (提取 Fetch, 解碼 Decode, 執行 Execute)
- 你能解釋 MAR 和 MBR 如何協作嗎? (MAR = 「在哪裡?」,MBR = 「資料在這!」)
- 你知道為什麼在中斷期間要儲存揮發性環境嗎? (為了確保能準確地恢復原始程式的進度。)
做得好!你已經掌握了每台電腦系統中最核心的「心跳」機制。