一個例子搞懂 CPU 的工作原理
本文我們將從軟件工程師的角度去了解計算機是如何工作的,通過對計算機核心工作機制的學習,有利於理解我們平時編程時的一些行爲,動作的歷史淵源。
在學習 CPU(中央處理器)之前,我們先來簡單的瞭解一下計算機的發展歷史。
一. 計算機發展史
計算機(computer)俗稱電腦,是現代一種用於高速計算的電子計算機器,可以進行數值計算,又可以進行邏輯計算,還具有存儲記憶功能。是能夠按照程序運行,自動、高速處理海量數據的現代化智能電子設備。計算機的發展大體經歷了從一般計算工具到機械計算機到目前的電子計算機的發展歷程。
馮諾依曼體系(Von Neumann Architecture)
約翰 · 馮 · 諾依曼(John von Neumann,1903 年 12 月 28 日 - 1957 年 2 月 8 日),美籍匈牙利數學家,計算機科學家,物理學家,是 20 世紀最重要的數學家之一。馮 · 諾依曼是羅蘭大學數學博士,是現代計算機,博弈論,核武器和生化武器等領域內的科學全才之一,被後人稱爲 “現代計算機之父”、“博弈論之父”。
現代的計算機, 大多遵守 馮諾依曼體系結構。
-
CPU,即中央處理器,是一臺計算機的運算核心和控制核心。其功能主要是解釋計算機指令以及處理計算機軟件中的數據。CPU 由運算器、控制器、寄存器、高速緩存及實現它們之間聯繫的數據、控制及狀態的總線構成
-
存儲器,分爲外存和內存, 用於存儲數據 (使用二進制方式存儲)
-
輸入設備,用戶給計算機發號施令的設備
-
輸出設備,計算機個用戶彙報結果的設備
二. CPU 的基本工作過程
CPU = ALU ➕ CU ALU 算術邏輯單元(Arithmetic&logical Unit):是中央處理器 (CPU) 的執行單元,是所有中央處理器的核心組成部分,由 "And Gate"(與門) 和 "Or Gate"(或門)構成的算術邏輯單元,主要功能是進行二位元的算術運算,如加減乘(不包括整數除法)。基本上,在所有現代 CPU 體系結構中,二進制都以補碼的形式來表示。CU 控制單元(Control Unit):負責程序的流程管理。控制單元是整個 CPU 的指揮控制中心,由指令寄存器 IR(Instruction Register)、指令譯碼器 ID(Instruction Decoder) 和操作控制器 OC(Operation Controller) 三個部件組成,對協調整個電腦有序工作極爲重要。
我們用一個例子來說明一下:假設 CPU 是一個工廠,一個核心就是工廠的一個車間
那麼運算器 就是工廠裏的普工,只負責生產(運算)
而 寄存器 呢,就是一個工具人,有時需要傳遞信息(數據),有時需要搬運物資(數據)。
控制器則是車間主管,管理調劑所有普工和工具人,壓榨他們的勞動價值。
直到有一天,工廠發現一個車間(核心)效率不夠,就只能增加車間(核心)來提高整個工廠效率。
但是,漸漸的,又有新問題出現,工具人雖然效率高,但是數量不多,而隨着越來越多的原材料(數據)湧入,工具人搬不過來。這時工廠就整了一個小板車(cache),專門用來運輸、寄存工具人搬不過來的數據,而且各工廠可以共享其中一部分(intel 的 L3 cache)。
隨着車間數量(核心數目)增加到八,工廠發現有些時候出貨量挺高的(全車間都開工),但有些時候只有一兩個個車間開工,其它車間都在圍觀(調度問題)。
而且整個工廠一起開工,用電量和發熱量也急劇上升,但是各車間的效率(頻率)就是上不去,此外,還要擔心電力供給、散熱、物資(數據)運輸等各類問題。
終於,在投入了大研發後,工廠的廠房佈局設計(架構)有了大改進。
各部門之間的交通更便利了;並且,工廠也重新招聘短小精悍的工人(提升製程工藝),將以前那種牛高馬大,光喫不幹的大塊頭全部淘汰了。至此,同樣大的車間,能融入更多的工人幹活了,而且短小精悍的工人,喫的飯還少(功耗低)。
CPU 的工作過程
CPU 的基本工作是執行存儲的指令序列,即程序。程序的執行過程實際上是不斷地取出指令、分析指令、執行指令的過程。
CPU 指令的執行流程
一、取指令階段取指令(Instruction Fetch,IF)階段是將一條指令從主存中取到指令寄存器的過程。程序計數器 PC 中的數值,用來指示當前指令在主存中的位置。當一條指令被取出後,PC 中的數值將根據指令字長度而自動遞增。二、指令譯碼階段取出指令後,計算機立即進入指令譯碼(Instruction Decode,ID)階段。在指令譯碼階段,指令譯碼器按照預定的指令格式,對取回的指令進行拆分和解釋,識別區分出不同的指令類別以及各種獲取操作數的方法。三、執行指令階段在取指令和指令譯碼階段之後,接着進入執行指令(Execute,EX)階段。此階段的任務是完成指令所規定的各種操作,具體實現指令的功能。爲此,CPU 的不同部分被連接起來,以執行所需的操作。四、訪存取數階段根據指令需要,有可能要訪問主存,讀取操作數,這樣就進入了訪存取數(Memory,MEM)階段。此階段的任務是:根據指令地址碼,得到操作數在主存中的地址,並從主存中讀取該操作數用於運算。五、結果寫回階段作爲最後一個階段,結果寫回(Write Back,WB)階段把執行指令階段的運行結果數據 “寫回” 到某種存儲形式。結果數據經常被寫到 CPU 的內部寄存器中,以便被後續的指令快速地存取;在有些情況下,結果數據也可被寫入相對較慢、但較廉價且容量較大的主存。許多指令還會改變程序狀態字寄存器中標誌位的狀態,這些標誌位標識着不同的操作結果,可被用來影響程序的動作。在指令執行完畢、結果數據寫回之後,若無意外事件(如結果溢出等)發生,計算機就接着從程序計數器 PC 中取得下一條指令地址,開始新一輪的循環,下一個指令週期將順序取出下一條指令。
CPU 的中斷模式(Interrupt Mode)
在正常情況下,CPU 可以順序執行,也可以分支執行。但總歸是按照既定順序去執行。但現實中,很多時候,需要暫時中斷 CPU 的當前執行流,先讓 CPU 去做點其他的工作,再回頭來繼續原來的執行流。
CPU 硬件中提供了一種機制(中斷)讓 CPU 停下:
-
保存當前的 PC 的值到內存的某個位置
-
修改 PC 的值,讓執行其他執行流
-
其他執行流執行結束之後,通過將剛纔保存的 PC 值恢復到 PC 寄存器
-
繼續原來的執行流
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/cIPCVgXMEMKlN3vI6KvrhQ