? ? ? ? ? ?
X86是哈佛架構(gòu)+馮諾依曼架構(gòu)(也叫普林斯頓架構(gòu))
x86 CPU外部是普林斯頓結(jié)構(gòu),因為內(nèi)存空間里是不區(qū)分?jǐn)?shù)據(jù)與指令的。
馮·諾依曼結(jié)構(gòu),是一種將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的存儲器結(jié)構(gòu)。取指令和取操作數(shù)都在同一總線上,通過分時復(fù)用的方式進(jìn)行;缺點是在高速運行時,不能達(dá)到同時取指令和取操作數(shù),從而形成了傳輸過程的瓶頸。由于程序指令存儲地址和數(shù)據(jù)存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數(shù)據(jù)的寬度相同。

但內(nèi)部是哈佛結(jié)構(gòu),因為CPU的L1 cacha是區(qū)分指令和數(shù)據(jù)的。哈佛結(jié)構(gòu)指指令地址空間和數(shù)據(jù)地址空間是完全獨立的兩個地址空間,指內(nèi)存的地址空間。不是緩存上的。
哈佛結(jié)構(gòu)是一種將程序指令存儲和數(shù)據(jù)存儲分開的存儲器結(jié)構(gòu),它的主要特點是將程序和數(shù)據(jù)存儲在不同的存儲空間中,即程序存儲器和數(shù)據(jù)存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問,目的是為了減輕程序運行時的訪存瓶頸。
哈佛結(jié)構(gòu)的中央處理器首先到程序指令儲存器中讀取程序指令內(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)的高性能體現(xiàn)在在單片機、DSP芯片平臺上運行的程序種類和花樣較少,因為各個電子娛樂產(chǎn)品中的軟件升級比較少,應(yīng)用程序可以用匯編作為內(nèi)核,最高效率的利用流水線技術(shù),獲得最高的效率。
馮諾依曼結(jié)構(gòu)主要是基于電腦購買者對電腦的使用途徑不同—-各種娛樂型用戶、各種專業(yè)開發(fā)用戶等,且安裝的軟件的種類繁多,升級頻繁,多種軟件同時運行時處理的優(yōu)先級比較模糊,英特爾芯片不具備徹底智能分配各程序優(yōu)先級和流水線的機制,機械的分配優(yōu)先和流水線反而容易使用戶不便。
馮氏結(jié)構(gòu)簡單、易實現(xiàn)、成本低,但效率偏低;哈佛結(jié)構(gòu)效率高但復(fù)雜,對外圍設(shè)備的連接與處理要求高,十分不適合外圍存儲器的擴展。現(xiàn)在的處理器,依托CACHE的存在,已經(jīng)很好的將二者統(tǒng)一起來了。現(xiàn)在的處理器雖然外部總線上看是諾依曼結(jié)構(gòu)的,但是由于內(nèi)部CACHE的存在,因此實際上內(nèi)部來看已經(jīng)類似改進(jìn)型哈佛結(jié)構(gòu)的了。
不光是x86,ARM和Power這些CPU也是這樣的。
因此,可以稱為是混合結(jié)構(gòu)。至于說原因嘛,因為工程上很難有純粹的東西,最純粹的往往不是最優(yōu)解。
? ? ? ?