冯诺依曼体系结构简单描述了一个计算机内部的主要构成。
主要由5部分构成:输入设备、输出设备、存储器、运算器、控制器
其中运算器和控制器在CPU中
输入设备:键盘、摄像头、话筒、磁盘、网卡…
输出设备:显示器、音响、磁盘、网卡…
运算器:算术运算、逻辑运算
控制器:CPU是可以相应外部事件的,协调外部就绪事件(如拷贝数据到内存,控制输出到哪…)
存储器:存储器就是内存
冯诺依曼体系结构就是 冯诺依曼提出的一个计算机的硬件体系结构,并且该结构一直沿用至今,绝大部分计算机如常见的笔记本、公司的服务器都由这个基本的硬件体系构成。
早期的计算机主要就是用来帮助人们解决计算问题的。而要解决问题,就要有数据的输入,计算就要涉及到数据的处理,最后把得到的结果显示出来就叫做输出。
那么有人会问,如果照这么说,直接设计成:输入设备 -> 中央处理器 -> 输出设备 不就行了吗?为什么加一个存储器,这不是自己设计复杂了吗?如下图,数据输入之后,直接在中央处理器中进行 算术运算或者逻辑运算,得到的结果直接输出
这里存在一个问题,我们直到CPU的访问速度是非常快的!一般来说
CPU 或 寄存器 >> 内存 >> 磁盘/SSD >> 光盘 >> 磁带
任意两个之间都是数量级的差距!
并且根据木桶原理,一个木桶盛水的多少,并不是取决于最高的那块木板,而是最短的那块木板。
所以这样设计的话,外设显然拖慢了中央处理器的节奏,导致整个计算机的运行效率取决于外设的效率。
内存可是个老好人,他在CPU和外设之间,速度既不得罪这边,也不得罪那边。正好可以帮助CPU和外设牵线搭桥~
另一方面,有了内存,可用的操作空间就大了,可以在内存中设置一些软件,提升硬件的整体效率!(操作系统)
第三点,考虑到经济原因,你总不能把你所有的存储介质都设置成寄存器吧,除非你非常有钱!大部分人其实还是倾向于经济实惠的东西。而内存的造价还算中等,一块4/8G的内存条加入,在操作系统等软件的支持下,整体的效率并不比寄存器慢哪去!
因此冯诺依曼体系结构就这样新鲜出炉了!
经过上面的结论,数据要被CPU读取,首先要从外设加载到内存,然后CPU直接去内存中读取数据。但是数据要先到内存再到CPU这个过程是怎么实现的呢?难道每一次CPU要读取数据都要通知一声内存,让内存去加载一部分数据吗?
外设的数据怎么加载到内存的?
这里其实就涉及到一个神秘的管理者了:操作系统
其实硬件软件是无法分开的,某些硬件的设计是为了兼容软件,软件的设计也是为了提高硬件的效率。因此,操作系统的作用就发挥了,操作系统会把可能用到的数据提前加载到内存中,这样CPU就直接可以去内存中找数据啦
每次CPU读取数据都要通知内存去提前加载外设数据吗?
这里涉及到一个原理:局部性原理,还记得我们说内存是连续的,一般来说,加载某些数据的时候,其周围的数据也会被加载进来。并且CPU访问数据和内存加载数据是可以一起进行的。因此CPU读取数据的时候,大部分情况可能用到的数据都被加载到内存了!
1、 CPU读取数据,都是从内存中读取
2、 CPU要处理数据,需要先讲外设中的数据加载到内存
而写好的程序也是数据啊,并且写好的程序(.exe)是存放在磁盘的!如果要运行必须要加载到内存,这是体系结构的特点决定的
其中数据从外设加载到内存,就是I
数据从内存输出到外设,就是O
这就是IO
我们不考虑网络
在小明给小红发消息的过程中,输入设备就是键盘,输出设备就是网卡
小红的电脑中,输入设备就是网卡,输出设备就是显示器
当小明给小红在输入框中输入消息之后,就已经被写入了内存,然后当小明点击发送的时候,CPU读取内存中的数据,对消息进行打包(如指定发送到哪里),然后输出到网卡。网卡通过网络发送给小红。
小红的网卡作为输入设备,接收到消息,然后将消息加载到内存,CPU去内存读取数据,把消息解包,得到消息里的内容,重新写回内存。内存再把消息输出到显示器,这样小红就可以看到小明发送的消息了~