2008年4月22日 星期二

CPU是甚麼?

CPU是甚麼?



CPU是Central Processing Unit 「中央處理器」之簡稱,它是使整部電腦能夠運作的最核心、最重要的元件。 其作用就是當電腦系統開始運作時,CPU從記憶體內,讀取操作它的軟體的指令與資料,透過ALU運算出結果後存回記憶體,同時由主機板,與外界的I/O週邊溝通,達到資料處理的目的。





CPU為控制整部電腦運作的中心樞紐,其內部包括控制單元、算術及邏輯單元、暫存器或記憶單元。



算術及邏輯運算單元(ALU):加、減、乘、除及比較、選擇、判斷等運算。

控制單元(CU):翻譯程式中的指令的解碼功能及協調控制各部門依指令執行使電腦自動化處理資料。

記憶單元:儲存目前正要被處理運算的程式或資料,容量以KB為單位。

輸入單元(Input,I/P):接受輸入的資料或程式,以供進一步處理。

如:鍵盤、滑鼠等。

輸出單元(Output,O/P):負責將CPU處理結果輸出,輸出於各種輸出設備上,如:印表機、磁 碟機等。

暫存器(Register):暫時儲存資料,如用來儲存運算的累積器。其功能與記憶體相似 。



CPU內部較重要的暫存器:

1.程式計數器PC (Program Counter):負責儲存CPU下一次所要執行的

記憶體位址。

2.指令暫存器IR (Instruction Register):負責儲存CPU所要執行的指

令。

3.堆疊指標器SP (Stack Pointer):負責儲存CPU目前使用的堆疊位址。

4.位址暫存器MAR:負責儲存CPU所要存取記憶體資料的位址。



 



微電腦的基本結構

1.位址匯流排Address Bus:負責傳送CPU所要存取資料的位址,它可以決定CPU所能處理的記憶體容量,N條位址線可以擁有2的N次方的記憶空間,而其位址為0至2的N次方來減1。

2.資料匯流排Data Bus:負責傳送CPU所要存取的資料,其線數的多少代表CPU的字組Word,亦即CPU一次所能存取資料的基本單位,常稱N位元CPU亦就是此CPU有N條資料線。

3.控制匯流排Control Bus:負責傳送CPU所發出的控制訊號。



 



衡量CPU的性能有下列幾項

1.內部運算架構(Architexture)

例如說這顆CPU的內部設計,是scalar,還是超純量(superscalar)的設計;有無內建快取記憶體,指令、資料與記憶體的讀寫設計等,都會影響整個CPU的運作效能。

2.位元處理能力

例如8位元、16位元的CPU。通常這跟CPU內部暫存器、資料匯流排或指令寬度有關。就Intel的定義,8086/286的通用暫存器(General Purpose Registers)GPR是16位元,所以它們算是16位元的CPU;386/486以至於Pentium、Pentium Pro,也是32位元的CPU,因為CPU核心的GPR只有32位元。

3.記憶體容量

我們說這顆CPU的記憶體控制範圍有多少MB,像386/486等32位元的CPU,其最大記憶體容量有2的32次方等於4096MB=4GB。

4.工作時脈(clock)

每個CPU工作時脈越高,執行指令的單位時間(cycle)越小,速度就越快。例如說Intel 486DX-33,是以33MHz(=33,000,000Hz/每秒鐘)為工作時脈,它其與同類型的486DX-25(24MHZ工作時脈)相比較,前者速度就比後者快上約33%。

5.IC製程

目前有BiCMOS與CMOS兩類。一般是以若依線路精密度來分,是以微米(micron,=10的負6次方M, 也就是百萬分之一公尺)。目前的CPU製程,已經進化到0.25um,將來還會拓展到0.18um。



CPU是電腦裡面相當重要的元件,幾乎大大小小的工作,都要靠CPU來打理;舉凡運算、控制、邏輯處理等,無一不經過CPU。因此選用的CPU速度越快,電腦的整體效率自然月高;這也就是為什麼同等級的CPU速度越快,價格月高的主要因素



CPU的歷史



1978 年 , 美 國 Intel 公 司 首 次 生 產 出 16 位 的 微 處 理 器 , 並 命 名 為 i8086。 這 款 產 品 使 用 的 指 令 集 人 們 稱 之 為 x86 指 令 集 。 以 後 , Intel 陸 續 生 產 出 更 先 進 和 更 快 速 的 新 型 CPU, 這 些 新 型 的 CPU 都 兼 容 原 來 的 x86 指 令 集 , 被 稱 為 「 x86 系 列 CPU」 。



從1981年個人電腦(Personal Computer)興起至今,已經有十六、七

年歷史了,而PC的CPU也經過數個世代的演進:



第一代 8086、8088、AT/XT

第二代 80286

第三代 80386

第四代 80486

第五代 Pentium、Pentium MMX、AMD K5/K6、Cyrix 6x86 MX

第六代 Pentium Pro、Pentium Ⅱ、Celeron、AMD K6-2、Cyrix M2、IDTWinChip/WinChip-2

第七代 Intel Merced、AMD K7、IDT WinChip-3

------Intel英特爾

------AMD 超微

------Cyrix新瑞仕

------IDT 艾迪特

------RISE瑞 思

CPU的認識與剖析

原作者:陳文欽

原著日:1995.07

--------------------------------------------------------------------------------



近二十年電子半導體工業可說是蓬勃發展, 而且拜IC製程與精密度的提昇, 每隔數年就有新的元件推出。其中更令人刮目相看的, 就是CPU研發技術的大躍進,以及這個市場的無窮潛力。像之前的CPU市場,光是個人電腦所採用的486、Pentium等CPU 晶片, 每年就有數千萬顆, 價值超過百億美金。在1995年6月的台北國際電腦展中, 共有五家廠商推出二十幾款各形式的CPU,來角逐這個市場。到底CPU它的重要性何在呢? 新的CPU對電腦系統的效能提昇的原理是什麼?在今日多媒體、網路連接與通訊無所不在的資訊世界,要有多快速的CPU 或微處理機, 才能擔當此重責大任呢?這是一個值得深思的問題。

CPU 的定義與重要性

在傳統電腦教科書上, CPU 是Central Processing Unit 中央處理單元的簡稱。它是由控制單元(CU)、算術與邏輯運算單元(ALU) 與記憶體單元(MU)所組成。一個電腦系統運作時, CPU 負責從記憶體內讀取軟體的指令與資料, 並且透過內部運算出結果後, 儲存到記憶體。它也負責與I/O 週邊裝置溝通、協調。



┌────────────────┐

│ ┌--------┼--┐

│┌─────┐| ┌─────┐│ |

││ Control │┘ │Arithmetic││ |

││ Unit │ │Logic Unit││ |

││ 控制單元 │ │算術及邏輯││ |

│└─────┘ │ 運算單元 ││ |

┌--┼-┘ └─────┘│ |

↓  │ ↖↘ ↗↙ │ ↓

┌──┐ │ ┌──────┐ │ ┌──┐

│輸入│ │ │Memory Unit │ │ │輸出│

│單元│→│ │ 記憶單元 │ │→│單元│

└──┘ │ └──────┘ │ └──┘

│ Central Processing Unit, CPU │

└────────────────┘

圖1 由CU、ALU及MU所組成的中央處理單元

在以前中、大型電腦時期, 它們電腦的CPU , 通常是一塊由數十、數百個IC所組 成的電路版, 後來有廠商將這個部份, 運用VLSI大型積體電路的技術, 濃縮成一顆IC 晶片。也有人稱這種CPU 晶片為微處理機(MicroProcessor), 微處理機的應用範圍就 廣多了, 事實上除了個人電腦之外, 在一般自動化控制的領域, 都是微處理機的天下 。我們可以將要控制的程序寫到ROM 裡面, 然後借助微處理機來運作。

CPU如何運作溝通



CPU 晶片透過接腳, 傳輸資料並接受外界的訊號輸入。每種CPU 因為設計的關係 , 接腳數與每根接腳的定義都不太相同, 不過『接腳數越多的CPU 通常設計上比較複 雜』。而CPU 內的時間單位是機器週期(Machine Cycle) , Cycle 大小是由石英振盪 器所輸入的工作頻率來決定。例如說486DX-33, 是以33Mhz(=33,000,000Hz/) 為工作頻率, 一個cycle=1/33,000,000=30×10-9 sec=30ns。傳統CPU , 執行一個指令 都需要數個cycles, 遇到複雜的可能就幾十個了。通常同類型CPU 中, 工作頻率較高 的, 執行速度顯然比較快。例如說486DX-33, 其運作頻率是33Mhz , 就比486DX-25, 25Mhz 的 運 作 頻 率下的執行速度快上33% 。



關於匯流排(Bus)的演進

ISA (Industry Standard Architure )。它是指AT時代所定義的8/16位元AT-Bus匯 流排, 因為IBM PC AT 採開放設計的全球風行, AT-bus成為工業標準。ISA Bus 最大工作頻率為8.33Mhz 一次可傳輸16位元資料, 最大傳輸資料流量為8.33Mhz *2bytes=16.66MBytes/sec 。

MCA (Micro Channel Architure) 微通道架構。它是IBM 發表新一代PS/2個人電腦 系統時, 新推出的32位元匯流排標準。資料傳輸量可達40MBytes/Sec。不過因為 MCA Bus 與傳統ISA 無法相容, IBM 推廣時又採高權利金政策, 導致MCA 無法成為有利的產業標準, 最後被市場淘汰。

EISA (Extended Industry Standard Architure)。延伸產業匯流排。由COMPAQ 、HP等九大廠商聯合制定, 以原有ISA Bus 做改良擴充。其運作頻率仍為8.33Mh , 但是可以傳輸32位元資料, 傳輸量為33Mbytes/sec, 並且能與ISA 擴充介面卡 完全相容。早期EISA挾其頻寬倍增與相容的優勢而風行一時, 至今仍有伺服器採 用;但自從便宜且傳輸頻寬更廣的區域匯流排(Local Bus) 出現之後, EISA Bus 也逐漸失寵。



Local Bus 區域匯流排。自386、486時代, 電腦廠商運用CPU 本身的匯流排直接 連接到各週邊裝置, 使得需要高速週邊裝置能與CPU 同速同步運轉。目前區域匯 流排最少能以33Mhz 的速度傳輸32位元資料。早期Local Bus 毫無標準可言, 後 來有兩種規格被提出:



VESA Local BUS, 簡稱V-L Bus 。它是由視訊電子產業聯盟(VESA)所制定的。 它以傳統ISA 擴充槽後, 加一小段擴充槽, 可與傳統ISA 擴充卡相容。專屬的 VL-Bus介面卡安裝時, 能以33.3Mhz 頻率傳輸32位元資料, 最大傳輸速度是 33.3*4=133Mbtyes/sec。有不少視窗加速卡採以V-L Bus 規格設計, 如此可以在 486 以上電腦上發揮應有的水準。



PCI(Peripheral Component Interconnect) Bus , 它是由Intel所制定的新一 代匯流排標準。早期PCI 的績效與VL-Bus相差不多, 新出爐的PCI 2.0 , 針對 Pentium 64位元定址, 並具備3.3V低電壓與即插即用(PnP) 的功能。PCI 已經成 為現今486、Pentium與POWER PC匯流排的標準。







CPU 要如何與外界眾多許多I/O 裝置溝通呢? 它是透過一種叫匯流排(Bus) 來傳 輸資料。匯流排可說是CPU 、記憶體與I/O 裝置的訊號傳遞的共同通道。一次只能有 一個裝置去使用匯流排, 所以當同時有兩個以上的裝置使用時, 必須由主機板上的 I/O 控制電路加以協調, 先將優先權較高的裝置使用; 等該裝置使用完畢後, 才輪到 其他裝置使用。

┌────┐ ┌────┐┌───┐

│ │ │ ││ I/O │

│ ROM │ │ RAM ││ 週邊 │

│ │ │ ││ 裝置 │

└┬──┬┘ └┬──┬┘└┬─┬┘

↑ │ ↑ │ ↑ │

│ ↓ │ ↓ │ ↓

┌────────────────┐

│ I/O 控制電路或晶片組 │

└──────┬──┬──────┘

↑ │

┌───┐ │ ↓

│ │←────────┴──┴─────────

│ CPU │ 匯流排 (Bus)

│ │─────────────────────→

└───┘

圖2 CPU透過匯流排(BUS)來傳輸資料

匯流排的設計好壞, 往往影響整個電腦系統的實際運作性能。早期像AT、386 時 代, 採用的是所謂ISA Bus , 其最大傳輸能力才16.6MBytes/sec, 對於386、486以上 的CPU 來說, 僅發揮不到數分之一的效能。所以才會有EISA、VL-Bus與PCI bus 等新 式匯流排的出現, 為了就是解決傳統匯流排頻寬不足所產生的效能瓶頸。

CPU 的內部暫存器與浮點運算



讓我們再深入了解一下CPU 內部的結構。CPU 利用暫存器(Register)來指示程式 執行流程, 追蹤並記錄程式的運算結果。一個典型的CPU , 最少有下列暫存器: 累加器(Accumulator) , 它負責讀取運算元做運算, 並且將結果轉移到其它暫存器或記憶體內; 程式計數器(Program Counter, 或指令指位器Instruction Pointer,IP) , 用來指示下一個要擷取的指令位址; 堆疊暫存器(Stack) 則用來記錄呼叫副程式時的返回位址(Return Address); 而旗標暫存器(Flag)記錄著目前運算的結果, 例如說進位、借位、溢位、大小於或等於等; 而索引暫存器(Index Register)則負責存取某塊記憶體加減一個索引值後的資料, 可作為表格轉換或處理陣列之用。



不同的CPU , 其資料/指令格式、解碼與運作的方式不太相同, 暫存器數量與功 能也會有所不同。也正因為如此, 一個在A CPU 發展的軟體, 沒辦法在B CPU 上面直 接執行, 除非針對B CPU 加以重新編譯(Compile) 或改寫。



以我們個人電腦所採用的Intel 80X86 CPU 來說, 最主要的有14組暫存器 (圖3) , 寬度分別從8、16 到32位元不等。而暫存器的操作寬度, 更是傳統業界對CPU 運 算與定址能力的判斷。例如說一個16位元的CPU , 其暫存器寬度為16位元, 如此一道 指令可以載入16位元的資料; 另外資料匯流排寬度也被列作參考, 例如Pentium 有64 位元的資料匯流排寬度, 一次可以讀取64位元 (八個Bytes)的資料。



傳統上CPU 只能處理整數, 另外有一種專門處理浮點數值運算的CPU , 一般稱為 FPU(Floating Processing Unit) , FPU 設計來處理一些等含小數的實數、與數學函 數。由於FPU 以硬體線路來執行繁雜的浮點運算, 速度比軟體模擬的還快40~100 倍 。這類FPU 常常與傳統處理整數的CPU 相互搭配, 以加速軟體的浮點運算速度。近代 的CPU , 則多半己經將浮點運算的功能整合進去了。例如486DX、Pentium、P6等。



CPU 的位址線與定址能力



CPU 的位址線數目, 決定它選取記憶體的能力。CPU 定址能力, 可以透過CPU 的 位址線計算出來。像8086/8088 有20條位址線, 所以能選取220 =1,048,576Bytes =1MB的記憶體。



┌─────┬──────┬──────┐

│ │位址線數目 │ 定址空間 │

├─────┼──────┼──────┤

│8086/88 │ 20 │1MB=1024K │

│80286 │ 24 │16MB=16,384K│

│80386SX │ 24 │16MB=16,384K│

│80386DX │ 32 │4GB=4096MB │

│80486SX/DX│ 32 │4GB=4096MB │

│Pentium │ 32 │4GB=4096MB │

└─────┴──────┴──────┘

圖3 Intel X86 家族CPU 與定址空間的演進

8086/88 由區段暫存器的16位元的區段值(Segment) , 把它乘上16之後再加上16 位元的偏移值, 以產生20位元的記憶體位址。而286 以上的CPU , 還增加了一種工作 模式, 稱之為保護模式(Protected Mode), 它是由區段暫存器的值, 從一塊記憶體敘 述說明表查詢其基底位址, 之後再加上偏移位址形成有效的記憶體位址。詳情可在後面文章加以探討。

CPU 的指令集設計與發展



CPU 所認得的指令, 一般稱為機器語言。而最適合開發機器語言的語言, 是以英 文字縮寫, 對應於一個機器指令動作的『組合語言(Assembly Language) 』。通常一 顆新CPU 的推出, 其廠商最少會準備該CPU 的組譯器(Assembler) 或C 語言等發展工 具, 以吸引買主。當然電腦語言有很多種, 著名的有BASIC、PASCAL、COBOL等, 無論你用哪種語言開發軟體, 最後都是要透過編譯器(Compiler), 將原始程式碼編譯成機器碼之後, 才能在CPU 上面執行。



最早期的CPU 的指令簡單, 除了暫存器、記憶體之間的儲存、搬移, 旗號的判斷 與程序移轉之外, 其他就只有AND、OR、XOR、位元移位與加減法而已。像早期APPLE 的6502CPU , 要做乘除法得呼叫副程式, 用累加或累減的方式來達成。隨著CPU 的晶 體密集度越來越高, 指令也越來越多! 在8086/88 時代, 已經有乘法與除法指令, 對 於程式撰寫方便多了。而X86 CPU 的字串處理指令, 可以讓程式設計師很輕易的處理 、切割與搬移字串, 尤其擅長於文書處理(Word Processing) 。



但是CPU 指令越加越多, 但是執行效率是否有跟著提昇呢? 一般CPU 為了處理較 複雜的指令, 其內部有顆ROM , 儲存著微指令(Microcode) , 當CPU 接收指令時, 將較長且複雜的指令解碼, 以好幾個微指令去執行。所以有些指令可能幾個cycles能 完成, 有些就要十幾個cycles才能執行完畢。這種傳統複雜指令的CPU 也就是我們所 稱的CISC(Complex Instuction Set Computer) 架構, 例如我們個人電腦的80X86 家 族, 指令有上百個, 運算格式以及定址法也是五花八門。



RISC (Reduced Instruction Set Computer) 架構這幾年大行其道, 而且逐漸威 脅到傳統CISC電腦的發展。它的原理很簡單, 一般軟體大部分時間內, 只會使用到約 15%~25%的CPU 機器指令 (甚至更少) , 如果我們挑選一些最常被使用的指令, 把一 些不常用或罕用的指令砍掉, 如此CPU 解碼與執行單元可以簡單而快速, 每個指令碼 固定, 以同樣的電晶體密集度, 還可以加快這些指令的執行速度, 近逼於晶片上邏輯 電路的極限。



RISC CPU設計的標準, 是在一個cycle 內執行一道指令以上, RISC電腦的軟體, 必須借重Compiler的功力, 將軟體編碼成一系列簡單而密集的快速指令, 讓CPU 夠密 集執行。同一段原始碼, 在RISC編譯時, 其機器碼總長度較長, 執行檔長度平均比CISC多了30~~50% , 但效率可是提昇了好幾倍。舉例來說一般軟體中的乘、除法指令都很少使用, 如果CPU 將這些指令去除, 以軟體副程式來取代, 雖然程式碼會增加一些, 但 是每個指令執行起來都特別快, 頂多執行到乘除法時或罕用指令時, 呼叫compiler所提供的副程式庫, 在執行時多花了點時間罷了。



目前RISC架構設計的電腦, 在執行效率上的確令人激賞。這也是RISC高速電 腦的工作站、伺服器等級的電腦, 能在廣大的x86 CISC以及Mac 680X0 的市場之外, 能有其立足之處。而以傳統CISC設計的CPU , 也逐漸也採用到一個RISC的觀念。例如 像NexGen Nx586、AMD 的K5甚至Intel 的P6, CPU 內部採取RISC架構, 將傳統X86 指 令解碼, 切割成一道微小指令後再直接處理。



CPU 的績效評比



要如何判斷一個CPU 跑的多快呢? 前面提過clock speed 工作時脈算是一種, 不 過那僅適合於同一型、同一代的CPU 比較。像486DX-33與386DX-40相比, 雖然前者才 33 Mhz, 但是執行速度就是比後者快, 因為兩者指令的執行時間不太相同。



另外一個被提出來, 稱為每秒百萬指令(Million Instruction Per Second,MIPS ) , 例如說某顆CPU 是Mips , 表示它每秒可執行八百萬的機器指令。這種測試方式 曾流行一時。但是CPU 每個機器指令的執行時間不同, 所需要的週期數有多有少, 遇 到像RISC這種架構的CPU , 在比較上更是居於不利地位。



現在較且具公信力的測試, 是由System Performance Evaluation Corp. 所定義的SPEC標準。它由IBM、DEC、Intel、Sun等廠商共同組成的一家非營利公司, 以一連串固定且公開的程式碼, 針對不同廠商的機器, 做跨平臺的效能評估。整數部份的評估單位是SPECint92 , 浮點部份評估單位是SPECfp92。以Pentium-133 來說, 其SPECint92 為155 , SPECfp92為116 。

沒有留言:

張貼留言