• 正文
    • 1、馮諾依曼架構和哈佛架構
    • 2、CISC和RISC
  • 相關推薦
申請入駐 產(chǎn)業(yè)圖譜

馮·諾伊曼結構和哈弗結構,RISC和CISC

2021/04/23
649
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

1、馮諾依曼架構和哈佛架構

如果你學習過X86微機原理和匯編語言,你可能會依稀地記得,我們在用匯編語言開發(fā)X86代碼時,需要定義數(shù)據(jù)段,代碼段,堆棧段和擴展段,這些段定義好之后,將會在寫程序的時候有不同的用處。比如,當我們需要用到變量的時候,我們就需要將其定義到數(shù)據(jù)段里面,而我們代碼的主體開始,就是從代碼段的起始處開始的,在做子函數(shù)跳轉(zhuǎn)的時候,現(xiàn)場地址是被壓入堆棧段。如圖1-2-1所示。

圖1-2-1 匯編語言的分段

當一個程序從硬盤被拷貝到內(nèi)存上面時,它的代碼編碼部分被安放在代碼段中,而這個程序運行時所需定義的一些變量,則會被安放在數(shù)據(jù)段中。這里需要注意的是,這里的段地址在X86機器上面都是邏輯地址,即使用段基址和偏移量組合所得到的地址。因此,如果需要操作數(shù)據(jù)段中的變量時,應當使用存儲器尋址,如直接尋址,間接尋址等方式。這里,我們還需要再知道的一點是,不管我們上述中的數(shù)據(jù)段還是代碼段,雖然它們的地址都是邏輯地址,邏輯地址都是存在同一塊物理地址上面的,只不過加了段標識進行段限定。這種數(shù)據(jù)存儲和代碼存儲都在同一個存儲器上面的計算機架構,被稱為“馮·諾依曼”架構。

“馮·諾依曼”架構的計算機在運行程序的時候,首先會把程序從硬盤拷貝到內(nèi)存上面來,如果程序退出,那么這個內(nèi)存將會被回收,以用于下一個程序的運行。這種情形是不是很適合我們的個人計算機運行程序?這個就是“馮·諾依曼”架構的最大好處,極大地有利于動態(tài)程序的加載。

然而“馮·諾依曼”架構由于程序存儲器和數(shù)據(jù)存儲器都位于同一塊內(nèi)存,而每次數(shù)據(jù)吞吐的時候,CPU都會去讀取代碼和程序,因此會影響程序的運行速度,這個缺陷也就是所謂的“馮·諾伊曼”瓶頸。

圖1-2-2 馮·諾依曼結構示意圖

“馮·諾依曼”結構由于數(shù)據(jù)和程序都存儲在一片物理內(nèi)存上,因此CPU運行程序的時候,這塊內(nèi)存的讀寫接口無疑是非常復雜的。而且程序由于存儲在外部存儲器上面,因此在運行的時候,還需要先拷貝到內(nèi)存中去運行,在一片單片機中,這無疑是非常不實用的。我們希望的是,將程序直接在程序存儲器中去運行,代碼運行時產(chǎn)生的變量數(shù)據(jù),再將其存儲到內(nèi)部存儲器上。這種需求催生了另一種計算機的結構,即“哈佛結構”。

在“哈佛結構”中,一個程序的代碼部分和數(shù)據(jù)部分是被獨立地放置在兩塊不同形式的存儲器上面的,存放代碼的存儲器叫代碼存儲器,一般都是ROM;存放數(shù)據(jù)的存儲器叫數(shù)據(jù)存儲器,一般都是SRAM,現(xiàn)在有一些可外擴SDRAM。由于代碼和程序是被存儲在兩個獨立的存儲器上面,因此每個存儲器和CPU之間的讀寫總線都是獨立的,這也意味著,CPU從程序存儲器中取指令和代碼尋址時的內(nèi)存訪問可以完全獨立開來。哈佛結構的示意圖如圖1-2-3所示。

圖1-2-3 哈佛結構示意圖

哈佛結構與馮·諾依曼結構處理器相比,處理器有兩個明顯的特點:使用兩個獨立的存儲器模塊,分別存儲指令和數(shù)據(jù),每個存儲模塊都不允許指令和數(shù)據(jù)并存;使用獨立的兩條總線,分別作為CPU與每個存儲器之間的專用通信路徑,而這兩條總線之間毫無關聯(lián)。

傳統(tǒng)的哈佛結構使用非常少,現(xiàn)在的都為改進后的哈佛結構,其結構特點為:

使用兩個獨立的存儲器模塊,分別存儲指令和數(shù)據(jù),每個存儲模塊都不允許指令和數(shù)據(jù)并存,以便實現(xiàn)并行處理;具有一條獨立的地址總線和一條獨立的數(shù)據(jù)總線,利用公用地址總線訪問兩個存儲模塊(程序存儲模塊和數(shù)據(jù)存儲模塊),公用數(shù)據(jù)總線則被用來完成程序存儲模塊或數(shù)據(jù)存儲模塊與CPU之間的數(shù)據(jù)傳輸;兩條總線由程序存儲器和數(shù)據(jù)存儲器分時共用。

2、CISC和RISC

CISC的英文全稱為“Complex Instruction Set Computer”,即“復雜指令系統(tǒng)計算機”;

RISC的英文全稱為“Reduced Instruction Set Computer”,即“精簡指令集計算機”。

從字面上來看,CISC和RISC最大的區(qū)別就是指令的復雜程度。

51單片機是一種CISC,ARM-Cortex M3是一種RISC,然而如果你同時學習過51單片機匯編語言和ARM匯編語言的話,你就會發(fā)現(xiàn),如果以指令數(shù)量或者指令結構的復雜程序來說,似乎ARM匯編比51匯編更加復雜。因為隨著計算機需求的發(fā)展,不管是精簡指令還是復雜指令,它必然要支持更多的協(xié)處理器,這就使得它們的指令數(shù)量都在增加。所以,根據(jù)指令的數(shù)量和復雜程度來區(qū)分RISC和CISC也不準確。

CISC內(nèi)部為將較復雜的指令譯碼,也就是指令較長,分成幾個周期去執(zhí)行,正因如此,開發(fā)程序比較容易(指令多的緣故),但是由于指令復雜,執(zhí)行工作效率較差,處理數(shù)據(jù)速度較慢。

RISC指令位數(shù)較短,內(nèi)部還有快速處理指令的電路,使得指令的譯碼與數(shù)據(jù)的處理較快,所以執(zhí)行效率比CISC高,不過,必須經(jīng)過編譯程序的處理,才能發(fā)揮它的效率。

CISC和早期RISC的區(qū)別如圖1-2-4所示。

圖1-2-4 CISC和早期RISC的異同

相關推薦