簡單介紹哈佛結(jié)構(gòu)和馮·諾依曼結(jié)構(gòu)的區(qū)別【圖文】
掃描二維碼
隨時(shí)隨地手機(jī)看文章
哈佛結(jié)構(gòu)
(英語:Harvard architecture)是一種將程序指令儲存和數(shù)據(jù)儲存分開的存儲器結(jié)構(gòu)。中央處理器首先到程序指令儲存器中讀取程序指令內(nèi)容,解碼后得到數(shù)據(jù)地址,再到相應(yīng)的數(shù)據(jù)儲存器中讀取數(shù)據(jù),并進(jìn)行下一步的操作(通常是執(zhí)行)。程序指令儲存和數(shù)據(jù)儲存分開,數(shù)據(jù)和指令的儲存可以同時(shí)進(jìn)行,可以使指令和數(shù)據(jù)有不同的數(shù)據(jù)寬度,如Microchip公司的PIC16芯片的程序指令是14位寬度,而數(shù)據(jù)是8位寬度。
哈佛結(jié)構(gòu)的微處理器通常具有較高的執(zhí)行效率。其程序指令和數(shù)據(jù)指令分開組織和儲存的,執(zhí)行時(shí)可以預(yù)先讀取下一條指令。
目前使用哈佛結(jié)構(gòu)的中央處理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,還有摩托羅拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安謀公司的ARM9、ARM10和ARM11。
馮·諾伊曼結(jié)構(gòu)
(von Neumann architecture),也稱普林斯頓結(jié)構(gòu),是一種將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的電腦設(shè)計(jì)概念結(jié)構(gòu)。本詞描述的是一種實(shí)作通用圖靈機(jī)的計(jì)算裝置,以及一種相對于平行計(jì)算的序列式結(jié)構(gòu)參考模型(referential model)。
本結(jié)構(gòu)隱約指導(dǎo)了將儲存裝置與中央處理器分開的概念,因此依本結(jié)構(gòu)設(shè)計(jì)出的計(jì)算機(jī)又稱儲存程式型電腦。
最早的計(jì)算機(jī)器僅內(nèi)涵固定用途的程式?,F(xiàn)代的某些計(jì)算機(jī)依然維持這樣的設(shè)計(jì)方式,通常是為了簡化或教育目的。例如一個(gè)計(jì)算器僅有固定的數(shù)學(xué)計(jì)算程式,它不能拿來當(dāng)作文書處理軟件,更不能拿來玩游戲。若想要改變此機(jī)器的程式,你必須更改線路、更改結(jié)構(gòu)甚至重新設(shè)計(jì)此機(jī)器。當(dāng)然最早的計(jì)算機(jī)并沒有設(shè)計(jì)的那個(gè)可編程化。當(dāng)時(shí)所謂的“重寫程式”很可能指的是紙筆設(shè)計(jì)程式步驟,接著制訂工程細(xì)節(jié),再施工將機(jī)器的電路配線或結(jié)構(gòu)改變。
而儲存程式型電腦的概念改變了這一切。借由創(chuàng)造一組指令集結(jié)構(gòu),并將所謂的運(yùn)算轉(zhuǎn)化成一串程式指令的執(zhí)行細(xì)節(jié),讓此機(jī)器更有彈性。借著將指令當(dāng)成一種特別型態(tài)的靜態(tài)資料,一臺儲存程式型電腦可輕易改變其程式,并在程控下改變其運(yùn)算內(nèi)容。馮·諾伊曼結(jié)構(gòu)與儲存程式型電腦是互相通用的名詞,其用法將于下述。而哈佛結(jié)構(gòu)則是一種將程式資料與普通資料分開儲存的設(shè)計(jì)概念,但是它并未完全突破馮.諾伊曼架構(gòu)。
儲存程式型概念也可讓程式執(zhí)行時(shí)自我修改程式的運(yùn)算內(nèi)容。本概念的設(shè)計(jì)動機(jī)之一就是可讓程式自行增加內(nèi)容或改變程式指令的內(nèi)存位置,因?yàn)樵缙诘脑O(shè)計(jì)都要使用者手動修改。但隨著索引暫存器與間接位置存取變成硬件結(jié)構(gòu)的必備機(jī)制后,本功能就不如以往重要了。而程式自我修改這項(xiàng)特色也被現(xiàn)代程式設(shè)計(jì)所棄揚(yáng),因?yàn)樗鼤斐衫斫馀c除錯的難度,且現(xiàn)代中央處理器的管線與快取機(jī)制會讓此功能效率降低。
從整體而言,將指令當(dāng)成資料的概念使得組合語言、編譯器與其他自動編程工具得以實(shí)現(xiàn);可以用這些“自動編程的程式”,以人類較易理解的方式編寫程式[1];從局部來看,強(qiáng)調(diào)I/O的機(jī)器,例如Bitblt,想要修改畫面上的圖樣,以往是認(rèn)為若沒有客制化硬件就辦不到。但之后顯示這些功能可以借由“執(zhí)行中編譯”技術(shù)而有效達(dá)到。
此結(jié)構(gòu)當(dāng)然有所缺陷,除了下列將述的馮·諾伊曼瓶頸之外,修改程式很可能是非常具傷害性的,無論無意或設(shè)計(jì)錯誤。在一個(gè)簡單的儲存程式型電腦上,一個(gè)設(shè)計(jì)不良的程式可能會傷害自己、其他程式甚或是操作系統(tǒng),導(dǎo)致當(dāng)機(jī)。緩沖區(qū)溢位就是一個(gè)典型例子。而創(chuàng)造或更改其他程式的能力也導(dǎo)致了惡意軟件的出現(xiàn)。利用緩沖區(qū)溢位,一個(gè)惡意程式可以覆蓋呼叫堆棧(Call stack)并覆寫程式碼,并且修改其他程式檔案以造成連鎖破壞。內(nèi)存保護(hù)機(jī)制及其他形式的存取控制可以保護(hù)意外或惡意的程式碼更動。