處理器硬件結構
現代計算機結構處理過程:
- 輸入設備輸入數據,存儲器存儲輸入數據
- 控制器接收指令控制存儲器將數據送入ALU進行計算
- 控制器接收指令將計算後的結果存入存儲器
- 控制器接收指令將存儲器數據輸出到輸出設備
馮諾依曼結構
所有複雜運算都是通過簡單運算組合而成。而CPU中最核心的部分爲ALU。
ALU(算數邏輯單元):主要由與門和或門構成,用來進行二進制數據的計算。
處理器模型
ISA:指令集體系架構,也是目前使用的最廣的CPU體系架構。主要包括一套指令集以及一些寄存器,而程序員針對這些指令集以及寄存器進行編程,而不需要關心具體的硬件。
在PC上,大部分用的Intel和AMD處理器都是基於x86指令集,而嵌入式設備上的程序大部分使用的AMR指令集。
處理器
- 指令集體系結構:x86,arm,armv7,mips等
- 處理器微架構:NetBurst等
- 處理器物理實現:20nm/40mn的集成電路工藝,電子計算機,量子計算機等
而處理器除了內核外,還有其他很多東西,如I/O,電源,電池,時鐘等等。
處理器結構
CPU硬件指標
MIPS:每秒執行指令數,而實際中該值會偏低,因爲實際情況中會遇到並行,Cache Miss,通信效率,總線衝突等問題。
功耗:現在設備中CPU與顯卡功耗非常大
指令集體系結構
處理器模型: 例如C=A+B;語句:
- 操作數:C,B,A均爲操作數,操作數存儲在主存中
由於從Memory訪問數據很慢,於是CPU在ALU附近加入了寄存器,用來存儲計算中產生的中間數據,避免將這些數據存入主存再讀取的耗時
- 操作碼(op):+爲操作碼
處理器模型
對於C=A+B可以分爲以下指令執行:
load R3,#0;// 加載#0地址存儲的數據到R3寄存器 load R2,#1; // 加載#1地址存儲的數據到R2寄存器 add R0,R3,R2;// 將R3,R2寄存器的數據相加保存到R0寄存器中 store R0,#2;// 將R0寄存器中的數據保存到#2地址 其中load,add,store爲指令,R0,R1,R2,R3爲寄存器,#1,#2爲主存地址
這種指令的寫法就是彙編語言,處理器公司也會對外發布指令集手冊,而這手冊也是使用彙編語言來描述。
而計算機無法理解load
,store
等指令,也不知道具體的寄存器爲R1
,R0
,計算機只知道0和1,所以最終編譯過後每一條指令均如01011101011001
,代表着load R3 ,#0;
最初程序員直接寫彙編語言來進行程序開發,直到Fortran的出現,纔出現了高級語言,能讓程序員從解放出來。
高級語言的轉換
指令集的發展
CISC:複雜指令集,提供了很多與高級語言以及特性相關的指令(如複雜的尋址模式,直接對應的指針運算)等,導致指令集非常龐大。而x86的CPU仍然在使用CISC指令集。
RISC:精簡指令集,相對於CISC來說減少了許多直接的指令,只保留了常用的簡單的指令。如Mips,Arm,Power等CPU使用RISC指令集。
RISC使得CPU不需要浪費大量的晶體管來做複雜而又較少使用的功能,X86的指令集有1000多頁,而RISC指令集手冊只有200頁左右,並且精簡指令集的大部分指令都可以在1個cycle執行完,並且使用了定長編碼,使得指令譯碼的過程變得簡單,並且CPU的頻率得到了大幅度的提升
可是CISC的一條指令對應着多條RISC指令,所以在執行復雜操作的時候,RISC指令集使得CPU與存儲器之間的數據交換增多,而存儲器的速度遠遠低於CPU執行速度,比較容易導致性能惡化
PS:芯片的製程工藝(32nm,22nm)決定了芯片內部晶體管的數量,晶體管數量越多,則芯片能完成的任務也就越多
手機上的CPU大部分用的是ARM,無論是高通還是TI,還是三星使用的還是ARM內核。因爲ARM在設計之初就將低功耗,低成本的優先級放在了高性能之前。
ARM自己不生產芯片,而是向半導體公司提供指令集與內核授權,讓半導體公司生產ARM指令集的芯片。
計算機字長(Word)
16位計算機的字長爲16bit。 32位計算機的字長爲32bit。 64位計算機的字長爲64bit。
字長代表着處理器一次處理數據的長度,主要由運算器和寄存器決定。
32位處理器,每個寄存器都可以存儲32位的數據,而加法器可以支持兩個32位的數據相加
image.png