哈佛結構和馮·諾依曼結構

目錄

一、哈佛結構

二、馮·諾伊曼結構

三、哈佛結構和馮·諾伊曼結構對比


 

一、哈佛結構

哈佛結構是一種將程序指令存儲和數據存儲分開的存儲器結構。哈佛結構是一種並行體系結構,它的主要特點是將程序和數據存儲在不同的存儲空間中,即程序存儲器和數據存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問;

       哈佛結構(Harvard architecture)是一種將程序指令儲存和數據儲存分開的存儲器結構。中央處理器首先到程序指令儲存器中讀取程序指令內容,解碼後得到數據地址,再到相應的數據儲存器中讀取數據,並進行下一步的操作(通常是執行)。程序指令儲存和數據儲存分開,數據和指令的儲存可以同時進行,可以使指令和數據有不同的數據寬度,如Microchip公司的PIC16芯片的程序指令是14位寬度,而數據是8位寬度。

       哈佛結構的微處理器通常具有較高的執行效率。其程序指令和數據指令分開組織和儲存的,執行時可以預先讀取下一條指令。

       目前使用哈佛結構的中央處理器微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,還有摩托羅拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11。大多數DSP是哈佛結構的。

  哈佛體系指令時序如下:

  

二、馮·諾伊曼結構

       

馮·諾依曼結構是一種將程序指令存儲器和數據存儲器合併在一起的存儲器結構;

馮.諾伊曼結構(von Neumann architecture),也稱普林斯頓結構,是一種將程序指令存儲器和數據存儲器合併在一起的電腦設計概念結構。該結構隱約指導了將儲存裝置與中央處理器分開的概念,因此依該結構設計出的計算機又稱儲存程式型電腦。

       最早的計算機器僅內涵固定用途的程式。現代的某些計算機依然維持這樣的設計方式,通常是爲了簡化或教育目的。例如一個計算器僅有固定的數學計算程式,它不能拿來當作文書處理軟件,更不能拿來玩遊戲。若想要改變此機器的程式,你必須更改線路、更改結構甚至重新設計此機器。當然最早的計算機並沒有設計的那個可編程化。當時所謂的“重寫程式”很可能指的是紙筆設計程式步驟,接着制訂工程細節,再施工將機器的電路配線或結構改變。

       而儲存程式型電腦的概念改變了這一切。藉由創造一組指令集結構,並將所謂的運算轉化成一串程式指令的執行細節,讓此機器更有彈性。藉着將指令當成一種特別型態的靜態資料,一臺儲存程式型電腦可輕易改變其程式,並在程控下改變其運算內容。馮·諾伊曼結構儲存程式型電腦是互相通用的名詞,其用法將於下述。而哈佛結構則是一種將程式資料與普通資料分開儲存的設計概念,但是它並未完全突破馮.諾伊曼架構。

       儲存程式型概念也可讓程式執行時自我修改程式的運算內容。本概念的設計動機之一就是可讓程式自行增加內容或改變程式指令的內存位置,因爲早期的設計都要使用者手動修改。但隨着索引暫存器與間接位置存取變成硬件結構的必備機制後,本功能就不如以往重要了。而程式自我修改這項特色也被現代程式設計所棄揚,因爲它會造成理解與除錯的難度,且現代中央處理器的管線與快取機制會讓此功能效率降低。

       從整體而言,將指令當成資料的概念使得組合語言編譯器與其他自動編程工具得以實現;可以用這些“自動編程的程式”,以人類較易理解的方式編寫程式;從局部來看,強調I/O的機器,例如Bitblt,想要修改畫面上的圖樣,以往是認爲若沒有客製化硬件就辦不到。但之後顯示這些功能可以藉由“執行中編譯”技術而有效達到。

       此結構當然有所缺陷,除了下列將述的馮·諾伊曼瓶頸之外,修改程式很可能是非常具傷害性的,無論無意或設計錯誤。在一個簡單的儲存程式型電腦上,一個設計不良的程式可能會傷害自己、其他程式甚或是操作系統,導致當機緩衝區溢位就是一個典型例子。而創造或更改其他程式的能力也導致了惡意軟件的出現。利用緩衝區溢位,一個惡意程式可以覆蓋呼叫堆棧(Call stack)並覆寫程式碼,並且修改其他程式檔案以造成連鎖破壞。內存保護機制及其他形式的存取控制可以保護意外或惡意的程式碼更動。大多數CPU和GPU是馮諾依曼結構的。

馮·諾依曼指令時序如下:

  

三、哈佛結構和馮·諾伊曼結構對比

       區別:
      馮諾依曼結構採用指令和數據統一編址,使用同一條總線傳輸,CPU讀取指令和數據的操作無法重疊。
哈佛結構採用指令和數據獨立編址,使用兩條獨立的總線傳輸,CPU讀取指令和數據的操作可以重疊。
        利弊:
        馮諾依曼結構主要用於通用計算機領域,需要對存儲器中的代碼和數據頻繁的進行修改,統一編址有利於節約資源。早起的微處理器大多采用馮·諾依曼結構,最典型的就是intel的x86微處理器,取指令和取操作數都是在同一總線上,通過分時複用的方式進行,優點是硬件簡單,但是缺點是在告訴運行時,不能達到同時取指令和取操作數,從而會形成傳輸過程的瓶頸。

         哈佛結構主要用於嵌入式計算機,程序固化在硬件中,有較高的可靠性、運算速度和較大的吞吐量。哈佛總線技術以DSP和ARM爲代表的,採用哈佛總線體系結構的芯片內部程序空間和數據空間是分開的,在硬件上也是分開的,這就允許同時取指令和取操作數,也就是比馮結構快一步,從而大大提高運算能力,例如最常見的運算中,一條指令同時可以取兩個操作數,在流水線處理時,同時還有一個取指令操作,馮式結構就需要先取指令,再取操作數,而哈佛結構則允許同時運行,取指令同時,直接取操作數,而且可以取完操作數後,直接取下一條指令,這樣不會出現取指令和取操作數重疊執行的情況,效率大大提高。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章