大家天天都在使用手機,你知道你的手機使用的什么處理器?處理器又是何種架構呢?今天筆者就來談談處理器的架構和指令集。
我們知道一臺手機最重要的就是處理器,也就是處理器,那么什么是處理器呢?
處理器就是一堆數字電路(架構)以高低電平的各種組合實現了各種基本的運算(指令)。
接下來我們看看要想設計出處理器,需要哪些東西,先看下圖。
要想設計出處理器,就需要有指令集,也就是規定處理器的相應操作,通過指令集去控制處理器實現相應功能。但處理器是一堆硬件電路,只能識別二進制數據,所以指令集是由一堆二進制數據組成。處理器通過指令集是給用戶提供的一個接口。指令集架構(Instructuon
Set ArchitectureI, ISA)和處理器架構(Micro architecture)是上下級的關系。
而二進制數據對人類來說讀起來很麻煩。為了方便人類操作指令集,發明了匯編語言來描述指令集。匯編語言類似人類語言,讀起來方便多了。雖然匯編語言讀起來方便了,但也有缺陷。首先匯編語言操作起來還是挺麻煩的。其次匯編語言對應一條條指令集,所以當指令集改變時,就得修改相應匯編語言,導致其可移植性很差,不能跨平臺使用,如ARM架構的匯編語言與Intel
X86架構的就不同。這時人們就想開發一種更方便操作,超越指令集的語言,于是有了C,C++等高級語言。
處理器只能識別二進制碼,那怎么能識別高級語言呢?于是人們開發了編譯器,依照如下順序,將高級語言翻譯成二進制碼:
至此,人類就可以方便的利用高級語言編寫程序,控制處理器完成相應工作。然后程序員這個職業就此大規模誕生了。哈哈,驚不驚喜!好了,接下來我們談談處理架構和指令集。
1 馮·諾依曼架構與哈佛架構
對于處理器架構,目前已經演變出很多架構,但基本上都是由__馮·諾依曼架構和哈佛架構__演變而來。
1.1 馮·諾伊曼架構
1945 年,約翰·馮·諾依曼 (John von Neumann) 在他的著名《First Draft of a Report on the
EDVAC》提出了電子數字計算機,也就是馮·諾伊曼架構。
馮·諾伊曼架構(Von Neumann
Architecture),也稱普林斯頓結構,是一種將__程序指令存儲器和數據存儲器合并在一起的處理器架構__。
該架構將儲存裝置與中央處理器分開的概念,因此依該架構設計出的計算機又稱__儲存程式型電腦__。
馮諾依曼架構如下圖所示:
1.CPU
:CPU是負責執行計算機程序指令的電子電路單元。CPU是處理指令的計算機系統的主要組件。它運行操作系統和應用程序,不斷接收來自用戶或應用程序的輸入。
2.寄存器 :它是一種存儲器,用于快速接收、存儲和傳輸中央處理器立即使用的數據和指令。
3 . ALU : Arithmetic Logic Unit 負責所有所需的計算,如乘法、加法、減法、比較、邏輯運算符和其他算術運算符。
4.控制單元(CU) : CU也是中央處理器(CPU)的一部分。CU 操作系統內的所有處理器控制信號、輸入/輸出設備、數據和指令的移動。
5.總線 :用作指令和數據的信號通信。
6.內存單元 :內存單元由隨機存取內存 (RAM) 組成,有時也稱為主內存或主內存。與硬盤(二級內存)不同,這種內存速度快,而且 CPU可以直接訪問。RAM被分成多個分區。它的每個分區都由一個地址及其內容組成。該地址將唯一標識內存中的每個位置。將數據從永久內存(硬盤)加載到更快且可直接訪問的臨時內存 (RAM)中,可使 CPU 工作得更快。
PC和服務器芯片(譬如Intel AMD那些出的),ARM Cortex-A系列嵌入式芯片(譬如核心是ARM CortexA8的三星S5PV210,譬如華為的麒麟970等手機芯片)等都是馮諾依曼結構。這些系統都需要大量內存,所以工作內存都是DRAM,因為他們更適合使用馮諾依曼系統。
1.2 哈佛架構
哈佛架構(Harvard architecture)是一種__將程序指令儲存和數據儲存分開的存儲器結構__。中央處理器首先到程序指令儲存器中讀取程序指令內容,解碼后得到數據地址,再到相應的數據儲存器中讀取數據,并進行下一步的操作(通常是執行)。
哈佛架構的架構如下:
1.總線:用作指令和數據的信號通路。在這種架構中,數據和指令都有單獨的總線。有不同類型的總線,它們如下:數據總線、數據地址總線、指令總線、指令地址總線。
2.操作寄存器 :在哈佛架構中,使用了不同類型的寄存器,用于存儲不同類型指令的地址。一些寄存器是內存數據寄存器,內存地址寄存器。
3.程序計數器 :程序計數器具有要執行的下一條指令的位置。程序計數器將下一個地址傳遞給內存地址寄存器。
4. ALU :Arithmetic Logic Unit 負責所有所需的計算,如乘法、加法、減法、比較、邏輯運算符和其他算術運算符。
5.控制單元(CU) :CU也是中央處理器(CPU)的一部分。CU 操作系統內的所有處理器控制信號、輸入/輸出設備、數據和指令的移動。
6.輸入/輸出流:I/P設備用于在中央處理器(CUP)輸入指令的幫助下將數據讀入主存儲器。當輸出通過輸出設備顯示時,它提供來自系統的信息。簡單地說,計算機系統在 O/P
設備的幫助下給出處理(計算)的結果。
在遵循馮諾依曼架構的普通計算機中,指令和數據都存儲在同一內存中。因此使用相同的總線來獲取指令和數據。這意味著 CPU
不能同時做兩件事(讀指令和讀/寫數據)。而哈佛體系結構的計算機將指令和數據分別使用獨立存儲和獨立總線(信號路徑)。它基本上是為了克服馮諾依曼架構的瓶頸而開發的。
指令和數據總線分開的主要優點是 CPU 可以同時訪問指令和讀/寫數據 。這是哈佛架構的主要優勢。
哈佛結構的微處理器通常具有較高的執行效率,因其程序指令和數據指令分開組織和儲存的,執行時可以預先讀取下一條指令。目前使用哈佛結構的中央處理器和微控制器有很多,比如Microchip公司的PIC系列芯片,還有摩托羅拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11。MCU也就是單片機中幾乎都是用哈佛結構,譬如廣泛使用的51單片機、典型的STM32單片機(核心是ARM Cortex-M系列的)都是哈佛結構。
與馮.諾曼結構處理器比較,哈佛結構處理器有兩個明顯的特點:
1.使用兩個獨立的存儲器模塊,分別存儲指令和數據,每個存儲模塊都不允許指令和數據并存;
2.使用獨立的兩條總線,分別作為CPU與每個存儲器之間的專用通信路徑,而這兩條總線之間毫無關聯。
1.3 總結
哈佛結構和馮諾依曼結構主要__區別在是否區分指令與數據__。在教科書里這是兩種截然不同的做法。
但實際上在內存里,指令和數據是在一起的。而在CPU內的緩存中,還是會區分指令緩存和數據緩存,最終執行的時候,指令和數據是從兩個不同的地方出來的。你可以理解為在CPU外部,采用的是馮諾依曼模型,而在CPU內部用的是哈佛結構。
哈佛結構設計復雜,但效率高。馮諾依曼結構則比較簡單,但也比較慢。CPU廠商為了提高處理速度,在CPU內增加了高速緩存。也基于同樣的目的,區分了指令緩存和數據緩存。有時為了解決現實問題,究竟是什么主義真的沒那么重要。
實際上,絕大多數現代計算機使用的是所謂的“Modified Harvard Architecture”,指令和數據共享同一個address space,但緩存是分開的。
在現實世界中很少有非常純粹的概念,特別是在實際的應用里。教科書里的大多是理想化的模型,便于掌握某個概念的重點和本質,但實際中很難達到這種理想化的狀態。
有一些ARM(Cortex-M系列)是哈佛結構,而另一些ARM(Cortex-A)是馮諾依曼結構(或者更準確說是混合結構),對ARM體系CPU(除ARM7)對外表現為馮.諾伊曼架構,對內則表現為哈佛架構。
因此,兩種架構各有優勢,不能一概而論。就目前而言,兩種現代處理器在大規模的處理都是馮諾依曼,在小規模的處理是哈佛。
介紹完了處理器架構,接下來說說指令集。
2 CISC與RISC指令集
__CISC(Complex Instruction Set Computers,復雜指令集計算機)和RISC(Reduced Instruction Set Computers,精減指令集計算機)__是兩大類主流的CPU指令集類型。
2.1 CISC(復雜指令集計算機)
早期的CPU全部是采用CISC,它的設計目的是要用最少的機器語言指令來完成所需的計算任務。
隨著集成電路的發展,特別是VLSI(超大規模集成電路)技術的迅速發展,為了軟件編程方便和提高程序的運行速度,硬件工程師采用的辦法是__不斷增加硬件的復雜性來實現復雜功能的指令和多種靈活的編址方式__,甚至某些指令可支持高級語言語句歸類后的復雜操作,至使硬件越來越復雜,造價也相應提高。為實現復雜操作,微處理器除向程序員提供類似各種寄存器和機器指令功能外,還通過存于只讀存貯器(ROM)中的微程序來實現其極強的功能,處理器在分析每一條指令之后執行一系列初級指令運算來完成所需的功能,以這種指令集設計出來計算機就是CISC(complex
instruction set computer),其中以__CISC__架構設計的處理器有以Intel、AMD的X86為代表。
2.2 RISC(精簡指令集計算機)
采用復雜指令系統的計算機有著較強的處理高級語言的能力,這對提高計算機的性能是有益的。當計算機的設計沿著這條道路發展時,有些人沒有隨波逐流,他們回過頭去看一看過去走過的道路,開始懷疑這種傳統的做法,IBM公司在紐約Yorktown的JhomasI.Wason研究中心于1975年組織力量研究指令系統的合理性問題,因為當時已感到,日趨龐雜的指令系統不但不易實現,而且還可能降低系統性能。
1979年以帕特遜教授為首的一批科學家也開始在美國加冊大學伯克萊分校開展這一研究。結果表明,CISC存在許多缺點。首先,在這種計算機中,各種指令的使用率相差懸殊:一個典型程序的運算過程所使用的80%指令,只占一個處理器指令系統的20%,事實上最頻繁使用的指令是取、存和加這些最簡單的指令。這樣一來,長期致力于復雜指令系統的設計,實際上是在設計一種難得在實踐中用得上的指令系統的處理器。同時,復雜的指令系統必然帶來結構的復雜性。這不但增加了設計的時間與成本還容易造成設計失誤。
此外,盡管VLSI技術現在已達到很高的水平,但也很難把CISC的全部硬件做在一個芯片上,這也妨礙單片計算機的發展。在CISC中,許多復雜指令需要極復雜的操作,這類指令多數是某種高級語言的直接翻版,因而通用性差。由于采用二級的微碼執行方式,它也降低那些被頻繁調用的簡單指令系統的運行速度。
因而,針對CISC的這些弊病。帕特遜等人提出了精簡指令的設想即指令系統應當只包含那些使用頻率很高的少量指令,并提供一些必要的指令以支持操作系統和高級語言。按照這個原則發展而成的計算機被稱為__精簡指令集計算機(Reduced Instruction Set Computer)__,簡稱RISC。RISC以ARM、Apple的Macintosh、IBM Power為代表。開源的RISC-V也是RISC指令集。
RISC的設計初衷針對CISC CPU復雜的弊端,選擇一些可以在單個CPU周期完成的指令,以降低CPU的復雜度,將復雜性交給編譯器。
2.3 CISC和RISC區別
為了說明兩者的區別,先舉一個例子。下圖是實現乘法運算的計算步驟:a = a * b。它需要4個步驟:
A.讀出a的值
B.讀出b的值
C.相乘
D.寫結果到a中
使用CISC提供的乘法指令,只需要一條指令即可完成這4步操作。當然,這一個指令需要多個CPU周期才可以完成。
而RISC不提供“一站式”的乘法指令,需調用四條單CPU周期指令完成兩數相乘:內存a加載到寄存器,內存b加載到寄存器,兩個寄存器中數相乘,寄存器結果存入內存a。
按照此思路,早期的設計出的RISC指令集,指令數是比CISC少些。后來,很多RISC的指令集中指令數反超了CISC。因此,應該根據指令的復雜度而非數量來區分兩種指令集。
當然,CISC也是要通過操作內存、寄存器、運算器來完成復雜指令的。它在實現時,是將復雜指令轉換成了一個微程序,微程序在制造CPU時就已存儲于微服務存儲器。一個微程序包含若干條微指令(也稱微碼),執行復雜指令時,實際上是在執行一個微程序。這也帶來兩種指令集的一個差別,微程序的執行是不可被打斷的,而RISC指令之間可以被打斷,所以理論上RISC可更快響應中斷。
總的來說,區別如下:
1.指令能力:
CISC的指令能力強,單多數指令使用率低卻增加了CPU的復雜度,指令是__可變長格式,__它必須對不等長指令進行分割,因此在執行單一指令的時候需要進行較多的處理工作。
RISC的指令大部分為__單周期指令__,__指令長度固定,__CPU在執行指令的時候速度較快且性能穩定。因此在并行處理方面RISC明顯優于CISC,RISC可同時執行多條指令,它可將一條指令分割成若干個進程或線程,交由多個處理器同時執行。RISC對內存只有load/store操作,數據的運算都是在CPU內部實現。
2.尋址方式:
CISC支持多種尋址方式。
RISC支持的尋址方式少。
3.實現方式:
CISC通過微程序控制技術實現(微碼)。
RISC增加了通用寄存器,硬布線邏輯控制為主,適合采用流水線方式執行。RISC可以優化編譯,有效支持高級語言。
4.研發周期:
CISC的研制周期長。
RISC硬件簡單,因而它的制造工藝簡單且成本低廉。
審核編輯:湯梓紅
-
處理器
+關注
關注
68文章
19259瀏覽量
229651 -
RISC
+關注
關注
6文章
462瀏覽量
83708 -
指令集
+關注
關注
0文章
222瀏覽量
23378
發布評論請先 登錄
相關推薦
評論