冯诺依曼体系结构
我想大家学计算机的同学或多或少应该都听老师提起过过冯诺依曼这个人,今天我们这篇文章主要来给大家讲解一下冯诺依曼体系结构以及帮助大家更加深刻理解冯诺依曼体系结构
我们常见的计算机,比如笔记本电脑。我们不常见的计算机,比如服务器,他们大部分都遵守冯诺依曼体系。
下面我们来看一张冯诺依曼体系结构的图片:
截至目前,我们所认识的计算机,都是由一个个硬件组件而成的。
- 输入设备:键盘、鼠标、摄像头、麦克风、网卡、硬盘
- 中央处理去(cpu):含有运算器与控制器等
- 输出设备:显示器、声卡、喇叭、网卡、硬盘
体系结构的工作原理
为了能够保证数据能够显示到输出设备上,一般会经历如下几个步骤:
用户输入的数据会先预加载到内存中,cpu读取数据的时候就会直接从内存中读取,cpu处理完数据后又回将其写回进内存中,然后内存再将被cpu处理过的数据预写入到输出设备中,最后我们的数据就会显示到输出设备上。
木桶原理
大家知道了冯诺依曼体系结构的工作原理之后心里可能会存在一些问题:
为什么我们这里不直接将用户输入的数据交给cpu,而是将用户输入的数据先加载到内存,再通过内存将数据交给cpu呢?并且为什么不由cpu将数据直接给输出设备,反而也要通过内存将数据交给输出设备呢?
首先我们需要明白:cpu的运行速度是非常快的,它的运行速度是纳秒级别,内存的运行速度是微秒级别,而输入输出设备的运行速度是毫秒级别。cpu与输入输出设备的运行速度相差的非常大。
不知道大家有没有听说过木桶原理:
木桶原理是由美国管理学家彼得提出的。说的是由多块木板构成的木桶,其价值在于其盛水量的多少,但决定木桶盛水量多少的关键因素不是其最长的板块,而是其最短的板块。
由于输入输出设备的运行速度很慢,而cpu的运行速度很快,根据木桶原理如果输入输出设备与cpu直接交互那么最终整个体系所呈现出来的速度将会是很慢的。
因此在冯诺依曼体系结构中,为了不让输入设备与输出设备直接与cpu进行交互,我们的内存就出现了。
内存它相对于输入设备和输出设备要快很多,但是比CPU又要慢一些。现在内存就处于慢设备和快设备之间,是一个不快也不慢的设备,从而它就充当了该体系结构中的缓冲区。
内存是如何充当缓冲区的
- 站在数据层面上:cpu不和外设打交道,直接和内存打交道
- 站在外设角度:数据不和cpu直接打交道,直接和内存打交道
- 站在内存角度:内存是计算机数据的核心。
关于冯诺依曼,必须强调几点
- 这里的存储器指的是内存
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
- 句话,所有设备都只能直接和内存打交道。
我们对于冯诺依曼体系结构的理解,不能够只停留在概念上,要深入到对软件数据流理解上。
下面我们通过生活中的实例来加强对冯诺依曼体系结构的理解。
你用QQ和朋友聊天时数据的流动过程
我们使用QQ与朋友进行聊天,都是需要联网的,而你和你的朋友的电脑都是冯诺依曼体系结构,在你向你朋友发送消息的这个过程中,你电脑中的键盘相当于输入设备,显示器和网卡相当于输出设备,而在你朋友的电脑中,他(她)电脑上的网卡相当于输入设备,显示器相当于输出设备。
刚开始你在键盘当中输入你要发送的消息,键盘将这些消息加载到内存中,此时你的显示器就可以从内存获取消息进而显示在你自己的显示器上,此时你就能在你自己的电脑上看到你所发的消息了。
在键盘将消息加载到内存后,CPU从内存获取到消息后对消息进行各种封装,然后再将其写回内存,此时你的网卡就可以从内存获取已经封装好的消息,然后在网络当中经过一系列处理(这里忽略网络处理细节),之后你朋友的网卡从网络当中获取到你所发的消息后,将该消息加载到内存当中,你朋友的CPU再从内存当中获取消息并对消息进行解包操作,然后将解包好的消息写回到内存,最后你朋友的显示器从内存当中获取消息并显示在他的电脑上。