标题：冯·诺依曼结构
历史
最早的计算机器仅内涵固定用途的程式。现代的某些计算机依然维持这样的设计方式，通常是为了简化或教  冯·诺依曼育目的。例如一个计算器仅有固定的数学计算程式，它不能拿来当作文书处理软件，更不能拿来玩游戏。若想要改变此机器的程式，你必须更改线路、更改结构甚至重新设计此机器。当然最早的计算机并没有设计的那个可编程化。当时所谓的“重写程式”很可能指的是纸笔设计程式步骤，接着制订工程细节，再施工将机器的电路配线或结构改变。
而储存程式型电脑的概念改变了这一切。借由创造一组指令集结构，并将所谓的运算转化成一串程式指令的执行细节，让此机器更有弹性。借着将指令当成一种特别型态的静态资料，一台储存程式型电脑可轻易改变其程式，并在程控下改变其运算内容。
冯·诺伊曼结构与储存程式型电脑是互相通用的名词，其用法将于下述。而哈佛结构则是一种将程式资料与普通资料分开储存的设计概念。
储存程式型概念也可让程式执行时自我修改程式的运算内容。本概念的设计动机之一就是可让程式自行增加内容或改变程式指令的内存位置，因为早期的设计都要使用者手动修改。但随着索引暂存器与间接位置存取变成硬件结构的必备机制后，本功能就不如以往重要了。而程式自我修改这项特色也被现代程式设计所弃扬，因为它会造成理解与除错的难度，且现代中央处理器的管线与快取机制会让此功能效率降低。
从整体而言，将指令当成资料的概念使得组合语言、编译器与其他自动编程工具得以实现；可以用这些“自动编程的程式”，以人类较易理解的方式编写程式[1]；从局部来看，强调I/O的机器，例如Bitblt，想要修改画面上的图样，以往是认为若没有客制化硬件就办不到。但之后显示这些功能可以借由“执行中编译”技术而有效达到。
此结构当然有所缺陷，除了下列将述的冯·诺伊曼瓶颈之外，修改程式很可能是非常具伤害性的，无论无意或设计错误。在一个简单的储存程式型电脑上，一个设计不良的程式可能会伤害自己、其他程式甚或是操作系统，导致当机。缓冲区溢位就是一个典型例子。而创造或更改其他程式的能力也导致了恶意软件的出现。利用缓冲区溢位，一个恶意程式可以覆盖呼叫堆栈（Call stack）并覆写程式码，并且修改其他程式档案以造成连锁破坏。内存保护机制及其他形式的存取控制可以保护意外或恶意的程式码更动。
介绍
简介说到计算机的发展，就不能不提到美国科学家冯·诺依曼。从20世纪初，物理学和电子学科学家们就在争论制造可以进行数值计算的机器应该采用什么样的结构。人们被十进制这个人类习惯的计数方法所困扰。所以，那时以研制模拟计算机的呼声更为响亮和有力。20世纪30年代中期，美国科学家冯·诺依曼大胆的提出：抛弃十进制，采用二进制作为数字计算机的数制基础。同时，他还说预先编制计算程序，然后由计算机来按照人们事前制定的计算顺序来执行数值计算工作。 
冯·诺依曼理论的要点是：数字计算机的数制采用二进制；计算机应该按照程序顺序执行。 
人们把冯·诺依曼的这个理论称为冯·诺依曼体系结构。从EDVAC到当前最先进的计算机都采用的是冯诺依曼体系结构。所以冯·诺依曼是当之无愧的数字计算机之父。 
  冯·诺依曼结构又称作普林斯顿体系结构（Princeton architecture）。
1945年，冯·诺依曼首先提出了“存储程序”的概念和二进制原理，后来，人们把利用这种概念和原理设计的电子计算机系统统称为“冯.诺曼型结构”计算机。冯.诺曼结构的处理器使用同一个存储器，经由同一个总线传输。冯·诺依曼介绍约翰·冯·诺依曼（ John Von Neumann，1903－1957），美籍匈牙利人，上世纪最伟大的科学家之一，1903年12月28日生于匈牙利的布达佩斯，父亲是一个银行家，家境富裕，十分注意对孩子的教育．冯·诺依曼从小聪颖过人，兴趣广泛，读书过目不忘，据说他6岁时就能用古希腊语同父亲闲谈，一生掌握了七种语言，最擅德语，可在他用德语思考种种设想时，又能以阅读的速度译成英语，他对读过的书籍和论文，能很快一句  约翰·冯·诺依曼不差地将内容复述出来，而且若干年之后，仍可如此。
1911年一1921年，冯·诺依曼在布达佩斯的卢瑟伦中学读书期间，就崭露头角而深受老师的器重．在费克特老师的个别指导下并合作发表了第一篇数学论文，此时冯·诺依曼还不到18岁。
1921年一1923年在苏黎世大学学习．很快又在1926年以优异的成绩获得了布达佩斯大学数学博士学位，此时冯·诺依曼年仅22岁。
1927年一1929年冯·诺依曼相继在柏林大学和汉堡大学担任数学讲师。1930年接受了普林斯顿大学客座教授的职位，西渡美国。
1931年他成为美国普林斯顿大学的第一批终身教授，那时，他还不到30岁。
1933年转到该校的高级研究所，成为最初六位教授之一，并在那里工作了一生． 冯·诺依曼是普林斯顿大学、宾夕法尼亚大学、哈佛大学、伊斯坦堡大学、马里兰大学、哥伦比亚大学和慕尼黑高等技术学院等校的荣誉博士．他是美国国家科学院、秘鲁国立自然科学院和意大利国立林且学院等院的院士。 
1954年他任美国原子能委员会委员；
1951年至1953年任美国数学会主席； 　
1954年夏，冯·诺依曼被发现患有癌症；
1957年2月8日，在华盛顿去世，终年54岁。
内容
特点冯.诺依曼结构处理器具有以下几个特点：
1：必须有一个存储器；2：必须有一个控制器；3：必须有一个运算器，用于完成算术运算和逻辑运算；4：必须有输入设备和输出设备，用于进行人机通信。:另外，程序和数据统一存储并在程序控制下自动工作功能根据冯·诺依曼体系结构构成的计算机，必须具有如下功能： 
把需要的程序和数据送至计算机中。 
必须具有长期记忆程序、数据、中间结果及最终运算结果的能力。 
能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力。 
能够根据需要控制程序走向，并能根据指令控制机器的各部件协调操作。 
能够按照要求将处理结果输出给用户。 
为了完成上述的功能，计算机必须具备五大基本组成部件，
包括： 
输人数据和程序的输入设备；
记忆程序和数据的存储器；
完成数据加工处理的运算器；
控制程序执行的控制器；
输出处理结果的输出设备。冯·诺伊曼瓶颈将CPU与内存分开并非十全十美，反而会导致所谓的冯·诺伊曼瓶颈（von Neumann bottleneck）：在CPU与内存之间的流量（资料传输率）与内存的容量相比起来相当小，在现代电脑中，流量与CPU的工作效率相比之下非常小，在某些情况下（当CPU需要在巨大的资料上执行一些简单指令时），资料流量就成了整体效率非常严重的限制。CPU将会在资料输入或输出内存时闲置。由于CPU速度以及内存容量的成长速率远大于双方之间的流量，因此瓶颈问题越来越严重。而冯·诺伊曼瓶颈是约翰·巴科斯在1977年ACM图灵奖得奖致词时第一次出现，根据巴科斯所言：
“……确实有一个变更储存装置的方法，比借由冯·诺伊曼瓶颈流通大量资料更为先进。瓶颈这词不仅是对于问题本身资料流量的叙述，更重要地，也是个使我们的思考方法局限在‘一次一字符’模式的智能瓶颈。它使我们怯于思考更广泛的概念。因此编程成为一种计划与详述通过冯·诺伊曼瓶颈的字符资料流，且大部分的问题不在于资料的特征，而是如何找出资料。”
在CPU与内存间的快取内存抒解了冯·诺伊曼瓶颈的效能问题。另外，分支预测（branch prediction）算法的建立也帮助缓和了此问题。巴科斯在1977年论述的“智能瓶颈”已改变甚多。且巴科斯对于此问题的解决方案并没有造成明显影响。现代的函数式编程以及面向对象编程已较少执行如早期Fortran一般会“将大量数值从内存搬入搬出的操作”，但平心而论，这些操作的确占用电脑大部分的执行时间。
主要贡献
冯·诺依曼的主要贡献就是提出并实现了“存储程序”的概念。由于指令和数据都是二进制码，指令和操作数的地址又密切相关，因此，当初选择这种结构是自然的。但是，这种指令和数据共享同一总线的结构，使得信息流的传输成为限制计算机性能的瓶颈，影响了数据处理速度的提高。
在典型情况下，完成一条指令需要3个步骤，即：取指令、指令译码和执行指令。从指令流的定时关系也可看出冯·诺依曼结构与哈佛结构处理方式的差别。举一个最简单的对存储器进行读写操作的指令，指令1至指令3均为存、取数指令，对冯.诺曼结构处理器，由于取指令和存取数据要从同一个存储空间存取，经由同一总线传输，因而它们无法重叠执行，只有一个完成后再进行下一个。  冯·诺依曼结构图
结构
中央处理器的体系架构可以分为：冯·诺依曼结构和哈佛结构冯·诺依曼结构冯·诺依曼结构也称普林斯顿结构，是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置，因此程序指令和数据的宽度相同，如英特尔公司的8086中央处理器的程序指令和数据都是16位宽。
目前使用冯·诺伊曼结构的中央处理器和微控制器有很多。除了上面提到的英特尔公司的8086，英特尔公司的其他中央处理器、ARM的ARM7、MIPS公司的MIPS处理器也采用了冯·诺依曼结构。
1945年，冯·诺依曼首先提出了“存储程序”的概念和二进制原理，后来，人们把利用这种概念和原理设计的电子计算机系统统称为“冯·诺依曼型结构”计算机。冯·诺依曼结构的处理器使用同一个存储器，经由同一个总线传输。
冯·诺曼结构处理器具有以下几个特点：必须有一个存储器；必须有一个控制器；必须有一个运算器，用于完成算术运算和逻辑运算；必须有输入和输出设备，用于进行人机通信。冯·诺依曼的主要贡献就是提出并实现了“存储程序”的概念。由于指令和数据都是二进制码，指令和操作数的地址又密切相关，因此，当初选择这种结构是自然的。但是，这种指令和数据共享同一总线的结构，使得信息流的传输成为限制计算机性能的瓶颈，影响了数据处理速度的提高。
在典型情况下，完成一条指令需要3个步骤，即：取指令、指令译码和执行指令。从指令流的定时关系也可看出冯·诺依曼结构与哈佛结构处理方式的差别。举一个最简单的对存储器进行读写操作的指令，指令1至指令3均为存、取数指令，对冯·诺曼结构处理器，由于取指令和存取数据要从同一个存储空间存取，经由同一总线传输，因而它们无法重叠执行，只有一个完成后再进行下一个。哈佛结构哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容，解码后得到数据地址，再到相应的数据存储器中读取数据，并进行下一步的操作（通常是执行）。程序指令存储和数据存储分开，可以使指令和数据有不同的数据宽度，如Microchip公司的PIC16芯片的程序指令是14位宽度，而数据是8位宽度。
哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的，执行时可以预先读取下一条指令。目前使用哈佛结构的中央处理器和微控制器有很多，除了上面提到的Microchip公司的PIC系列芯片，还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安谋公司的ARM9、ARM10和ARM11。
哈佛结构是指程序和数据空间独立的体系结构，目的是为了减轻程序运行时的访存瓶颈。
例如最常见的卷积运算中, 一条指令同时取两个操作数, 在流水线处理时, 同时还有一个取指操作,如果程序和数据通过一条总线访问,取指和取数必会产生冲突，而这对大运算量的循环的执行效率是很不利的。哈佛结构能基本上解决取指和取数的冲突问题。而对另一个操作数的访问，就只能采用Enhanced哈佛结构了，例如像TI那样，数据区再split，并多一组总线。或向AD那样，采用指令cache，指令区可存放一部分数据。
在DSP算法中，最大量的工作之一是与存储器交换信息，这其中包括作为输入信号的采样数据、滤波器系数和程序指令。例如，如果将保存在存储器中的2个数相乘，就需要从存储器中取3个二进制数，即2个要乘的数和1个描述如何去做的程序指令。目前DSP内部一般采用的是哈佛结构，它在片内至少有4套总线：程序的数据总线，程序的地址总线，数据的数据总线和数据的地址总线。这种分离的程序总线和数据总线，可允许同时获取指令字(来自程序存储器)和操作数(来自数据存储器)，而互不干扰。这意味着在一个机器周期内可以同时准备好指令和操作数。有的DSP芯片内部还包含有其他总线，如DMA总线等，可实现单周期内完成更多的工作。这种多总线结构就好像在DSP内部架起了四通八达的高速公路，保障运算单元及时地取到需要的数据，提高运算速度。因此，对DSP来说，内部总线是个资源，总线越多，可以完成的功能就越复杂。超级哈佛结构(superHarvard architecture，缩写为SHARC)，它在哈佛结构上增加了指令cache(缓存)和专用的I/O控制器。
哈佛结构处理器有两个明显的特点：使用两个独立的存储器模块，分别存储指令和数据，每个存储模块都不允许指令和数据并存；使用独立的两条总线，分别作为CPU与每个存储器之间的专用通信路径，而这两条总线之间毫无关联。
改进的哈佛结构，其结构特点为：使用两个独立的存储器模块，分别存储指令和数据，每个存储模块都不允许指令和数据并存，以便实现并行处理；具有一条独立的地址总线和一条独立的数据总线，利用公用地址总线访问两个存储模块（程序存储模块和数据存储模块），公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输。两者区别冯·诺依曼理论的要点是：数字计算机的数制采用二进制；计算机应该按照程序顺序执行。人们把冯诺依曼的这个理论称为冯诺依曼体系结构。从ENIAC到当前最先进的计算机都采用的是冯诺依曼体系结构。所以冯诺依曼是当之无愧的数字计算机之父。
根据冯诺依曼体系结构构成的计算机，必须具有如下功能：把需要的程序和数据送至计算机中；必须具有长期记忆程序、数据、中间结果及最终运算结果的能力；能够完成各种算术、逻辑运算和数据传送等数据加工处理的能力；能够根据需要控制程序走向，并能根据指令控制机器的各部件协调操作；能够按照要求将处理结果输出给用户。
哈佛结构是为了高速数据处理而采用的，因为可以同时读取指令和数据（分开存储的）。大大提高了数据吞吐率，缺点是结构复杂。通用微机指令和数据是混合存储的，结构上简单，成本低。假设是哈佛结构：你就得在电脑安装两块硬盘，一块装程序，一块装数据，内存装两根，一根储存指令，一根存储数据……
是什么结构要看总线结构的。51单片机虽然数据指令存储区是分开的，但总线是分时复用得，所以顶多算改进型的哈佛结构。ARM9虽然是哈佛结构，但是之前的版本也还是冯·诺依曼结构。早期的X86能迅速占有市场，一条很重要的原因，正是靠了冯·诺依曼这种实现简单，成本低的总线结构。现在的处理器虽然外部总线上看是诺依曼结构的，但是由于内部CACHE的存在，因此实际上内部来看已经算是改进型哈佛结构的了。至于优缺点，哈佛结构就是复杂，对外围设备的连接与处理要求高，十分不适合外围存储器的扩展。所以早期通用CPU难以采用这种结构。而单片机，由于内部集成了所需的存储器，所以采用哈佛结构也未尝不可。现在的处理器，依托CACHE的存在，已经很好的将二者统一起来了。
争议
冯·诺伊曼结构这个词出自约翰·冯·诺伊曼的论文：First Draft of a Report on the EDVAC ， 于1945年6月30日。冯·诺依曼由于在曼哈顿工程中需要大量的运算，从而使用了当时最先进的两台计算机Mark I和ENIAC，在使用Mark I和ENIAC的过程中，他意识到了存储程序的重要性，从而提出了存储程序逻辑架构。虽然冯·诺伊曼的创见非常新颖，但冯·诺伊曼结构这个词，对冯·诺伊曼的合作伙伴、时人甚至先辈都不公平。
一份寇兰德·宙斯（Konrad Zuse）提出的专利应用就已在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）完整设计的论文。