加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 1、馮諾依曼架構(gòu)和哈佛架構(gòu)
    • 2、CISC和RISC
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

馮·諾伊曼結(jié)構(gòu)和哈弗結(jié)構(gòu),RISC和CISC

2021/04/23
953
閱讀需 7 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

1、馮諾依曼架構(gòu)和哈佛架構(gòu)

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

圖1-2-1 匯編語(yǔ)言的分段

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

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

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

圖1-2-2 馮·諾依曼結(jié)構(gòu)示意圖

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

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

圖1-2-3 哈佛結(jié)構(gòu)示意圖

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

傳統(tǒng)的哈佛結(jié)構(gòu)使用非常少,現(xiàn)在的都為改進(jìn)后的哈佛結(jié)構(gòu),其結(jié)構(gòu)特點(diǎn)為:

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

2、CISC和RISC

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

RISC的英文全稱為“Reduced Instruction Set Computer”,即“精簡(jiǎn)指令集計(jì)算機(jī)”。

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

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

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

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

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

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

相關(guān)推薦

電子產(chǎn)業(yè)圖譜