还记得多年前跟你手牵手,你都害羞的不敢抬头......................................................................
文章目录
前言
本文详细介绍了冯•诺依曼体系结构的原理,阐述了内存作为缓冲区如何提高系统效率,通过局部性原理解释了内存预加载数据的意义,并以QQ聊天为例展示了数据在冯•诺依曼架构中的流动过程。同时,讨论了程序加载到内存的必要性和相关输入输出设备的角色。
一、【冯 • 诺依曼体系结构的介绍】
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系,实际上冯 • 诺依曼体系结构是一种计算机的设计结构,且广泛应用与当代计算机的设计理念中,下面是它的结构:
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成:
- 输入单元:包括键盘, 鼠标,扫描仪, 写板等
- 中央处理器(CPU):含有运算器和控制器等
- 输出单元:显示器,打印机等
注意: 同种设备在不同场景下可能属于输入设备,也可能属于输入设备。
关于冯诺依曼,必须强调几点:
- 这里的存储器指的是内存
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
- 一句话说完,所有设备都只能直接和内存打交道,不能直接和CPU进行作用。
根据冯诺依曼体系结构图,我们可以知道,站在硬件角度或是数据层面上,CPU只和内存打交道,外设也只和内存打交道。到这里我们也可以说明一个问题:为什么程序运行之前必须先加载到内存?
因为可执行程序(文件)是在硬盘(外设)上的,而CPU只能从内存当中获取数据,所以必须先将硬盘上的数据加载到内存,也就是必须先将程序加载(实际上也就是拷贝,从硬盘拷贝到)到内存。
为什么说其是一种被广泛采用的计算机设计结构呢?我们来看一下它的设计过程。
二、【冯 • 诺依曼体系结构的设计过程】
我们都知道设计计算机的目的就是为了解决人的问题,而要解决问题,首先需要将数据或是问题输入到计算机当中,所以计算机必须要有输入设备。计算机解决完问题后还需要将计算结果输出显示出来,所以计算机必须要有输出设备。计算机通过输入设备得到数据,数据在计算机当中进行一系列的算术运算和逻辑运算后,通过输出设备进行输出,于是就得到了以下流程图。
但是计算机当中只有算术运算功能和逻辑运算功能是不够的,还需要有控制功能,因为要控制何时从输入设备获取数据,何时输出数据到输出设备等。对应到C语言当中,算术运算就完成一系列的加减乘除,而逻辑运算就对应于一系列的逻辑与逻辑或等,控制功能就对应于C语言当中的判断、循环以及各个函数之间的跳转等等。
而我们后人就将这个具有算术运算功能、逻辑运算功能以及控制功能的这个模块称为中央处理器,简称CPU。
但是这里有个问题,就是输入设备和输出设备相对于中央处理器来说是非常慢的,于是在当前这个体系整体呈现出来的就是,输入设备和输出设备很慢,而CPU很快,根据木桶原理,那么最终整个体系所呈现出来的速度将会是很慢的。
所以当前这个体系结构显然是不合适的,于是我们就不让输入设备和输出设备直接与CPU进行交互,而在这中间加入了内存。
内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。
现在该体系的整体运行流程就是:
首先,用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。于是就形成了最终的冯诺依曼体系结构。
注意: 这里存储器只是内存,不包括外存(外存一般指磁盘,硬盘等外设)。
那么内存是如何起到缓冲作用并进而提高冯•诺依曼体系结构效率的呢?
三、【内存是如何提高冯•诺依曼体系结构效率的】
在这里大多数人有一个疑惑就是,先将输入设备的数据交给内存,再由内存将数据交CPU,这个过程真的比CPU直接从输入设备获取数据更快吗?
说明这个问题之前,我们首先需要知道:内存具有数据存储的能力。虽然内存的大小只有4G/8G,但是既然内存有大小,那么它就有预装数据的能力,而这就是提高该体系结构效率的秘诀。
这里不得不说到的就是局部性原理:根据统计学原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据。所以当CPU需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据。输出数据的时候也一样,CPU处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可,这也就有了我们平常所说的缓冲区的概念。
这里我们举两个例子:
例如,缓冲区满了才将数据打印到屏幕上,使用fflush函数将缓冲区当中的数据直接输出之类的,都是将内存当中的数据直接拿到输出设备当中进行显示输出。
更加通俗的例子是,我们可以把内存当作快递小哥,我们知道快递小哥不可能收到一个快递就去进行派送,更多情况下,是收到很多快递以后,再进行配送,这里快递小哥就起到了缓冲的作用。
再让我们看一个生活中的例子:
生活中我们用QQ和朋友聊天时,我们电脑上想要发送的信息是如何发送到朋友的电脑上的呢?要使用QQ,首先需要联网,而你和你的朋友的电脑都是冯诺依曼体系结构,在你向朋友发送消息这个过程中,你的电脑当中的键盘充当输入设备、显示器和网卡充当输出设备,你朋友的电脑当中的网卡充当输入设备、显示器充当输出设备。
刚开始你在键盘当中输入消息,键盘将消息加载到内存,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了。
在键盘将消息加载到内存后,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节),之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。
顺便说一下:
我们经常说CPU当中有寄存器,实际上寄存器不仅仅在CPU当中存在,在其他外设当中也是有寄存器的。例如,当我们敲击键盘时,键盘是先将获取到的内容存储在寄存器当中,然后再通过寄存器将数据写入内存当中。在物理层面上,各个硬件单元之间是通过总线连接的,外设与内存之间的总线叫做IO总线,内存与CPU之间的总线叫做系统总线。
总结
本篇博客到这里就结束了,感谢观看!
................................................................................或许你会有一天怀念,可是我已 我已不在
————《小镇姑娘》