1.37k likes | 1.44k Views
第 2 章. 中央處理單元. 學習目標. 看完本章 , 您應該學會以下主題: 認識 CPU 在電腦中扮演的角色 CPU 運作的原理 CPU 的規格與技術名. 2-1 CPU 的功用.
E N D
第 2 章 中央處理單元
學習目標 • 看完本章, 您應該學會以下主題: • 認識 CPU 在電腦中扮演的角色 • CPU 運作的原理 • CPU 的規格與技術名
2-1 CPU 的功用 • CPU 的全名是 Central Processing Unit (中央處理單元), 也就是一般人俗稱的『處理器』 (Processor)。在電腦的五大單元中, CPU 就包含了控制(CU, Control Unit)及算術/邏輯 (ALU, Arithmetic/Logic Unit) 兩大單元, 它在整部電腦的重要性, 就宛如大腦之於人的地位一般!
2-1 CPU 的功用 • CPU 負責系統中資料的運算 (例如:加、減、乘、除) 與邏輯判斷 (例如 AND、OR...等, 請參考第 6 章) 等核心工作, 是電腦中最重要、最複雜的一個元件, 電腦若沒有了 CPU, 將無法正常運作。而CPU 的能力往往是用來評斷電腦執行效能的主要指標! • CPU 除了計算的工作外, 還必須指揮、協調其它元件之間執行、搭配的步調, 我們也才得以順利操作、使用電腦上的所有軟硬體。
2-1 CPU 的功用 • 電腦的運作必定包含輸入→運算→輸出這 3 個過程。舉例來說, 我們將自己的名字用鍵盤輸入到電腦, 電腦螢幕便將名字顯示出來, 這些輸入與輸出的過程對我們而言很容易理解, 但是運算呢?我們的操作 (如按滑鼠左鈕 2 下這個動作) 要怎麼『運算』呢?
2-1 CPU 的功用 • 其實對 CPU 而言, 我們對電腦的操作會轉成一連串的指令, 而探究指令的本質, 其實就是數字資料 (0 和 1) 的組合, 實際上在電腦中所有的資料、指令都是數字。而將『數字』 拿來做運算本來就是再正常不過的了!
2-1 CPU 的功用 • CPU 的種類繁多, 一般常見的 PC 個人電腦, 幾乎都是採用 x86 系列的 CPU, 但在個人電腦以外的裝置 (如 PDA、行動電話... 等), 則大多採用非 x86 系列的 CPU。 • 以下我們以最常用的 x86 系列 CPU 為例, 說明其內部結構, 以及實際運作時, 是如何從輸入、經過運算, 到最後產生輸出。待 2-3 節, 再介紹一些比較常見的非 x86 CPU。
隨堂練習 1. 請簡述 CPU 的工作是什麼 ?
2-2 CPU 的工作原理-以 x86 CPU 為例 • 在了解 CPU 的工作原理之前, 我們先從 CPU 的結構開始認識起。
2-2-1 CPU 的構造 • CPU 的構造包含了控制單元(CU, Control Unit)、算術/邏輯單元 (ALU, Arithmetic/Logic Unit)、暫存器(Register) 等, 並透過匯流排 (Bus) 來溝通:
2-2-1 CPU 的構造 • 在上圖中, 快取記憶體 (Cache Memory) 雖然也會設置在 CPU 內部, 不過就傳統 C P U 的結構 (Architecture) 來說, 快取記憶體並不屬於 CPU 的一部份。關於快取記憶體, 稍後會有詳細的介紹。
控制單元 • 控制單元(Control Unit) 負責控制資料流和指令流。當我們輸入指令 (如鍵盤或滑鼠的操作) 時, 控制單元會讀取並解譯指令, 以便將需要運算的資料送到算術/邏輯單元進行運算, 並將運算完成的資料流或指令流, 送到輸出或輸入單元。 • 其實說穿了, 控制單元的主要任務就是在『控制』輸出與輸入而已。
算術/邏輯單元 • 算術/邏輯單元 (Arithmetic/Logic Unit), 從字面上來理解就是負責算術運算及邏輯運算。簡單地說, 算術運算就是加、減、乘、除等運算, 而邏輯運算則是 AND 、OR、NOT等運算, 這些都是數學上再熟悉不過的運算方法了。 • 關於邏輯運算 (AND、OR...等), 在第 6 章會有詳細介紹。
暫存器 • 暫存器(Register) 是 CPU 內部用來暫時存放資料的地方, 是相當重要的一個元件。暫存器其實就是記憶體, 位於記憶體階層的最上層 (關於記憶體階層的詳細介紹, 請參考 3-1 節)。 • 主要是為了配合 CPU 的高速運算而設置。雖然暫存器的存取速度相當快, 但因成本太高, 所以通常只能配置幾個位元組 (Bytes) 的容量。每個暫存器的大小 (寬度) 也決定了 CPU 所能處理的字組 (Word) 大小。
暫存器 • 字組 (Word) 是一個單位, 表示 CPU 在一個指令週期(詳細後述)所處理的資料量。若 CPU 一次能處理 32 位元大小的字組, 則這個 CPU 就稱為 32 位元 CPU。 • CPU 裏的暫存器有很多個, 依功能的不同會分別配置在控制單元及算術/邏輯單元中。通常, 對程式設計者而言, 只要學習 CPU 的指令, 並且熟習暫存器的用法, 便可以順利的控制 CPU 動作。
暫存器 • 不同架構 CPU, 其暫存器種類、數量都不同, 以下介紹 x86 系列 CPU 中幾種較常見的暫存器: • 一般用途暫存器 (General Purpose Register) :一般用途暫存器是用來存放運算的資料、指令或位址。一般用途暫存器依其功能而有不同的名稱, 以下是幾種常見的一般用途暫存器:
暫存器 • 資 料暫存器 (Data Register):資料暫存器即用來存放資料的地方。 • 累加器 (Accumulator):累加器通常會被單獨拿出來介紹, 因為累加器是算術/邏輯運算單元中相當重要的部份, 是用來存放運算過程及運算結果的資料。 • 指令暫存器(Instruction Register):通常設置在控制單元內, 用來存放目前被執行的指令。 • 程式計數器 (Program Counter):用來記錄 CPU 下一個要執行指令所存放的位址。
暫存器 • 位址暫存器(Address Register):用來記錄資料存放在記憶體的位址, 也稱為指位器(Pointer)。常見的位址暫存器有以下幾種: • 堆疊暫存器 (Stack Register):堆疊暫存器是用來記錄堆疊最頂端位址的暫存器。堆疊 (Stack) 是一種重要的資料結構 (Data Structure) , 就是規定資料元素必須依著後進先出 (LIFO, Last In First Out) 之次序來存取。例如下圖, 我們將甲、乙、丙、丁這 4 個資料依次堆入 (Push) 堆疊:
暫存器 • 當我們想由堆疊取出 (Pop) 資料時, 其次序會是丁、丙、乙、甲。也就是說, 像 "甲" 這個最早被 Push 的資料是最後才會被 Pop 的。這是因為堆疊是一種單一出入口的資料結構體, 自然就會造成 『後進先出』 這樣的特性了。以此例來說, 堆疊暫存器記錄的就是 『丁』 的位址。 • 所謂的資料結構指的是資料組織與管理的方法。有關資料結構的詳細說明, 請參考第 16 章。
暫存器 • 基底暫存器 (Base Register):基底暫存器是『基底定址法』 在做暫存器定址時所使用的暫存器。基底定址法就是以基底暫存器所指位址為起點, 再加上一固定距離來得到資料所在的位址。舉例來說, 如果要從堆疊區取資料, 那麼必須先指定基底的位置, 再依指定的距離找到要存取的位置:
暫存器 • 如上圖所示, 假設我們要取 『丁』, 那麼可以指定 『乙』 的位址為基底, 加上 2 Bytes 的距離就可以找到 『丁』的位址;或是以 『丙』的位址為基底, 加上 1 Bytes 的距離也可以找到 『丁』 的位址。 • 所謂定址法(Addressing Mode) 就是 CPU 尋找資料所在位置的方法。簡言之, 就是 CPU 存取(Access) 資料的途徑, CPU 除了可以對暫存器定址, 也可以對主記憶體定址。
暫存器 • 索引暫存器 (Index Register):索引暫存器是『索引定址法』在做暫存器定址時使用的暫存器。 • 索引定址法的原理與基底定址法是一樣的, 但這時是以固定之位址 (如堆疊的開頭) 為基底, 再加上索引暫存器儲存的值以得到資料所在位址。 • 同樣以從堆疊區取資料為例, 如下圖所示,假設我們要取 『丁』 , 此時會固定以 『甲』 為基底, 再加上 3 (索引暫存器所記錄的值) 的距離來找到『丁』 的位址。索引定址法和基底定址法最大的不同, 就是說我們無須、也無法指定基底的位址。
暫存器 • 旗標暫存器 (Flag Register):旗標暫存器是一種比較特殊的暫存器, 是用來記錄 CPU 在處理運算時的狀態, 或運算之後的狀態。
匯流排 • 電腦上各元件傳送資料的管道就是匯流排(Bus)。從字面上解讀, 取其 『匯流』 之意, 就大致可以明白這個傳送資料的管道, 是由許多不同的管道整合在一起的。 • 而這樣做的好處在於管道 (也就是主機板上的電子線路) 容易安排, 也能確保所有元件都能互相傳送資料。
匯流排 • 舉例來說, 就像高速公路也是採用 『匯流』 的概念一樣, 不同的地點都以交流道和高速公路銜接, 而不是地點和地點之間各自連接。如此, 就算新增加了一個地點, 只要此地點有交流道連上高速公路,還是可以確保我們一定能到達該處。
匯流排 • 在電腦中匯流排主要分為三大類: • 內部匯流排 (Internal Bus):CPU 內部用來傳送資料的通道。控制單元、算術/邏輯單元及暫存器在讀取、存放資料時, 都是經過內部匯流排。 • 系統匯流排 (System Bus或Processor System Bus):CPU 與主機板上晶片組傳送資料的通道。依傳輸資料種類、方式的不同還可區分為以下三種匯流排:
匯流排 • 資料匯流排 (data bus):傳送指令或資料的管道, 其傳輸方向為雙向。 • 位址匯流排 (address bus):CPU 指定資料存取的位址, 其傳輸方向為單向。 • 控制匯流排 (control bus):CPU 傳送控制單元 (Control Unit) 訊號的管道, 其傳輸方向為單向。 • 擴充匯流排 (Expansion Bus):晶片組和主機板上除了 CPU 之外的各元件傳送資料的通道。
何謂晶片組 • 早期主機板必須佈滿許多電阻、電容、IC 晶片、與複雜的電子線路, 才能供應主機板所需的各項功能, 不但製造成本高, 維修時更是困難重重。不過, 拜半導體科技突飛猛進之賜, 現在只要以 2、3 顆晶片便能取代原先眾多的元件與線路, 在功能上更是有過之而無不及。 • 這幾顆晶片必須整組運用在同一塊板子上, 因此便稱為 『晶片組』。通常晶片組是由北橋(North Bridge) 與南橋 (South Bridge) 晶片所組成的。
何謂晶片組 • 所以用最簡單的一句話來解釋, 晶片組就負責整個主機板上所有裝置、元件間溝通與控制的樞紐。而北橋與南橋晶片所負責的元件如下表:
何謂晶片組 • 隨半導體及相關技術持續演進, 以及為了進一步提昇系統效能, 所以 CPU 與晶片組的架構也持續在演變, 例如近年來廠商先是將存取記憶體或其它高速裝置的匯流排移到 CPU 上, 讓CPU 不必多繞一圈即可直接存取記憶體或高速的週邊, 也簡化晶片組的設計。 • 或是將繪圖晶片 (GPU)、音效控制晶片整合在晶片組中, 降低消費者的硬體採購成本。近來廠商更進一步將顯示晶片整合至 CPU 封裝中, 有可能成為未來的主流。
快取記憶體 • CPU 利用暫存器來進行資料的存取和運算, 但暫存器和主記憶體的速度差異實在太大, 若從暫存器直接和主記憶體進行輸出或輸入, 可能造成 CPU 長時間的閒置, 只為了等待主記憶體將資料送進來。 • 為了提升系統的效能, 於是在暫存器和主記憶體間, 配置了快取記憶體 (Cache Memory)。
快取記憶體 • 快取記憶體是位於記憶體階層的第二層, 相較於主記憶體, 仍是屬於速度快、成本高的記憶體, 因此通常也只能配置容量遠少於主記憶體的容量。
快取記憶體 • 快取記憶體的容量雖然小, 但可以存放較常使用的指令或資料。由於 CPU 讀取需要的指令或資料時, 會直接到快取記憶體尋找, 若找不到需要的資料才會到主記憶體中讀取。 • 因此, 若 CPU 在快取就能找到需要的資料, 便無需再到主記憶體讀取, 而資料傳送的時間就能大幅縮短了;這樣的工作方式正是快取記憶體能夠提高效能的最主要原因。
快取記憶體 • 快取記憶體通常與 CPU 直接整合在一起, 因此我們是無法自行增減快取記憶體的大小。快取記憶體依層級 (Level) 區分為 Level1 (L1, 資料/指令快取) 與 Level2 (L2, 記憶快取) 等 2 種。 • 在高階伺服器版本的 CPU 上, 還會看到有第 3 層快取 (L3 Cache) , 其速度以 L1 快取最快, 接著依次是 L2 和 L3。通常我們較會注意到的是 L2 Cache 的大小, 目前 CPU 使用的 L2 快取已經多達 1 MB。
快取記憶體 • 理論上 Cache 愈大、CPU 的效能愈好, 也因此目前新型的 CPU 都不斷加大快取記憶體。不過, 快取記憶體一旦超過一個『額度』後, 其帶來的效益差異將變得不明顯了。目前主流 CPU 多為 1,024 KB (1 MB), 入門級產品則縮減為 512 KB。
2-2-2 CPU 的規格與技術名詞 • 在了解 CPU 的架構和一些重要的元件之後, 接著要介紹一些 CPU 常見的規格和技術名詞, 認識這些規格和技術名詞, 對於學習 CPU 是相當有幫助的。
CPU 如何執行指令 • 認識了控制單元、算術/邏輯單元及暫存器之後, 我們就可以開始來瞭解指令是如何在CPU 當中運作的。 • 當我們操作電腦而產生指令時, 指令會放在記憶體中, 接著 CPU 會讀取指令, 再由控制單位進行解譯指令的工作。指令解譯完成後, 會由控制單元或算術/邏輯單元執行指令。 • 而在上述過程中, CPU 會使用暫存器來存放處理前及處理後的資料。
CPU 如何執行指令 • 上述 CPU 執行指令的一連串過程, 就稱之為機器週期 (Machine Cycle), 亦可稱為指令週期(Instruction Cycle)。過程中, 控制單元從讀取指令到解譯完成的時間叫做指令時間 (Instruction Time), 而算術/邏輯單元從運算到運算完成並存入暫存器的時間, 叫做執行時間 (Execution Time), 如下圖所示:
CPU 如何執行指令 • 上圖為指令執行流程的示意圖, 實際上指令並不一定在算術/邏輯單元中執行, 也可能是由控制單元來執行的。
CPU 如何執行指令 • 通常我們用指令週期衡量 CPU 運算的速度。一個指令週期所需的時間, 大約幾百萬分之一秒, 也就是說一秒鐘可執行幾百萬個的指令。 • 而用來計量 CPU 運算速度的單位稱為 MIPS (Millions of Instruction Per Second, 每秒百萬個指令), 意即 CPU 一秒鐘可以執行幾百萬個的指令。MIPS 值越高, 代表 CPU 的運算速度越快。
CPU 的工作時脈 • 一般描述 CPU 的效能時, 都是以 CPU 運作的 「時脈頻率」, 也稱為 「工作時脈」來描述, 早期其單位為 MHz (每秒百萬次);如 Celeron 950、Duron 800 就是指其時脈頻率分別為 950 MHz 與 800 MHz。近來則發展到 GHz (每秒十億次) 的速度, 例如 Intel Core i3-540 具有 3.06 G 的工作時脈。
CPU 的工作時脈 • CPU 時脈的計算方式如下: • 關於內頻、外頻和倍頻係數分別說明如下: • 內頻 (Internal Clock):是 CPU 內部在工作時的頻率, 以 AMD Athlon II X2-255 的 CPU 為例, 其內頻即是 3100 MHz。