CPU 是怎樣工做的?

做者:Milap Neupane前端

翻譯:瘋狂的技術宅編程

原文:www.freecodecamp.org/news/how-do…前端工程化

未經容許嚴禁轉載緩存

CPU 是怎樣工做的?

CPU,也被稱爲微處理器,是計算機的大腦。讓咱們經過深刻了解計算機的核心,來幫助本身有效地編寫計算機程序。工具

「工具一般比機器更簡單,它通常用手就能夠操做,而機器須要被動物或蒸汽動力啓動。」性能

—— Charles Babbage優化

計算機是由電力驅動的機器,但其靈活性和可編程性有助於實現工具的簡單性。翻譯

CPU 是計算機的大腦。它執行提供給它的指令。它的主要工做是執行算術和邏輯運算並一塊兒編排指令。在深刻了解主要部分以前,咱們先來看看CPU的主要組件以及它們的做用分別是什麼:3d

處理器的兩個主要組件

  • 控制單元 — CU(Control unit )
  • 算術和邏輯單元 — ALU(Arithmetic and logical unit)

控制單元 — CU

控制單元 CU 是 CPU 的一部分,用來幫助協調指令的執行,它告訴 CPU 該作什麼。根據該指令,激活將 CPU 鏈接到計算機的其餘不一樣部分的電路,其中包括 ALU。控制單元是 CPU 接收處理指令的第一個組件。code

控制單元有兩種類型:

  • 硬連線控制單元
  • 可微編程(微編程)控制單元

硬連線控制單元是硬件,須要更改硬件來修改它的工做方式;可編程控制單元能夠經過編程來改變其行爲。硬連線 CU 在處理指令時更快,而可編程 CU 則更靈活。

算術和邏輯單元 — ALU

算術和邏輯單元 ALU 進行全部的算術和邏輯計算。 ALU 執行加法、減法等操做。 ALU 由執行這些操做的邏輯電路或邏輯門組成。

大多數邏輯門有兩個輸入端和一個輸出端。

下圖是半加器電路的一個例子,它接收兩個輸入並輸出結果。A 和 B 是輸入,S 是輸出,C 是進位。

img

存儲 — 寄存器和內存

CPU 的主要工做是執行提供給它的指令。一般要處理這些指令,它須要數據。一些數據是中間數據,其中一些是輸入,另外一些是輸出。這些數據以及指令存儲在如下存儲中:

寄存器

寄存器是一小組能夠存儲數據的地方。寄存器是鎖存器的組合。 鎖存器也稱爲觸發器,是邏輯門的組合,它可以存儲 1 bit 信息。

鎖存器有兩根輸入線:寫入和輸入線,還有一根輸出線。咱們可使寫入線更改存儲的數據。當禁用寫入線時,輸出始終保持不變。

img

一個SR鎖存器,由一對交叉耦合的或非(NOR)組成

CPU 用寄存器來存儲輸出數據。由於它是中間數據,因此把它送到主存儲器(RAM)會很慢。該數據被髮送到由**總線(BUS)**鏈接的其餘寄存器中。寄存器能夠用來存儲指令、輸出數據、存儲地址或其它類型的數據。

內存(RAM)

RAM 是一個用優化的方式被緊湊的排列在一塊兒的寄存器的集合,以便它能夠存儲更多的數據。 RAM(隨機存取存儲器)是易失性的,當關閉電源時它的數據會丟失。

什麼是指令

指令是計算機能夠執行的粒度級的計算。 CPU 能夠處理各類類型的指令。

指令包括:

  • 算術運算,如
  • 邏輯指令,如
  • 數據指令,如移動輸入輸出加載存儲
  • 流程控制指令,例如 gotoif ... gotocallreturn
  • 通知 CPU 程序已結束的 halt 指令

指令經過使用匯編語言提供給計算機,也能夠由編譯器生成,或以某些高級語言的形式進行解釋。

這些指令在 CPU 內部是硬連線的。 ALU 包含算術和邏輯運算,其中控制流由 CU 管理。

在一個時鐘週期內計算機能夠執行一條指令,但現代計算機能夠執行多個指令。

計算機能夠執行的一組指令稱爲指令集

CPU時鐘

時鐘週期

計算機的速度是由其時鐘週期決定的。它是計算機每秒時鐘週期的數量。單個時鐘週期很是小,大約是 250 * 10^-12 秒。時鐘週期越短處理器的速度也越快。

CPU 時鐘週期以 gHz(千兆赫茲)爲單位。 1gHz 等於10⁹Hz(赫茲)。赫茲意味着每秒的週期數。因此1千兆赫表示每秒 10⁹ 個週期。

時鐘週期越高,CPU 能夠執行的指令就越多。時鐘週期 = 1 / 時鐘速率CPU時間 = 時鐘週期數/時鐘速率

這意味着能夠提升時鐘速率,經過改善 CPU 時間來優化 CPU 執行指令的速度。某些處理器提供了提升時鐘週期的能力,但因爲它是物理變化,所以可能存在使 CPU 過熱甚至被燒燬的問題。

如何執行指令

指令按順序存儲在 RAM 中。假設咱們有一個 CPU,其指令包括 OP 代碼(操做代碼)和存儲器或寄存器地址

控制單元內有兩個指令寄存器(IR),它用來加載指令的 OP 代碼和指令地址寄存器,它用來加載當前執行指令的地址。在 CPU 的內部還有其餘寄存器,用於保存存儲在指令最後 4 位地址中的值。

接下來咱們舉一個添加兩個數字的指令的例子。如下是指令和說明:

STEP 1 — LOAD_A 8:

該指令最初保存在 RAM 中,好比說<1100 1000>。前4位是操做碼,它決定了指令是什麼。該指令被提取到控制單元的 IR 中。指令被解碼爲 load_A,這意味着它須要加載地址 1000 中的數據,地址 1000 是寄存器 A 指令的最後 4 位。

STEP 2 — LOAD_B 2

與上面相似,這將存儲器地址 2(0010)中的數據加載到 CPU 寄存器 B 中.

STEP 3— ADD B A

如今下一條指令是對這兩個數字進行加法運算。在這裏 CU 告訴 ALU 執行加法操做並將結果保存回寄存器 A.

STEP 4 — STORE_A 23

這是一組很是簡單的指令,能夠對兩個數字進行加法運算。

咱們已經成功的對兩個數字進行了加法運算!

總線

CPU、寄存器、存儲器和 IO 設備之間的全部數據都經過總線進行傳輸。要將前面進行加法運算的數據加載到存儲器中, CPU 須要將存儲器地址寫入地址總線,並將運算的結果寫入數據總線,還要在控制總線中啓用正確的信號。經過這種方式,數據在總線的幫助下加載到存儲器中。

img

緩存

CPU 還有將指令預取到其緩存的機制。據咱們所知,處理器能夠在一秒鐘內完成數百萬條指令。這意味着從 RAM 中獲取指令所花費的時間比執行它們要多。所以 CPU 緩存會預取一些指令和數據以使執行速度更快。

若是高速緩存和操做存儲器中的數據不一樣,則數據被標記爲髒位

指令流水線

現代 CPU 使用指令流水線來執行指令並行化。獲取-解碼-執行。當一條指令處於解碼階段時,CPU 能夠處理另外一條指令用於獲取階段。

img

可是當一條指令依賴於另外一條指令時會有問題。所以處理器執行沒有依賴且按不一樣順序執行的指令。

多核計算機

它基本上是不一樣的 CPU,但有一些共享資源,例如緩存。

性能

CPU 的性能由它的執行時間決定。性能 = 1 / 執行時間

假設執行一個程序須要 20ms。 CPU 的性能是 1/20 = 0.05ms 相對性能 = 執行時間1 / 執行時間2

CPU 性能考慮的因素是指令執行時間和 CPU 的時鐘速度。所以爲了提升程序的性能,咱們須要提升時鐘速度或減小程序中的指令數。處理器的速度有限,具備多核的現代計算機能夠每秒支持數百萬條指令。可是若是咱們編寫的程序有不少指令,這將會下降總體性能。

Big O 表示法根據給定的輸入肯定性能使如何受到影響的。

工程師在 CPU 中進行了大量優化使其更快,並儘量多地執行指令。在編寫任何程序時,咱們須要考慮如何減小提供給 CPU 的指令數量將可以提升計算機程序的性能。

歡迎關注前端公衆號:前端先鋒,領取前端工程化實用工具包。

相關文章
相關標籤/搜索