CPU的奧秘

CPU的奧秘

CPU常被人們形象地比喻成計算機的大腦,無論是大塊頭的臺式機或是小巧玲瓏的筆記本電腦,都是由一塊小小的CPU芯片在控制。本文將追溯CPU的起源和發展,並一步步揭開其內部的奧秘。

文|羅輯

  CPU的發展歷史

  CPU是Central Processing Unit(中央處理器)的簡稱,它負責執行指令和計算,控制著計算機的所有組件。CPU從無到有,從弱小到強大,經歷了漫長髮展過程,其間發生了無數的故事,這裡我們主要列出CPU發展史上一些重要的里程碑事件(為行文方便,本文中“CPU”和“處理器”同義)。

  1823年,瑞典化學家貝採尼烏斯發現了硅。硅的英文名為Silicon,化學符號為Si。硅的發現對現代計算機的發展影響巨大,它是用於生產晶體管的半導體材料,而晶體管則是CPU的關鍵構建塊。硅晶體管使強大且節能的CPU的開發成為可能,從而實現了現代計算。一般人印象中的CPU是一個帶有許多針腳的金屬塊,實際上這個金屬塊只不過是CPU的散熱器和保護殼(IHS,Integrated Heat Spreader),真正的CPU芯片只是中間夾層中的那一小塊五彩斑斕的硅片(圖1)。

  圖1 英特爾Core 2 Duo透視圖,上層是HIS保護殼,下層是PCB板,夾在中間的是硅芯片

  1903年,尼古拉·特斯拉為“AND Gates(與門)”申請了專利。門是計算機和其他電子設備中使用的電氣邏輯電路。與門是邏輯門之一,它接受兩個或多個輸入,並且僅在所有輸入都為真時才產生輸出。與門是計算機中所有邏輯運算的基礎。正是邏輯門的實現使得晶體管的發明成為可能(圖2)。

  圖2 七種基本邏輯門符號及其真值計算

  1947年,貝爾實驗室的科學家約翰·巴丁、沃爾特·布拉頓和威廉·肖克利發明了第一個晶體管,並於1948年獲得專利。這項發明徹底改變了現代計算,併為更小、更強大的計算機鋪平了道路。如今,晶體管幾乎用於所有電子設備,它是現代CPU實現高性能和低功耗的保證。邏輯門和晶體管從軟硬兩個方向促進了集成電路(IC)的發展,用於製造複雜的數字電路。1958年,第一個實用集成電路由羅伯特·諾伊斯和傑克·基爾比在硅片上實現。1960年,IBM於紐約建立了第一個用於大規模生產晶體管的工廠。

  圖3 世界上第一塊實用硅集成電路

  1968年,羅伯特·諾伊斯、戈登·摩爾和安迪·格魯夫共同創建英特爾公司。1971年,英特爾發佈了一款4位的CPU——即4004處理器,它是一個單片CPU,在一塊小型芯片內集成了2250個晶體管,每次能夠處理4位數據,每秒運算6萬次。英特爾4004也是世界上第一個通用微處理器(圖4、圖5)。其後,英特爾接連在1972年推出8008處理器,1974年推出8080處理器。1978年,英特爾推出iAPX86處理器,也即8086,這是英特爾的第一款商用16位CPU,正式開啟了x86處理器時代。1979年期間,英特爾和摩托羅拉曾有過微處理器之戰,摩托羅拉68000對決英特爾8086(及其後的80286),前者應用於Apple Macintosh和Amiga計算機中,一度非常流行。

  圖4 英特爾4004處理器外觀

  圖5 英特爾4004處理器集成了2250個晶體管

  1991年AMD推出AM386微處理器家族,1995年Cyrix發佈Cx5x86處理器,都對英特爾造成很大沖擊。AMD公司的創建僅比英特爾晚一年,一直是英特爾強有力的競爭對手。Cyrix也和英特爾因為專利侵權的問題打了多年的官司。英特爾在1993年3月正式發佈奔騰處理器(圖6,又稱P5或i586,1992年已完成),作為對競爭對手們的一種反擊。奔騰處理器是英特爾最成功和最知名的產品之一,兼容該公司之前的x86系列處理器,在臺式機和筆記本電腦市場都取得了極大成功。

  圖6 英特爾奔騰處理器

  1998年,英特爾推出賽揚系列處理器,這是英特爾面向低成本個人電腦的品牌,主要為了應對Cyrix 6×86、AMD K6和IDT Winchip等競爭產品,搶佔低端市場。賽揚雖然不如英特爾的高端產品強大,但對於那些不需要英特爾高端處理器性能的人來說,它們是一個負擔得起的選擇。

  圖7 英特爾賽揚初代處理器

  2005年,AMD發佈了其首款雙核處理器Athlon 64 X2,該處理器基於AMD的K8架構,主要是為了與英特爾的奔騰D處理器競爭,並開啟了桌面處理器全面向64位過渡的先河。很快英特爾進行了反擊,於2006年發佈其64位的桌面雙核處理器Core 2 Duo,並正式取代奔騰D成為英特爾處理器新的產品標準。

  圖8 英特爾Core 2 Duo處理器

  2008年英特爾發佈Core i7,2009年發佈Core i5,2010年推出作為Core i5精簡版的Core i3,至此英特爾Core i系列產品線完成高、中、低三級市場的覆蓋,並每隔一年推出一代更新,到2022年已完成13代更新。需要注意的是,一般來說Core i3不如Core i5, Core i5不如Core i7,這只是就同一代產品比較而言。不同代的產品,比如初代的Core i7和第12代的Core i3相比,後者比前者不知要強出多少倍。另外,Core i系列中,i9芯片是從2017年才開始加入的。

  科技在發展,當我們閱讀此文時,CPU的歷史仍在繼續書寫。

  圖9 英特爾2022年新品Core i9-13900K處理器

  CPU的內部結構

  CPU芯片上集成了大規模複雜的電路,可以把它看作是一個由很多小塊組成的複雜機器,這些小塊從功能的角度大致可以劃分成三大部分:算術邏輯單元、存儲單元和控制單元(圖10)。

  圖10 現代計算機系統概念圖

  算術邏輯單元(ALU,Arithmetic Logic Unit)

  CPU的主要功能就是運算,這正是通過算術邏輯單元ALU實現的。ALU電路內部由算術單元(AU)和邏輯單元(LU)組合而成,可對兩個輸入值(操作數)執行算術或邏輯運算併產生一個輸出值(圖11)。算術單元負責對二進制數執行加減乘除等數學運算,而邏輯單元執行與、或、非等邏輯運算,以及對兩個操作數進行比較等。另外ALU還具備位移功能,將輸入的操作數向左或向右移動從而得到新的操作數。

  不只是CPU,其他如圖形處理器GPU等幾乎所有的微處理器中,ALU都是最基本的組件。

  圖11 ALU操作示意圖

  存儲單元(MU,Memory Unit)

  算術邏輯單元ALU在執行計算的時候,需要讀取存儲在寄存器中的操作數,計算結果則保存到累加器中(也是一種寄存器),ALU執行的命令則來自指令寄存器。比如,當將兩個數字相加時,一個數字放在A寄存器中,另一個放在B寄存器中,ALU執行加法後將結果放入累加器中。如果是邏輯操作,則把要比較的數據放進輸入寄存器中,比較的結果1或0放入累加器中。無論是邏輯運算還是算術運算,累加器內容都會被放入緩存中(圖12)。

  圖12 CPU簡化概念圖

  上述的寄存器(Register)和緩存(Cache)即CPU內部的存儲單元,用於存儲供CPU訪問的數據和指令,以及存儲任何計算或任務的中間結果。處理的最終結果也會被保存到存儲單元中,然後將這些結果發佈到輸出設備提供給用戶。不過CPU內部存儲單元的容量極為有限,大量數據只能保存在CPU之外的RAM(隨機存取存儲器)芯片中,就是我們平常所說的內存,也被稱之為主存。存儲器單元負責從主存中檢索並臨時存儲數據,負責管理CPU和主存之間的數據流。RAM芯片在關機斷電後數據會清零,所以就又有了硬盤、軟盤等其他的存儲設備,稱之為輔存(圖13)。

  圖13 相對而言存儲設備的速度和容量成反比,寄存器最快容量最小,反之輔存最慢容量最大

  控制單元(CU,Control Unit)

  控制單元負責從主存中檢索和選取指令,對其進行解碼,然後發出適當的控制信號,指導計算機的其他組件(如算術邏輯單元、存儲單元、輸入/輸出設備等)執行所需的操作。控制單元自身並不執行程序指令,它只是輸出信號指示系統的其他部分如何做。如果說CPU是計算機的大腦,那麼控制單元就是CPU的大腦。

  總線(Bus)

  CPU內部的算術邏輯單元、存儲單元、控制單元等,依靠總線連接為一體,而CPU與外部組件的通信與控制同樣靠總線實現。簡單來說,計算機總線就是連接計算機系統中各種硬件組件的電線,其物理表現形式可以是線纜(如硬盤線)也可以是PCB板上的印刷線路。

  作為計算機系統中的通信鏈路,計算機總線向系統中的各種硬件組件發送數據、地址、控制信號和電源。根據位置、用途和功能的不同,計算機總線可以有很多分類。比如連接處理器、RAM內存、顯卡、硬盤等內部設備的稱之為內部總線(一般與CPU直接相連或通過北橋芯片相連),連接顯示器、鍵盤、鼠標、打印機等外部設備的稱之為外部總線(一般經由南橋芯片相連)。另外依據總線所連接的組件類型,可以分為系統總線、擴展總線、輸入/輸出總線等。

  更通用的一種分類,是依據總線傳輸的數據類型進行劃分,可以分為數據總線、地址總線、控制總線等三大類。在CPU內部,算術邏輯單元與存儲單元之間主要以數據總線相連,傳輸數據;控制單元則通過控制總線發送信號指示CPU各組件進行相應的操作(圖14、圖15)。

  圖14 計算機總線系統示意圖

  圖15 英特爾8085微處理器總線結構

  CPU的工作流程

  我們用C++、Java、Python等編程語言編譯好的程序文件(機器碼),保存在硬盤等存儲介質上,當操作系統運行這些程序的時候,首先會將它們加載到系統內存中。程序文件實際就是一系列的指令,CPU從內存中檢索並讀取程序指令,然後通過控制單元對程序指令進行譯碼操作,使其轉化為CPU能夠“讀懂”的指令格式。接下來控制單元向算術邏輯單元ALU發送信號,ALU即依據指令讀取操作數並進行相應計算,其計算結果經由CPU內的存儲單元返回內存中。在以上過程中,CPU執行了四個重要步驟: 

1、取指令階段(Instruction Fetch)

2、譯碼階段(Instruction Decode)

3、執行計算階段(Instruction Execute)

4、回寫內存階段(Writeback)

  以上四個步驟是完整執行一條指令的過程,稱之為指令週期(Instruction Cycle)。這一過程循環往復地進行,直到程序結束(圖16)。

  圖16 指令週期

  說起來簡單,實際過程卻很複雜。單以取指令這一步驟來說,它本身就又由多個微操作組成: 

1、程序計數器初始化指針指向內存地址;

2、內存地址被裝載到CPU的地址寄存器中;

3、CPU接下來檢索該內存地址中的數據,並將其載入數據寄存器中;

4、如果數據包中包含的是指令,將其裝載到指令寄存器中;

5、程序計數器遞增加1,指向下一個內存地址;

6、指令寄存器中的指令被傳入CPU的控制單元中;

7、以上步驟循環往復地進行。

  接下來的譯碼、執行等階段,也都有著各自複雜的操作,限於篇幅就不詳細介紹了。CF

原文刊登於2022 年 12月1 日出版《電腦愛好者》第 23 期

END

更多精彩,敬請期待……

Scroll to Top