当代的计算机,本质上都是一堆硬件的集合(CPU、内存、磁盘、显卡等),这些硬件并不是毫无章法的堆放在一起,而是以冯.诺依曼体系结构来构成计算机的基本单元。
在计算机中,都是以二进制形式进行交互,我们是无法直接与内存或者CPU
交互的,所以需要有输入设备,而计算机将数据处理之后,也是二进制形式,所以也有了输出设备。
这两个都是属于计算机的外设。
一般来说,存储器指的是内存和外存,但是对于CPU
而言,类似于磁盘、U盘这样的外存,是属于输入输出设备的,所以这里的存储器指的是内存。
在计算机,我们从外设将输入导入到内存中,然后再由运算器对我们的数据进行计算(算数运算、逻辑计算)
而什么时候将数据写入存储器,再又什么时候将数据导入中央处理器,或者又什么时候将处理完毕的数据传给存储器,再由存储器交给输出设备,这些过程都需要有硬件来进行控制,而控制器就是做这些工作。
这五大单元都各种有着各种的功能,都是独立的个体,然后用系统总线或I/O总线连接起来让其能交互,这就是冯.诺依曼结构的主要组成部分
通过存储器金字塔可以看出,离cpu越远,存储的容量越来大,效率越来越低,我们的输入输出设备,就处于金字塔的底层,他们的效率和cpu的效率完全不在一个级别,如果让他们直接和cpu交互,那势必会拖慢cpu的效率,从而我们计算机的整体效率就会以输入输出设备为主了,导致计算机的效率就会十分低下。
在此情况下,引入了一个比输入输出设备快,比cpu稍慢的内存,让输入设备先把数据读取到内存当中,然后cpu再从存储器拿数据,运算器将数据处理完毕之后,在交给存储器,最后再由存储器交给输出设备。那这样就能适配硬件层面上cpu和外设的速度差。
如果没有存储器,cpu直接对接输入输出设备,这种工作方式就是串行,一个环节影响着一个环节
有了存储器之后,数据可以预加载到内存中,要计算的时候就直接去内存拿数据即可,那这样就能加载数据和计算数据并行,从而在一定程度上提高效率。在这个过程中,存储器可以看成一个硬件级别的缓存空间。
那为何不将所有的存储设备造成寄存器级别的呢?
这在理论上可行,但势必会将计算机的造价变得十分高,过高的价格,那就不会被普及,不便于计算机的整体发展。有了内存的存在,就能以较小的成本,造出满足我们日常需求的计算机。
这就好比我们现在开的小汽车,基本就是烧油或者电驱动,这些每隔一段时间就要加油或者充电。要是用上核动力,那岂不美哉?那为何不普及呢?
这在技术层面是可以实现的,但是成本巨大,安全性不高,不利于小汽车的普及。
有了上述理论知识,就可以理解为什么程序要运行,必须先从磁盘加载到内存上当中
我们的代码在输入设备里面,要运行需要cpu的计算,这个过程就必须经过内存,这是冯诺依曼体系结构规定。
所有的软件都必须遵守硬件结构,硬件属于计算机下限和边界,软件是上限,不管软件多牛,都得遵守规定!
假设我们使用微信和别人聊天,这整个数据是如何流动的呢(不考虑网络和软件)?
这两台计算机,都是冯诺依曼体系结构,所有可以看作两个冯诺依曼体系结构交互。
当我们要给对方发信息的时候,这时候的输入设备就是键盘
输入的内容加载到内存,发送的消息里面不仅仅有消息,还有是谁发送的消息、发送消息的时间等,这些数据经过cpu打包计算之后再写回内存,最后发送在输出设备里面。
这里的输出设备不仅仅是显示器,本质上是发送到了网卡当中,显示器只是顺便的
这样我们的消息就发送出去了,那这时候,对方的输入设备就是网卡,输入设备将数据加载到内存,经过cpu的处理(解包、解压)再返回内存,最后由内存发送给输出设备,这时候对方就能看到我们所发送的消息
再假设,我们平时可能要发送一些文件给对方,这个文件是存储在磁盘当中,当我们拖拽这个文件发送的时候,这时候的输入设备就是磁盘
再经过这个体系发送给对方,当对方收到之后,这个文件并不是打开的,只是有一个图标,需要对方接收下载才能查看
如果对方当时并没有接收,第二天才接收,这时候这个文件还是存在的,这说明这个文件并不是在内存或者cpu,因为内存或者cpu属于掉电易失性存储。所以这个文件其实是在我们的磁盘上,这时候磁盘就属于输出设备
这整个过程,就是冯诺依曼体系结构
本文到此结束,码文不易,还请多多支持!!!