馮·諾伊曼結(jié)構(gòu)
理論
存儲(chǔ)程序計(jì)算機(jī)在體系結(jié)構(gòu)上主要特點(diǎn)有:
以運(yùn)算單元為中心
采用存儲(chǔ)程序原理
存儲(chǔ)器是按地址訪問(wèn)、線性編址的空間
控制流由指令流產(chǎn)生
指令由操作碼和地址碼組成
數(shù)據(jù)以二進(jìn)制編碼
歷史
最早的計(jì)算機(jī)器僅內(nèi)涵固定用途的程序?,F(xiàn)代的某些計(jì)算機(jī)依然維持這樣的設(shè)計(jì)方式,通常是為了簡(jiǎn)化或教育目的。例如一個(gè)計(jì)算器僅有固定的數(shù)學(xué)計(jì)算程序,它不能拿來(lái)當(dāng)作文字處理軟件,更不能拿來(lái)玩游戲。若想要改變此機(jī)器的程序,你必須更改線路、更改結(jié)構(gòu)甚至重新設(shè)計(jì)此機(jī)器。當(dāng)然最早的計(jì)算機(jī)并沒(méi)有設(shè)計(jì)的那么可編程化。當(dāng)時(shí)所謂的“重寫程序”很可能指的是紙筆設(shè)計(jì)程序步驟,接著制訂工程細(xì)節(jié),再施工將機(jī)器的電路配線或結(jié)構(gòu)改變。
而存儲(chǔ)程序型電腦的概念改變了這一切。借由創(chuàng)造一組指令集結(jié)構(gòu),并將所謂的運(yùn)算轉(zhuǎn)化成一串程序指令的運(yùn)行細(xì)節(jié),讓此機(jī)器更有彈性。借著將指令當(dāng)成一種特別類型的靜態(tài)數(shù)據(jù),一臺(tái)存儲(chǔ)程序型電腦可輕易改變其程序,并在程控下改變其運(yùn)算內(nèi)容。 馮·諾伊曼結(jié)構(gòu) 與 存儲(chǔ)程序型電腦 是互相通用的名詞,其用法將于下述。而哈佛結(jié)構(gòu)則是一種將程序數(shù)據(jù)與普通數(shù)據(jù)分開(kāi)存儲(chǔ)的設(shè)計(jì)概念,但是它并未完全突破馮.諾伊曼架構(gòu)。
存儲(chǔ)程序型概念也可讓程序運(yùn)行時(shí)自我修改程序的運(yùn)算內(nèi)容。本概念的設(shè)計(jì)動(dòng)機(jī)之一就是可讓程序自行增加內(nèi)容或改變程序指令的內(nèi)存位置,因?yàn)樵缙诘脑O(shè)計(jì)都要用戶手動(dòng)修改。但隨著變址寄存器與間接位置訪問(wèn)變成硬件結(jié)構(gòu)的必備機(jī)制后,本功能就不如以往重要了。而程序自我修改這項(xiàng)特色也被現(xiàn)代程序設(shè)計(jì)所棄揚(yáng),因?yàn)樗鼤?huì)造成理解與除錯(cuò)的難度,且現(xiàn)代中央處理器的管線與緩存機(jī)制會(huì)讓此功能效率降低。
從整體而言,將指令當(dāng)成數(shù)據(jù)的概念使得匯編語(yǔ)言、編譯器與其他自動(dòng)編程工具得以實(shí)現(xiàn);可以用這些“自動(dòng)編程的程序”,以人類較易理解的方式編寫程序 ;從局部來(lái)看,強(qiáng)調(diào)I/O的機(jī)器,例如Bitblt,想要修改畫面上的圖樣,以往是認(rèn)為若沒(méi)有客制化硬件就辦不到。但之后顯示這些功能可以借由“運(yùn)行中編譯”技術(shù)而有效達(dá)到。
此結(jié)構(gòu)當(dāng)然有所缺陷,除了下列將述的馮·諾伊曼瓶頸之外,修改程序很可能是非常具傷害性的,無(wú)論無(wú)意或設(shè)計(jì)錯(cuò)誤。在一個(gè)簡(jiǎn)單的存儲(chǔ)程序型電腦上,一個(gè)設(shè)計(jì)不良的程序可能會(huì)傷害自己、其他程序甚或是操作系統(tǒng),導(dǎo)致死機(jī)。緩存溢出就是一個(gè)典型例子。而創(chuàng)造或更改其他程序的能力也導(dǎo)致了惡意軟件的出現(xiàn)。利用緩存溢出,一個(gè)惡意程序可以覆蓋調(diào)用堆棧(Call stack)并改寫代碼,并且修改其他程序文件以造成連鎖破壞。內(nèi)存保護(hù)機(jī)制及其他形式的訪問(wèn)控制可以保護(hù)意外或惡意的代碼更動(dòng)。
第一次提出及實(shí)現(xiàn)
馮·諾伊曼結(jié)構(gòu) 這個(gè)詞出自約翰·馮·諾伊曼的論文: First Draft of a Report on the EDVAC , 于1945年6月30日。馮·諾依曼由于在曼哈頓工程中需要大量的運(yùn)算,從而使用了當(dāng)時(shí)最先進(jìn)的兩臺(tái)計(jì)算機(jī)Mark I和ENIAC,在使用Mark I和ENIAC的過(guò)程中,他意識(shí)到了存儲(chǔ)程序的重要性,從而提出了存儲(chǔ)程序邏輯架構(gòu)。雖然馮·諾伊曼的概念非常新穎,但馮·諾伊曼結(jié)構(gòu)這個(gè)詞,對(duì)馮·諾伊曼的合作伙伴、時(shí)人甚至先輩都不公平。
一份康拉德·楚澤提出的專利應(yīng)用就已在1936年點(diǎn)出這類概念。而存儲(chǔ)程序型電腦的概念早在馮·諾伊曼知曉ENIAC的存在前就已在賓州大學(xué)的摩爾電機(jī)學(xué)院流傳了。此構(gòu)想的確實(shí)創(chuàng)立者永遠(yuǎn)是個(gè)謎。
赫曼·魯寇夫( Herman Lukoff ( 英語(yǔ) : Herman Lukoff ) )相信是艾克特創(chuàng)建此概念(見(jiàn)參考資料)。
毛奇利( Mauchly ( 英語(yǔ) : John William Mauchly ) )與艾克特( Eckert ( 英語(yǔ) : J. Presper Eckert ) )在1943年于他們建造ENIAC時(shí)寫下關(guān)于存儲(chǔ)程序的概念,另外,ENIAC項(xiàng)目管理員布萊德(Grist Brainerd)在1943年12月為ENIAC做的進(jìn)度回報(bào),就已隱約提及存儲(chǔ)程序的概念(雖然也同時(shí)否決了在ENIAC實(shí)現(xiàn)的項(xiàng)目),他說(shuō)“為了擁有最簡(jiǎn)單的實(shí)現(xiàn)項(xiàng)目以及不復(fù)雜的事務(wù),ENIAC建造時(shí)后將不需要任何自動(dòng)整備”。
當(dāng)設(shè)計(jì)ENIAC時(shí),它很清楚說(shuō)明從讀卡器或紙帶讀取指令是不夠快的,因?yàn)镋NIAC設(shè)計(jì)用于高速運(yùn)行運(yùn)算。因此ENIAC直接以電路管線設(shè)計(jì)程序,并在需要新程序時(shí)重新配接線路。設(shè)計(jì)師也很清楚他們需要更好的系統(tǒng)結(jié)構(gòu),因此在ENIAC建造期間第一份EDVAC的報(bào)告就已撰寫完畢,并包含了存儲(chǔ)程序的概念,此概念敘述程序指令存儲(chǔ)在高速內(nèi)存(水銀延遲內(nèi)存)中,因此可以在運(yùn)行時(shí)快速訪問(wèn)。
艾倫·圖靈在1946年2月19日講演了一份包含程序存儲(chǔ)型電腦(Pilot ACE)完整設(shè)計(jì)的論文。
馮·諾伊曼瓶頸
將CPU與內(nèi)存分開(kāi)并非十全十美,反而會(huì)導(dǎo)致所謂的馮·諾伊曼瓶頸(von Neumann bottleneck):在CPU與內(nèi)存之間的流量(數(shù)據(jù)傳輸率)與內(nèi)存的容量相比起來(lái)相當(dāng)小,在現(xiàn)代電腦中,流量與CPU的工作效率相比之下非常小,在某些情況下(當(dāng)CPU需要在巨大的數(shù)據(jù)上運(yùn)行一些簡(jiǎn)單指令時(shí)),數(shù)據(jù)流量就成了整體效率非常嚴(yán)重的限制。CPU將會(huì)在數(shù)據(jù)輸入或輸出內(nèi)存時(shí)閑置。由于CPU速度遠(yuǎn)大于內(nèi)存讀寫速率,因此瓶頸問(wèn)題越來(lái)越嚴(yán)重。
而馮·諾伊曼瓶頸是約翰·巴科斯在1977年ACM圖靈獎(jiǎng)得獎(jiǎng)致詞時(shí)第一次出現(xiàn),根據(jù)巴科斯所言:
在CPU與內(nèi)存間的緩存內(nèi)存抒解了馮·諾伊曼瓶頸的性能問(wèn)題。另外,分支預(yù)測(cè)(branch prediction)算法的創(chuàng)建也幫助緩和了此問(wèn)題。巴科斯在1977年論述的“智能瓶頸”已改變甚多。且巴科斯對(duì)于此問(wèn)題的解決方案并沒(méi)有造成明顯影響?,F(xiàn)代的函數(shù)式編程以及面向?qū)ο缶幊桃演^少運(yùn)行如早期Fortran一般會(huì)“將大量數(shù)值從內(nèi)存搬入搬出的操作”,但平心而論,這些操作的確占用電腦大部分的運(yùn)行時(shí)間。
早期的存儲(chǔ)程序型電腦
下列的日期數(shù)據(jù)很難給予一個(gè)適當(dāng)?shù)娜掌陧樞?。一些是第一次運(yùn)行測(cè)試程序的日期;一些是電腦第一次公開(kāi)展示或完成建造的日期;還有一些是第一次散布及安裝日期。
參考文獻(xiàn)
書(shū)籍
The First Computers: History and Architectures :由Raúl Rojas與Ulf Hashagen編輯,MIT Press,2000. ISBN 0-262-18197-5。
From Dits to Bits... : A Personal History of the Electronic Computer ,Herman Lukoff,1979. Robotics Press, ISBN 0-89661-002-0
Martin Davis(2000),第八章,"Making the first Universal computers", Engines of Logic: Mathematicians and the origin of the Computer ,W. W. Norton & Company,Inc. New York. ISBN 0-393-32229-7 pbk。
Can Programming be Liberated from the von Neumann Style? ,John Backus,1977 ACM Turing Award Lecture. Communications of the ACM,August 1978,Volume 21,Number 8.在線PDF
C. Gordon Bell與Allen Newell(1971), Computer Structures: Readings and Examples ,McGraw-Hill Book Company,New York. Massive(668頁(yè))。
參見(jiàn)
哈佛結(jié)構(gòu)
圖靈機(jī)
隨機(jī)存取機(jī) (random access machine)
免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。
相關(guān)資料
- 有價(jià)值
- 一般般
- 沒(méi)價(jià)值
{{item.userName}} 舉報(bào)
{{item.time}} {{item.replyListShow ? '收起' : '展開(kāi)'}}評(píng)論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}
{{_reply.userName}} 舉報(bào)
{{_reply.time}}