馮諾依曼VS哈佛結構
阿新 • • 發佈:2019-01-06
記憶體是由地址組成的,cpu以記憶體能夠聽懂的語言(通訊協議)對記憶體說:“1號記憶體地址,把你裡面存的資料傳給我(傳送地址)”。記憶體聽懂之後就會通過資料匯流排,把裡面的資料傳給cpu。cpu收到之後進行運算,改了這個值之後,又對記憶體說:“1號記憶體地址,我要給你發資料,接著”。記憶體聽懂之後就會把資料匯流排發來的資料存到記憶體單元裡面。
哈佛結構 資料和程式分開儲存,資料存在一個記憶體裡面,程式存在另一個記憶體裡面。但是匯流排太多降低了效率。
改進版的哈佛結構 資料和程式也是分開儲存,但是和哈佛結構相比,改進版的哈佛結構共用資料匯流排和地址匯流排。因為發地址的時候可以區分開不同的記憶體,比如存資料的記憶體從1-1000號,存程式的記憶體從1001-2000號,這樣cpu 喊1號 ,存資料的記憶體就知道cpu要讀寫資料了。cpu 喊1001號 存資料的記憶體假裝聽不到,而存程式的記憶體知道要讀程式了,就會把一條程式傳給cpu 。
總結:通過對比可以發現 馮諾依曼結構 由於資料和程式儲存在同一塊記憶體中,程式執行的時候有可能會被更改。而哈佛結構程式執行之後是不會被更改的,只有資料被更改,cpu只能讀取程式。只有程式結束執行,重新編譯、連結、生成程式的時候才能改變程式,執行的時候cpu無法改變。
以上模型圖都是省略cache等情況的,最簡單的理論模型。可以更好的理解程式執行的原理,如有錯誤歡迎指正,比如箭頭的方向,感激不盡!
那麼問題來了:從軟體安全形度來講,是否可以認為 哈佛結構比馮諾依曼結構 更安全?