上面这张图就是我们经常能在各种教材中看到的冯·诺伊曼体系结构。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
一、认识设备
输入设备: 键盘、鼠标、网卡、磁盘、摄像头……
输出设备: 显示器、磁盘、网卡、打印机……
存储器: 内存
CPU: 运算器+控制器
CPU在数据层面,不会和外设直接打交道,只会和内存进行交互。
任何程序运行时都必须加载到内存,这是体系结构决定的。
二、生活中的实例
我们生活中也会遇到冯·诺伊曼体系结构的实例,如:你与朋友之间的通信
当你与朋友在电脑上进行微信聊天时,你们两个人的电脑都是遵循冯·诺依曼体系结构的。因此当你向他发送信息时,你的键盘充当输入设备,你的网卡和显示器充当输出设备,经过网络送达你朋友,你朋友的网卡充当输入设备,你朋友的显示器充当输出设备。
刚开始你在键盘当中输入消息,键盘将消息加载到内存,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了。
在键盘将消息加载到内存后,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节),之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。
三、内存的意义
下图是没有内存的情况:
这种情况下就会有一个问题:输入设备与输出设备的速度相比较CPU来说是很慢的,根据木桶原理,这就会导致计算机的整体效率取决于输入设备与输出设备。这样的话就会造成CPU会在有些时间段内是没有数据进行操作的,因此引入了内存。
内存有个特点就是,比输入设备和输出设备要快很多,但是比CPU又要慢。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,能够在该体系结构当中就起到一个缓冲的作用。
现在该体系的运行流程就是:用户输入的数据先放到内存当中,CPU读取数据的时候就直接从内存当中读取,CPU处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进行输出显示。
于是就形成了最终的冯诺依曼体系结构。
内存实际上就是CPU和外设之间的巨大缓冲区
四、内存提高冯•诺依曼体系结构效率的方法
在这里大多数人有一个疑惑就是,先将输入设备的数据交给内存,再由内存将数据交给CPU,这个过程真的比CPU直接从输入设备获取数据更快吗?
说明这个问题之前,我们首先需要知道:内存具有数据存储的能力。虽然内存的大小只有4G/8G,但是既然内存有大小,那么它就有预装数据的能力,而这就是提高该体系结构效率的秘诀。
这里不得不说到的就是局部性原理:根据统计学原理,当一个数据正在被访问时,那么下一次有很大可能会访问其周围的数据。所以当CPU需要获取某一行数据时,内存可以将该行数据之后的数据一同加载进来,而CPU处理数据和内存加载数据是可以同时进行的,这样下次CPU就可以直接从内存当中获取数据。
输出数据的时候也一样,CPU处理完数据后直接将数据放到内存当中,当输出设备需要时再在内存当中获取即可,这也就有了我们平常所说的缓冲区的概念。例如,缓冲区满了才将数据打印到屏幕上,使用fflush函数将缓冲区当中的数据直接输出之类的,都是将内存当中的数据直接拿到输出设备当中进行显示输出。