做者:Milap Neupane前端
翻譯:瘋狂的技術宅編程
原文:www.freecodecamp.org/news/how-do…前端工程化
未經容許嚴禁轉載緩存
CPU,也被稱爲微處理器,是計算機的大腦。讓咱們經過深刻了解計算機的核心,來幫助本身有效地編寫計算機程序。工具
「工具一般比機器更簡單,它通常用手就能夠操做,而機器須要被動物或蒸汽動力啓動。」性能
—— Charles Babbage優化
計算機是由電力驅動的機器,但其靈活性和可編程性有助於實現工具的簡單性。翻譯
CPU 是計算機的大腦。它執行提供給它的指令。它的主要工做是執行算術和邏輯運算並一塊兒編排指令。在深刻了解主要部分以前,咱們先來看看CPU的主要組件以及它們的做用分別是什麼:3d
控制單元 CU 是 CPU 的一部分,用來幫助協調指令的執行,它告訴 CPU 該作什麼。根據該指令,激活將 CPU 鏈接到計算機的其餘不一樣部分的電路,其中包括 ALU。控制單元是 CPU 接收處理指令的第一個組件。code
控制單元有兩種類型:
硬連線控制單元是硬件,須要更改硬件來修改它的工做方式;可編程控制單元能夠經過編程來改變其行爲。硬連線 CU 在處理指令時更快,而可編程 CU 則更靈活。
算術和邏輯單元 ALU 進行全部的算術和邏輯計算。 ALU 執行加法、減法等操做。 ALU 由執行這些操做的邏輯電路或邏輯門組成。
大多數邏輯門有兩個輸入端和一個輸出端。
下圖是半加器電路的一個例子,它接收兩個輸入並輸出結果。A 和 B 是輸入,S 是輸出,C 是進位。
CPU 的主要工做是執行提供給它的指令。一般要處理這些指令,它須要數據。一些數據是中間數據,其中一些是輸入,另外一些是輸出。這些數據以及指令存儲在如下存儲中:
寄存器是一小組能夠存儲數據的地方。寄存器是鎖存器的組合。 鎖存器也稱爲觸發器,是邏輯門的組合,它可以存儲 1 bit 信息。
鎖存器有兩根輸入線:寫入和輸入線,還有一根輸出線。咱們可使寫入線更改存儲的數據。當禁用寫入線時,輸出始終保持不變。
CPU 用寄存器來存儲輸出數據。由於它是中間數據,因此把它送到主存儲器(RAM)會很慢。該數據被髮送到由**總線(BUS)**鏈接的其餘寄存器中。寄存器能夠用來存儲指令、輸出數據、存儲地址或其它類型的數據。
RAM 是一個用優化的方式被緊湊的排列在一塊兒的寄存器的集合,以便它能夠存儲更多的數據。 RAM(隨機存取存儲器)是易失性的,當關閉電源時它的數據會丟失。
指令是計算機能夠執行的粒度級的計算。 CPU 能夠處理各類類型的指令。
指令包括:
指令經過使用匯編語言提供給計算機,也能夠由編譯器生成,或以某些高級語言的形式進行解釋。
這些指令在 CPU 內部是硬連線的。 ALU 包含算術和邏輯運算,其中控制流由 CU 管理。
在一個時鐘週期內計算機能夠執行一條指令,但現代計算機能夠執行多個指令。
計算機能夠執行的一組指令稱爲指令集。
時鐘週期
計算機的速度是由其時鐘週期決定的。它是計算機每秒時鐘週期的數量。單個時鐘週期很是小,大約是 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 須要將存儲器地址寫入地址總線,並將運算的結果寫入數據總線,還要在控制總線中啓用正確的信號。經過這種方式,數據在總線的幫助下加載到存儲器中。
CPU 還有將指令預取到其緩存的機制。據咱們所知,處理器能夠在一秒鐘內完成數百萬條指令。這意味着從 RAM 中獲取指令所花費的時間比執行它們要多。所以 CPU 緩存會預取一些指令和數據以使執行速度更快。
若是高速緩存和操做存儲器中的數據不一樣,則數據被標記爲髒位。
現代 CPU 使用指令流水線來執行指令並行化。獲取-解碼-執行。當一條指令處於解碼階段時,CPU 能夠處理另外一條指令用於獲取階段。
可是當一條指令依賴於另外一條指令時會有問題。所以處理器執行沒有依賴且按不一樣順序執行的指令。
它基本上是不一樣的 CPU,但有一些共享資源,例如緩存。
CPU 的性能由它的執行時間決定。性能 = 1 / 執行時間
假設執行一個程序須要 20ms。 CPU 的性能是 1/20 = 0.05ms 相對性能 = 執行時間1 / 執行時間2
CPU 性能考慮的因素是指令執行時間和 CPU 的時鐘速度。所以爲了提升程序的性能,咱們須要提升時鐘速度或減小程序中的指令數。處理器的速度有限,具備多核的現代計算機能夠每秒支持數百萬條指令。可是若是咱們編寫的程序有不少指令,這將會下降總體性能。
Big O 表示法根據給定的輸入肯定性能使如何受到影響的。
工程師在 CPU 中進行了大量優化使其更快,並儘量多地執行指令。在編寫任何程序時,咱們須要考慮如何減小提供給 CPU 的指令數量將可以提升計算機程序的性能。