一套用了 70 年的计算机架构 —— 冯·诺依曼架构

一套,计算机,架构,依曼 · 浏览次数 : 561

小编点评

## 冯诺依曼架构:计算机组成原理的桥梁 本文深入探讨了图灵机模型与冯·诺依曼架构之间的关系,以及冯诺依曼架构如何影响现代计算机的架构。 **1. 冯诺依曼架构:计算机通用架构的基石** 冯·诺依曼架构是电子计算机通用架构的起源,它将通用计算机定义为采用二进制格式、存储程序和由 5 个硬件组成的基本架构。 * **指令和数据存储在存储器中,而不是插线板中**,减少了数据传输的成本和延迟。 * **运算器与存储器之间存在巨大的速度差**,导致 CPU 需要不断地等待数据传输。 * 为了解决冯诺依曼瓶颈, modern计算机采用优化策略,例如增加高速缓存、指令缓存和数据缓存等技术来提升性能。 **2. 图灵机模型与冯诺依曼架构的联系** 图灵机模型是一个抽象的计算机模型,它描述了计算机能执行的任务。冯诺依曼架构则是对图灵机模型的实现架构,它将图灵机模型的抽象概念映射到现实计算机架构中。 **3. 总结** 冯诺依曼架构是现代计算机组成原理的重要基础,它不仅是计算机科学发展的重要里程碑,也是理解计算机内部机制的重要桥梁。了解冯诺依曼架构能够让我们更深入地理解现代计算机的架构和工作原理。

正文

本文已收录到  GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群。

前言

大家好,我是小彭。

上一篇文章里,我们讨论了可计算问题与图灵机的计算机模型。在理解了图灵机模型后,我们将从和图灵同时代的另一位计算机科学家提出的 “冯·诺依曼架构” 开始,正式开始计算机组成原理的核心内容。

那么,冯·诺依曼架构是怎样的结构呢,冯·诺依曼架构是基于图灵机的吗,我们现在用的手机和电脑还在使用冯·诺依曼架构吗?今天我们将围绕这些问题展开。


学习路线图:


1. 计算机的早期历史

在 1936 年,艾伦·图灵在论文《论可计算数及其在可判定性问题上的应用》中开创性地提出了计算机的通用逻辑模型 —— 图灵机模型。这一理论深刻地影响了第一代计算机科学家,更多能够实现计算功能的计算机被制造出来,图灵也因此被誉为 “计算机科学之父”。

随着计算机的元器件从继电器升级到电子管(也叫真空管),计算机也从 “机电” 时代进入到 “电子” 时代。第一台电子计算机一般认为是 ABC( Atanasoff-Berry Computer),然而它与其他早期的计算机一样,都是 不可重新编程 的(参考资料上的用词是 “不可编程”,我认为 “不可重新编程” 更恰当)。一台计算机只能执行一个特定的程序,如果需要修改程序功能,就需要将整个计算器拆开,然后重新组装电路。

到了 1943 年,Colossus Mark I 计算机(巨人 1 号)在英国 Bletchley 公园(二战时的密码破译机构)被建造出来,以破解纳粹通信,好家伙一口气造了 10 台。 Colossus Mark I 被认为是第一台可编程的电子计算机,编程方法就是使用大量的开关和插线板(PlugBoards)。 但 Colossus Mark I 并不是通用计算机,它只被设计用于执行密码分析相关的计算。

Colossus Mark I

—— 图片引用自 Wikipedia

直到 1945 年,John Mauchly 和 J. Presper Eckert 在美国宾夕法尼亚大学建造了 ENIAC(Electronic Numerical Integrator and Computer,中译:埃尼亚克), ENIAC 被认为是第一台可编程的通用电子计算机,也被认为是第一台现代意义上的计算机。 但是,ENIAC 和 Colossus Mark I 一样都使用插线板编程,虽然不需要拆掉整台计算机来重新编程,但是编程效率依然非常低,据说一个简单程序在 ENIAC 上编程最多要花费三个星期。

这对于早期异常昂贵的计算机来说,需要停机这么长时间来重新编程是无法接受的。人们迫切需要一种更高效更灵活的编程方式,有人开始研究 使用存储器来保存程序和程序处理的数据。 在 1944 年,ENIAC 的发明者之一 J. Presper Eckert 发明了一种基于水银管的存储器,这为后来的存储程序概念提供了实现基础。

ENIAC

—— 图片引用自 Wikipedia

在建造 ENIAC 的同时,Mauchly 和 Eckert 也在同步研究一种新设计 EDVAC,并向 John von Neumann(冯·诺依曼)提出咨询。冯·诺依曼也参与到 EDVAC 项目中,并且写了一份著名的内部文档 《First Draft of a Report on the EDVAC》 ,详细阐述了 “存储程序计算机(Stored-program Computer)” 的概念,这就是后来人们所说的 “冯·诺依曼架构”。

后来,他们在 1947 年对 ENIAC 进行诸多改进,ENIAC 也成为了世界上第一台存储程序计算机。而 1948 年建造完成的 Manchester Baby 则被认为是世界上第一台基于冯·诺依曼架构的通用计算机。从 Baby 到现在 70 多年的时间,所有的单片机、PC 电脑、智能手机、服务器依然在遵循这一计算机架构。 现代所有的计算机科学上的发展都是在软件和硬件能力上做优化,根本上的计算机架构依然没有改变。 冯·诺依曼也因而被誉为 “电子计算机之父”。


2. 冯·诺依曼架构 —— 电子计算机的实现结构

2.1 什么是冯·诺依曼架构?

冯·诺依曼架构(Von Neumann Architecture) 是冯·诺依曼和其他人提出的电子计算机通用架构。冯·诺依曼架构将通用计算机定义为以下 3 个基本原则:

  • 1、采用二进制: 指令和数据均采用二进制格式;
  • 2、存储程序: 一个计算机程序,不可能只有一条指令,而是由成千上万条指令组成的。指令和数据均存储在存储器中,而不是早期的插线板中,计算机按需从存储器中取指令和取数据;
  • 3、计算机由 5 个硬件组成: 运算器、控制器、存储器、输入设备和输出设备。在最开始的计算机中,五个部件是围绕着运算器运转的,这使得存储器和 I/O 设备之间的数据传送也需要经过运算器。 而现代计算机中,五个部件是围绕着存储器运转的,这使得存储器和 I/O 设备可以直接完成数据传送,而不需要经过 CPU。

冯·诺依曼架构

—— 图片引用自 Wikepedia

在冯·诺依曼架构之前还有一个哈佛架构,现在说的比较少。两者的区别在于冯·诺依曼是将指令和数据存储在同一个存储器的不同位置,存在争用问题;而哈弗架构将指令和数据存储在不同存储器中,规避了争用问题,与 CPU L1 缓存将指令和数据分离的思想类似。

2.2 冯·诺依曼瓶颈

冯·诺依曼瓶颈的概念最早由 John Backus 在 1977 年的图灵奖领奖演讲中提出: 由于 CPU 和存储器之间共享同一个系统总线,并且 CPU 和存储器之间存在巨大的速度差,导致 CPU 需要不断地被迫等待数据读取或写入到存储器,因此遏制了 CPU 的吞吐量 (关于总线系统,我们后面会专门讲)。

要从根本上解决冯·诺依曼瓶颈,还是只能重新构建一套新的计算机体系,例如生物计算机、量子计算机。不过,目前它们都还处在非常原始的阶段。现代计算机体系只能采用优化策略来减弱冯·诺依曼瓶颈的影响,这些内容我们后面都会提到,例如:

  • 1、增加一个位于 CPU 和主内存之间的高速缓存
  • 2、将指令缓存和数据缓存分离
  • 3、CPU 分支预测
  • 4、将存储器集成到 CPU 芯片内部,以减少内存访问(SoC 芯片)

相关文章:


3. 总结

如果说图灵机描述的是计算机的抽象模型,那么冯·诺依曼架构则是对图灵机这个抽象模型的实现架构。 冯诺依曼架构确立了现代电子计算机的基础和结构,学习计算机组成原理,其实就是学习和拆解冯诺依曼架构。计算机组成原理怎么学,我们下回说。关注我,带你了解更多。


参考资料

与一套用了 70 年的计算机架构 —— 冯·诺依曼架构相似的内容:

一套用了 70 年的计算机架构 —— 冯·诺依曼架构

本文已收录到 GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star。技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群。 前言 大家好,我是小彭。 上一篇文章里,我们讨论了可计算问题与图灵机的计算机模型。在理解了图灵机模型后,我们将从和

Aveva Marine VBNET 编程系列-封装一个类

由于AM的marapi的大部分类实现了IDisposable接口,所有避免内存过大,用了一般需要dispose下 微软官方的解释: https://learn.microsoft.com/zh-cn/dotnet/api/system.idisposable?view=net-7.0 以下是MarD

像go 一样 打造.NET 单文件应用程序的编译器项目bflat 发布 7.0版本

现代.NET和C#在低级/系统程序以及与C/C++/Rust等互操作方面的能力完全令各位刮目相看了,有人用C#开发的64位操作系统: GitHub - nifanfa/MOOS: C# x64 operating system pro...,截图要介绍的是一个结合Roslyn和NativeAOT的实

[转帖]观察网络流量的工具-iptraf-ng

https://www.cnblogs.com/xuyaowen/p/linux-iptraf.html 最近看到vmlinux大神介绍了一款网络查看工具,感觉很好用,下面进行简要摘录: iptraf-ng 可以方便查看当前服务器网络状况:CentOS 7.0,采用了衍生版本iptraf-ng 。

chatgpt接口开发笔记1:completions接口

chatgpt接口开发笔记1:completions接口 序:写这一系列文章的动机来源于在部署Chanzhaoyu/**chatgpt-web**项目时发现,体验并不好,会存在多人同时提问时回答会夹断,上下文接不上的现象。同时希望搭建的项目能实现前后端分离。于是用webapi写了一套后端接口。我会把

推荐一个好用的.net开发框架

企业应用开发平台(Enterprise Develop Platform),以下简称EDP。EDP是一套集完整组织架构,全面权限体系,以及各类基础功能于一体的基于.net的企业应用开发平台。其最大的特点是将复杂的数据行列权限的实现通过简单且友好的编码方式面向开发人员,同时EDP还提供了全面的系统基础

如何在 Windows10 Professional 服务器上搭建自己的 Git 服务器。

一、简介 以前,在别家的公司,一般早就把源代码管理工具搭建好了,很少有机会自己搭建一套。最近,公司也许要把现在不少的源码进行管理,于是我打算自己搭建源代码管理服务器。说起源代码管理,当然有很多中解决方案,我个人偏向搭建一个 Git 服务器。毕竟这个自己用的比较多,也熟悉。而且,现在一提到源代码管理,

关于docker-compose up -d 出现超时情况处理

由于要搭建一个ctf平台,用docker一键搭建是出现超时情况 用了很多办法,换源,等之类的一样没办法,似乎它就是只能用官方那个一样很怪。 只能用一种笨办法来处理了,一个个pull。 打个比如: 打开相对应docker-compose.yml文件 可以看到image就是需要去下载的。那么此时你就可以

Blazor开发小游戏?趁热打铁上!!!

大家好,我是沙漠尽头的狼。 网站使用Blazor重构上线一天了,用Blazor开发是真便捷,空闲时间查查gpt和github,又上线一个 [正则表达式在线验证工具](https://dotnet9.com/tools/regextester) 和几个在线小游戏,比如 [井字棋游戏](https://

[转帖]Nginx 服务并发过10万的Linux内核优化配置

https://www.shuzhiduo.com/A/6pdDejeXzw/ 以下Linux 系统内核优化配置均经在线业务系统测试,服务器运行状态良好,用了一些时间整理,现和大家分享一下,如有那位高人看到配置上有问题,请给与指出! # Controls the use of TCP syncook