摘要:在1944年,约翰·冯·诺依曼(John von Neumann)担任洛斯阿拉莫斯项目的计算负责人。他访问了位于宾夕法尼亚大学摩尔电气工程学院的美国陆军弹道研究实验室,寻找计算设备。在那里,他发现ENIAC的设计已经完成,而EDVAC的设计刚刚开始。ENIAC
在1944年,约翰·冯·诺依曼(John von Neumann)担任洛斯阿拉莫斯项目的计算负责人。他访问了位于宾夕法尼亚大学摩尔电气工程学院的美国陆军弹道研究实验室,寻找计算设备。在那里,他发现ENIAC的设计已经完成,而EDVAC的设计刚刚开始。ENIAC被设计用来计算第二次世界大战的弹道发射表。他在接下来的一年半里担任EDVAC项目的顾问,并撰写了《EDVAC报告的初稿》。在这份文件中,他定义了自此以来几乎所有计算机的概念架构。尽管冯·诺依曼是唯一的署名作者,但设计ENIAC的J·普雷斯珀·埃克特(J. Presper Eckert)和约翰·W·毛克利(John W. Mauchly)声称,他们设计了EDVAC架构中根本性的革命性存储程序方面。
冯·诺依曼架构描述了计算机的以下主要组件的角色、职责和相互作用:
- **算术逻辑单元(ALU)**:实现基本的功能能力,如数学和逻辑运算(+ - / x AND OR)。
- **控制单元**:接收和解释程序指令,直接执行这些指令或使其他组件(如ALU)执行这些指令。
- **内存**:保留数据,以便在稍后使用。这些数据包括程序。
- **输入/输出**:用于输入和输出数据的机制。
- **总线**:提供所有组件之间的通信。
《初稿》在许多方面都值得注意。
作为一个定义明确的概念架构示例,它值得深入研究。它预见了许多现代设计技术,例如定义系统隐喻的实践——冯·诺依曼在整篇论文中与大脑进行了类比。对各种架构组件角色和职责的清晰描述,而不涉及实现细节,表明冯·诺依曼清楚过早进入细节的危险。
这篇论文与其他作品之间的相似之处显而易见。将其与查尔斯·巴贝奇的《分析机草图》和阿兰·图灵1936年的论文《可计算数及其应用于决策问题》并行阅读时,可以立即发现许多相似之处。
架构本身表明其作者对实际问题解决有着坚定的把握。ALU的包含抛弃了图灵机的理论简单性,但减少了操作机器所需软件的复杂性——这是一个绝妙的折衷。最终,最重要的创新是能够将程序存储在内存中。
在外部编程的机器中,磁带或卡片一次读取一个符号,机器立即执行符号所指示的操作。如果机器需要改变指令执行的顺序,则必须将磁带倒回或推进到正确的位置。推进和倒回磁带的过程在许多外部编程的机器中并未实现。在实现这一过程的机器中,进程充其量是繁琐的,且速度慢,因此其使用保持在最低限度。
而在内部存储程序的机器中,机器将整个程序读取到自己的内存中,然后开始执行程序。中间计算可以与程序存储在同一内存中。这种方法使机器具有更大的灵活性,程序指令可以以各种顺序执行,控制可以非常低成本地从一个位置跳转到另一个位置。此外,程序甚至可以在执行时重新写入内存。正如任何程序员会告诉你的那样,这是一把双刃剑。内存管理自那时以来一直是程序员生活中的痛苦。与这些相同能力的外部编程机器相关的问题使得虽然尝试过一定程度的实现,但从未成功。
如果将图灵的论文与冯·诺依曼的《初稿》进行比较,很明显,冯·诺依曼架构是图灵理论通用机器实现的概念模型。两者之间的相似性显著。然而,这并不意味着冯·诺依曼受到了图灵的影响。计算机历史上充满了被重新发现的概念和想法,因此我想冯·诺依曼可能并不知道图灵在可计算性方面的工作,但考虑到他在1930年代曾邀请图灵留在普林斯顿,这种可能性不大。更有可能的是,J·普雷斯珀·埃克特和约翰·W·毛克利独立提出了存储程序的概念,但未能把握其根本重要性。在数学上,两人都无法与图灵相提并论,虽然冯·诺依曼在同一领域,显然会理解通用图灵机的含义。
来源:纵横历史