1. 程式人生 > 其它 >計算機底層運轉機制:多核、快取、CPU、CU、ALU、Cache

計算機底層運轉機制:多核、快取、CPU、CU、ALU、Cache

現代CPU
《編譯型語言與解釋型語言如何在計算機底層執行》中提到,計算機依靠編譯器將原始碼(編譯型程式設計程式碼:C之類)編譯成機器碼執行,準確說,就是用CPU執行。

馮 諾伊曼架構

 

 


馮⋅ \cdot⋅諾伊曼(1945)提出當前計算機的主流架構,包含以下三大部分:

CPU(Central Processing Unit):包含控制單元(Control Unit)、邏輯運算單元(Arithmetic/Logic Unit);
記憶體:儲存指令、資料;
輸入輸出裝置;
概念解析
CPU(Central Processing Unit)
CPU,中央處理器,負責執行使用者和作業系統下發的指令。此處指令,是以01二進位制形式組織的機器碼,在物理底層,01用來控制高低電位。

指令集
除了加減指令,CPU的電路還要實現很多其他指令:記憶體讀取、邏輯判斷。

指令控制物理電位,不同電路廠家電路設計不同,則電路上所能進行的二進位制碼就不同。

某類CPU能支援一種指令集(instruction set architechture),指令集相當於一種設計圖紙,規定了一種CPU架構實現哪些指令。

常見的指令集有:

x86:常見
ARM:常見
MIPS
SPARC:龍芯
Power:IBM小型機
有了指令集:

硬體開發人員只需要關心如何設計電路;
軟體開發人員只關心如何使用01機器碼實現軟體功能;
單核CPU的架構
前面圖片展示了馮⋅ \cdot⋅諾伊曼計算機架構,下圖展示了一個單核CPU的架構:

 

 

 

其中包含:

Control Unit(CU):控制單元,協調管理;

Arithmetic Logic Unit(ALU):數學邏輯單元,接受控制單元CU的命令,負責進行加減乘、與或非運算。

Register:ALU是負責計算邏輯,具體計算的資料是存放在暫存器(Register,幾KB大小)中,暫存器以極高的速度(<1納秒)與CU和ALU互動。

暫存器中的資料是臨時寄存的,這些資料和指令會被ALU和CU拿來立即進行計算,如果暫存器中沒有CPU想要的資料,CPU會去記憶體或硬碟中讀取。

BUS:匯流排,如果暫存器中沒有CPU需要的資料,CPU會去記憶體或硬碟中讀取,這個讀取記憶體或其他裝置資料的過程,是通過Bus(匯流排)來實現,計算機中有多條匯流排。

舉例說明計算過程:

對於一個加法運算,計算機需要知道兩個問題:

本次所執行的是哪個指令;
該指令的執行物件是什麼;
具體過程:

控制單元CU先取指令(Fetch);
指令譯碼(Decode)解析出要執行什麼指令;
確認指令是對哪些資料(運算元Operand)進行操作;
將運算元從主存載入到暫存器中;
ALU執行指令(Execute);
結果寫回Store;
儲存金字塔
計算機的速度瓶頸,已經變成了超高速的CPU運算速度(納秒級別)與落後的資料讀取速度(百納秒)之間的矛盾。

CPU計算完成後,要閒置幾十倍的時間,等待存取。

 

 

 

CPU的暫存器存取速度極快,但是造價成本太高,發熱量大,不能被大量採用。通常,CPU的暫存器只有幾KB;

L1 Cache和L2 Cache一般設計在CPU上,訪問延遲在幾~幾十納秒內;

主存的訪問延遲在百納秒內;

速度越快,意味著成本越高。所以硬體設計是在現有技術水平、期望計算速度、成本、散熱等因素之間所做的trade-off。

多核
當單個CPU主頻超過一定範圍後,CPU成本和散熱成了很大的問題,主頻很難突破10GHz。

為了獲得更快的計算速度和更好的效能,晶片設計者決定繞過主頻,採用人海戰術,在一塊CPU中增加多個核心(Core)。

一個核心是一個可以執行指令的獨立單元,它包含了ALU和暫存器,並配備L1和L2 Cache。多個核心共享L3 Cache。

 

 

 

上圖是一個多核處理器電路圖。下圖是多個多核處理器:

 

 

 

伺服器可以支援多個處理器(CPU),支援單個CPU的伺服器稱為單路伺服器;支援兩個CPU的伺服器稱為雙路伺服器。上圖是Intel的四路架構,系統支援四個CPU,假如每塊CPU內有8個核心,系統可對外提供32核計算能力。

 

————————————————
版權宣告:本文為CSDN博主「quantLearner」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/The_Time_Runner/article/details/103348137