全球专业中文经管百科,由121,994位网友共同编写而成,共计436,017个条目

馮·諾伊曼結構

用手机看条目

出自 MBA智库百科(https://wiki.mbalib.com/)

馮·諾伊曼結構(von Neumann architecture)

目錄

什麼是馮·諾伊曼結構

  馮·諾伊曼結構也稱馮·諾伊曼模型(Von Neumann model)或普林斯頓結構(Princeton architecture),是一種將程式指令存儲器和數據存儲器合併在一起的電腦設計概念結構。本詞描述的是一種實現通用圖靈機的計算設備,以及一種相對於並行計算的序列式結構參考模型(referential model)。

  本結構隱約指導了將存儲設備與中央處理器分開的概念,因此依本結構設計出的電腦又稱存儲程式型電腦。

馮·諾伊曼結構的歷史

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

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

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

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

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

馮·諾伊曼結構的提出

  馮·諾伊曼結構這個詞出自約翰·馮·諾伊曼的論文:First Draft of a Report on the EDVAC, 於1945年6月30日。馮·諾依曼由於在曼哈頓工程中需要大量的運算,從而使用了當時最先進的兩台電腦Mark I和ENIAC,在使用Mark I和ENIAC的過程中,他意識到了存儲程式的重要性,從而提出了存儲程式邏輯架構。雖然馮·諾伊曼的概念非常新穎,但馮·諾伊曼結構這個詞,對馮·諾伊曼的合作伙伴、時人甚至先輩都不公平。

  一份康拉德·楚澤提出的專利應用就已在1936年點出這類概念。而存儲程式型電腦的概念早在馮·諾伊曼知曉ENIAC的存在前就已在賓州大學的摩爾電機學院流傳了。此構想的確實創立者永遠是個謎。

  赫曼·魯寇夫(Herman Lukoff)相信是艾克特創建此概念。毛奇利(Mauchly)與艾克特(Eckert)在1943年於他們建造ENIAC時寫下關於存儲程式的概念,另外,ENIAC項目管理員布萊德(Grist Brainerd)在1943年12月為ENIAC做的進度回報,就已隱約提及存儲程式的概念(雖然也同時否決了在ENIAC實現的項目),他說“為了擁有最簡單的實現項目以及不複雜的事務,ENIAC建造時後將不需要任何自動整備”。

  當設計ENIAC時,它很清楚說明從讀卡器或紙帶讀取指令是不夠快的,因為ENIAC設計用於高速運行運算。因此ENIAC直接以電路管線設計程式,併在需要新程式時重新配接線路。設計師也很清楚他們需要更好的系統結構,因此在ENIAC建造期間第一份EDVAC的報告就已撰寫完畢,並包含了存儲程式的概念,此概念敘述程式指令存儲在高速記憶體(水銀延遲記憶體)中,因此可以在運行時快速訪問。

  艾倫·圖靈在1946年2月19日講演了一份包含程式存儲型電腦(Pilot ACE)完整設計的論文。

馮·諾伊曼結構瓶頸

  將CPU與記憶體分開並非十全十美,反而會導致所謂的馮·諾伊曼瓶頸(von Neumann bottleneck):在CPU與記憶體之間的流量(數據傳輸率)與記憶體的容量相比起來相當小,在現代電腦中,流量與CPU的工作效率相比之下非常小,在某些情況下(當CPU需要在巨大的數據上運行一些簡單指令時),數據流量就成了整體效率非常嚴重的限制。CPU將會在數據輸入或輸出記憶體時閑置。由於CPU速度遠大於記憶體讀寫速率,因此瓶頸問題越來越嚴重。

  而馮·諾伊曼瓶頸是約翰·巴科斯在1977年ACM圖靈獎得獎致詞時第一次出現,根據巴科斯所言:確實有一個變更存儲設備的方法,比藉由馮·諾伊曼瓶頸流通大量數據更為先進。瓶頸這詞不僅是對於問題本身數據流量的敘述,更重要地,也是個使我們的思考方法局限在‘一次一字元’模式的智能瓶頸。它使我們怯於思考更廣泛的概念。因此編程成為一種項目與詳述通過馮·諾伊曼瓶頸的字元數據流,且大部分的問題不在於數據的特征,而是如何找出數據。

  在CPU與記憶體間的緩存記憶體抒解了馮·諾伊曼瓶頸的性能問題。另外,分支預測(branch prediction)演算法的創建也幫助緩和了此問題。巴科斯在1977年論述的“智能瓶頸”已改變甚多。且巴科斯對於此問題的解決方案並沒有造成明顯影響。現代的函數式編程以及面向對象編程已較少運行如早期Fortran一般會“將大量數值從記憶體搬入搬出的操作”,但平心而論,這些操作的確占用電腦大部分的運行時間。

相關條目

本條目對我有幫助2
MBA智库APP

扫一扫,下载MBA智库APP

分享到:
  如果您認為本條目還有待完善,需要補充新內容或修改錯誤內容,請編輯條目投訴舉報

本条目由以下用户参与贡献

苏青荇.

評論(共0條)

提示:評論內容為網友針對條目"馮·諾伊曼結構"展開的討論,與本站觀點立場無關。

發表評論請文明上網,理性發言並遵守有關規定。

打开APP

以上内容根据网友推荐自动排序生成

下载APP

闽公网安备 35020302032707号