本文已收录到 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 芯片)
相干文章:
- 计算机的存储器金字塔长什么样?
- 我把 CPU 三级缓存的机密,藏在这 8 张图里
3. 总结
如果说图灵机形容的是计算机的形象模型,那么冯·诺依曼架构则是对图灵机这个形象模型的实现架构。 冯诺依曼架构确立了古代电子计算机的根底和构造,学习计算机组成原理,其实就是学习和拆解冯诺依曼架构。计算机组成原理怎么学,咱们下回说。关注我,带你理解更多。
参考资料
- Von Neumann architecture —— Wikipedia
- Von Neumann Bottleneck —— Wikipedia
- Harvard Architecture —— Wikipedia
- Stored-program Computer —— Wikipedia
- EDVAC —— Wikipedia
- EDIAC —— Wikipedia
- Delay-line memory —— Wikipedia
- Colossus Computer —— Wikipedia
- Manchester Baby —— Wikipedia