建議直接看wiki中的解釋,哈佛架構(gòu)哈!
? 哈佛結(jié)構(gòu)是一種將程序指令存儲和數(shù)據(jù)存儲分開的存儲器結(jié)構(gòu),這一詞起源于Harvard Mark I型繼電器式計算機(jī)忌警,它存儲指令(24位)在紙帶上和數(shù)據(jù)于機(jī)電計數(shù)器上琳钉。 中央處理器首先到程序指令儲存器中讀取程序指令內(nèi)容迹缀,解碼后得到數(shù)據(jù)地址溃蔫,再到相應(yīng)的數(shù)據(jù)儲存器中讀取數(shù)據(jù)路操,并進(jìn)行下一步的操作(通常是執(zhí)行)局劲。程序指令儲存和數(shù)據(jù)儲存分開睬捶,數(shù)據(jù)和指令的儲存可以同時進(jìn)行,可以使指令和數(shù)據(jù)有不同的數(shù)據(jù)寬度跨蟹,如Microchip公司的PIC16芯片的程序指令是14位寬度雳殊,而數(shù)據(jù)是8位寬度。程序需要由操作者加載窗轩;處理器無法自行初始化夯秃。
? 哈佛結(jié)構(gòu)這個詞起源于Harvard Mark I型繼電器式計算機(jī),馬克一號借由打卡紙讀取、運行每一道指令。它沒有條件分支指令寝并。這表示需要復(fù)雜運算的代碼會很長一串箫措。循環(huán)的完成需利用打卡紙頭尾相接的方式。這種代碼與數(shù)據(jù)分開放置的架構(gòu)就是眾所皆知的“哈佛架構(gòu)”衬潦。計算機(jī)先驅(qū)葛麗絲·霍普是馬克一號的程序設(shè)計員斤蔓。
[圖片上傳失敗...(image-c632ef-1586685675193)]
### 與馮諾伊曼結(jié)構(gòu)進(jìn)行對比
? 純馮諾依曼架構(gòu)下的CPU可以讀取指令或讀/寫內(nèi)存數(shù)據(jù),它們都不能使指令和數(shù)據(jù)同時使用同一個的總線系統(tǒng)镀岛。使用哈佛結(jié)構(gòu)的計算機(jī)中CPU弦牡,即使沒有緩存的情況下也可以在讀取指令的同時進(jìn)行數(shù)據(jù)訪問。由于指令和數(shù)據(jù)訪問不使用同一個內(nèi)存溝道漂羊,因此哈佛結(jié)構(gòu)的計算機(jī)可以在相同的電路復(fù)雜度下有更好的表現(xiàn)驾锰。
同時,哈佛架構(gòu)機(jī)擁有不同的代碼和數(shù)據(jù)的地址空間:指令的零地址和數(shù)據(jù)的零地址是不同的走越。指令的零地址可能是二十四位的值椭豫,而數(shù)據(jù)的零地址可能是一個八位字節(jié),而非二十四位值的一部分旨指。
改進(jìn)的哈佛結(jié)構(gòu)
? 改進(jìn)的哈佛架構(gòu)機(jī)更像哈佛架構(gòu)機(jī)赏酥,但它放松了指令和數(shù)據(jù)之間嚴(yán)格分離的這一特征,仍然允許CPU同時訪問兩個(或更多)內(nèi)存總線谆构。最常見的修改包括由公共地址空間支持的單獨指令和數(shù)據(jù)高速緩存裸扶。當(dāng)它作為一個純粹的哈佛機(jī)時,CPU通過高速緩存來執(zhí)行指令搬素。當(dāng)訪問外部存儲器時呵晨,它的作用就像一個馮·諾依曼機(jī)(代碼可以像數(shù)據(jù)一樣移動,像是一個功能強(qiáng)大的技能)熬尺。這一改良在現(xiàn)代處理器是普遍存在的摸屠,例如ARM體系結(jié)構(gòu)、Power Architecture和x86處理器粱哼。它有時被稱為哈佛架構(gòu)季二,忽略了它實際上被“修改”的事實。
另一種修改提供了指令存儲器(例如ROM或閃存)與CPU之間的通路皂吮,以允許來自指令存儲器的字被視為只讀數(shù)據(jù)戒傻。該技術(shù)用于某些微控制器税手,包括Atmel的AVR蜂筹。這允許訪問諸如文本字符串或函數(shù)表之類的常量數(shù)據(jù),而無需首先將其復(fù)制到數(shù)據(jù)存儲器中芦倒,從而為讀/寫變量保留稀缺(且耗電的)數(shù)據(jù)存儲器艺挪。特殊的機(jī)器語言指令提供了從指令存儲器中讀取數(shù)據(jù)的功能。(這是不同于指令本身嵌入常數(shù)的數(shù)據(jù),雖然對于單個常量來說麻裳,兩種機(jī)制可以相互替代口蝠。)