首页 > 编程知识 正文

冯诺依曼计算机的基本思想,冯诺依曼计算机的工作原理

时间:2023-05-04 13:11:23 阅读:117330 作者:3593

作者《洁白的铅笔,款待客人的时间》《深入挖掘电脑的构成原理》专栏作者

特别说明:本文为专栏免费试读部分,如有侵权,可联系后台删除

学习计算机的组成原理,到底是在学什么呢? 这件事,一两句话还说不清楚。 但是没关系。 首先,从看起来没有“装电脑”的技术含量开始,弄清楚电脑是由什么组成的吧。

不知道你有没有自己做过“装机”这件事。 2019年的今天,大部分人使用的电脑应该是已经组装好的“品牌机”。 如果我们把表放回20世纪80年代到90年代,很多早期的电脑爱好者会自己购买各种各样的电脑部件,把自己的电脑放进去。

计算机的基本硬件组成

早年,自己组装计算机首先需要三个大部件:处理器、内存和主板。

在这三者中,首先谈谈CPU。 这是计算机最重要的核心部件,全名我一定知道。 称为中央处理单元。

为什么CPU是“最重要的”呢? 因为计算机的“计算”都由CPU进行。 当然,CPU也是整个计算机中最昂贵的部分之一。

第二个重要附件是内存。 你写的程序、打开的浏览器、正在运行的游戏,都要载入内存才能运行。 程序读取的数据、计算的结果也必须放入存储器。 内存越大,可以加载的当然也越多。

内存中存储的程序和数据需要读入CPU,CPU计算后,将数据写回内存。 但是,不能将CPU直接连接到内存。 反之亦然。 于是,我带来了最后一块大的——主板(Motherboard )。

主板有很多种,有时有几十到几百个插槽。 我们的处理器必须连接到主板,内存也必须连接到主板。 主板芯片组(Chipset )和总线(Bus )解决了处理器和内存之间的通信问题。

芯片组控制数据传输的流程,也就是数据从哪里发送到哪里。 总线是实际数据传输的高速公路。 因此,“总线速度”(Bus Speed )决定了数据传输的速度。

有了三个大的,连接电源供电,计算机就差不多能跑了。 但是,目前缺乏各种输入输出设备,即所谓的I/O设备。 如果你用的是自己的电脑,显示屏是必不可少的。 只有有了显示器,才能看到计算机输出的各种图像和文字。 这就是所谓的输出设备。

同样,鼠标和键盘也是必不可少的附件。 你可以这样输入文本来写这篇文章。 这些是所谓的输入设备。

最后,你自己准备的电脑还带硬盘。 以这种方式,各种数据被永久保存。 大多数人在自己的机器上安装机箱,打开风扇,解决灰尘和散热问题。 但是机箱和风扇并不是计算机的必备硬件。 拿纸箱,外面放电风扇也一样可以用。

因为我说了这么多,所以实际上你应该觉得显示器、鼠标、键盘、硬盘等等都不是计算机的必要部分。 想想看。 我们要是真的有I/O设备,能从计算机输入输出信息不就好了吗? 当然答案是肯定的。

你去过网吧吧? 不知道有没有注意到,很多网吧的计算机没有硬盘,而是直接通过局域网,读写远程网络硬盘中的数据。 我们日常使用的各种云服务,只要计算机通过网络通过SSH远程登录即可访问,所以也不需要配备显示器、鼠标、键盘等。 这样不仅可以节约成本,而且便于维护。

另一个特殊的设备是图形卡(Graphics Card )。 目前,使用图形界面操作系统的计算机在Windows、MAC操作系统和Linux中都必须具有图形卡。 也许有人会说,我安装的时候没有买显卡。 你能像电脑一样正常地跑啊。 那是因为现在的主板上有内置的显卡。

使用电脑玩游戏、绘图渲染、运行深度学习APP时,往往需要购买其他显卡才能连接到主板。 显卡之所以特殊,是因为显卡可以与CPU进行不同的“处理器”,也就是图形处理器(GPU )、GPU等各种“计算”任务。

鼠标、键盘、硬盘,所有这些都连接到主板上。 作为外部I/O设备,控制通过主板上的南桥芯片组与CPU的通信。 “南桥”芯片的名字很直观。 另一方面,主板上的位置通常位于主板的“南”。 另一方面,鼠标、键盘、硬盘等外部设备与CPU之间的通信作为“桥接器”。

既有南桥,也有应对自然的“北桥”。 是的,以前的主板通常也有“北桥”芯片,用于连接CPU和内存以及显卡之间的通信作为“桥”。 但是,随着时间的推移,当前主板上的“北桥”芯片的工作移动到了CPU内部,所以你再也看不到主板上的北桥芯片了。

cxddp体系结构

刚才我们谈到了计算机的硬件结构,这是指我们平时使用的电脑和服务器。 我们平时最常用的智能手机的构成也是这样吗?

我们的手机只有像安全数字内存卡(SD卡)这样具有硬盘功能的存储卡插槽,没有内存插槽或CPU插槽

。没错,因为手机尺寸的原因,手机制造商们选择把 CPU、内存、网络通信,乃至摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上。这种方式叫SoC,也就是 System on a Chip(系统芯片)。

这样看起来,个人电脑和智能手机的硬件组成方式不太一样。可是,我们写智能手机上的 App,和写个人电脑的客户端应用似乎没有什么差别,都是通过“高级语言”这样的编程语言撰写、编译之后,一样是把代码和数据加载到内存里来执行。这是为什么呢?因为,无论是个人电脑、服务器、智能手机,还是 Raspberry Pi 这样的微型卡片机,都遵循着同一个“计算机”的抽象概念。

这是怎么样一个“计算机”呢?这其实就是,计算机祖师爷之一cxddp(John von Neumann)提出的cxddp体系结构(Von Neumann architecture),也叫存储程序计算机。

什么是存储程序计算机呢?这里面其实暗含了两个概念,一个是“可编程”计算机,一个是“存储”计算机。

说到“可编程”,估计你会有点懵,你可以先想想,什么是“不可编程”。计算机是由各种门电路组合而成的,然后通过组装出一个固定的电路版,来完成一个特定的计算程序。一旦需要修改功能,就要重新组装电路。这样的话,计算机就是“不可编程”的,因为程序在计算机硬件层面是“写死”的。最常见的就是老式计算器,电路板设好了加减乘除,做不了任何计算逻辑固定之外的事情。

我们再来看“存储”计算机。这其实是说,程序本身是存储在计算机的内存里,可以通过加载不同的程序来解决不同的问题。有“存储程序计算机”,自然也有不能存储程序的计算机。典型的就是早年的“Plugboard”这样的插线板式的计算机。

整个计算机就是一个巨大的插线板,通过在板子上不同的插头或者接口的位置插入线路,来实现不同的功能。这样的计算机自然是“可编程”的,但是编写好的程序不能存储下来供下一次加载使用,不得不每次要用到和当前不同的“程序”的时候,重新插板子,重新“编程”。


▲著名的Engima Machine就用到了 Plugboard 来进行“编程

”可以看到,无论是“不可编程”还是“不可存储”,都会让使用计算机的效率大大下降。而这个对于效率的追求,也就是“存储程序计算机”的由来。

于是我们的冯祖师爷,基于当时在秘密开发的 EDVAC 写了一篇报告First Draft of a Report on the EDVAC,描述了他心目中的一台计算机应该长什么样。这篇报告在历史上有个很特殊的简称,叫First Draft,翻译成中文,其实就是《第一份草案》。这样,现代计算机的发展就从祖师爷写的一份草案开始了。

First Draft里面说了一台计算机应该有哪些部分组成,我们一起来看看。

首先是一个包含算术逻辑单元(Arithmetic Logic Unit,ALU)和处理器寄存器(Processor Register)的处理器单元(Processing Unit),用来完成各种算术和逻辑运算。因为它能够完成各种数据的处理或者计算工作,因此也有人把这个叫作数据通路(Datapath)或者运算器。

然后是一个包含指令寄存器(Instruction Reigster)和程序计数器(Program Counter)的控制器单元(Control Unit/CU),用来控制程序的流程,通常就是不同条件下的分支和跳转。在现在的计算机里,上面的算术逻辑单元和这里的控制器单元,共同组成了我们说的 CPU。

接着是用来存储数据(Data)和指令(Instruction)的内存。以及更大容量的外部存储,在过去,可能是磁带、磁鼓这样的设备,现在通常就是硬盘。

最后就是各种输入和输出设备,以及对应的输入和输出机制。我们现在无论是使用什么样的计算机,其实都是和输入输出设备在打交道。个人电脑的鼠标键盘是输入设备,显示器是输出设备。我们用的智能手机,触摸屏既是输入设备,又是输出设备。而跑在各种云上的服务器,则是通过网络来进行输入和输出。这个时候,网卡既是输入设备又是输出设备。

任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中,而所有的现代计算机也都是基于这个基础架构来设计开发的。

而所有的计算机程序,也都可以抽象为从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,最终把结果输出到输出设备中。而我们所有撰写的无论高级还是低级语言的程序,也都是基于这样一个抽象框架来进行运作的。

▲cxddp体系结构示意图

总结
可以说,cxddp体系结构确立了我们现在每天使用的计算机硬件的基础架构。因此,学习计算机组成原理,其实就是学习和拆解cxddp体系结构。

具体来说,学习组成原理,其实就是学习控制器、运算器的工作原理,也就是 CPU 是怎么工作的,以及为何这样设计;学习内存的工作原理,从最基本的电路,到上层抽象给到 CPU 乃至应用程序的接口是怎样的;学习 CPU 是怎么和输入设备、输出设备打交道的。

学习组成原理,就是在理解从控制器、运算器、存储器、输入设备以及输出设备,从电路这样的硬件,到最终开放给软件的接口,是怎么运作的,为什么要设计成这样,以及在软件开发层面怎么尽可能用好它。

--END--

关注公众号百问科技(ID:baiwenkeji)第一时间阅读嵌入式干货。
技术交流加个人威信13266630429,验证:CSDN博客

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。