文章目录
- 何为冯·诺依曼体系
- 为什么要存在存储器(内存)
- 一、技术角度
- 二、成本角度
- 为什么软件程序在运行时必须加载到内存
- 运算器和控制器
- 运算器
- 控制器
- 解释你用QQ和朋友聊天的数据流动过程
何为冯·诺依曼体系
冯诺依曼体系结构是现代计算机的基础架构,它将计算机分为以下几个主要部分:
- 输入设备:键盘、鼠标、摄像头、磁盘、网卡等。
- 输出设备:显示器、音响、磁盘、网卡、显卡等。
- 存储器:内存。
- 运算器+控制器:CPU(中央处理器)。
为什么要存在存储器(内存)
按理说,计算机可以把要处理的数据通过输入设备交给 CPU 处理,处理好后再通过输出设备显示结果,但整个过程为何需要内存呢?
一、技术角度
-
CPU 内部有寄存器,其速度非常快,而 CPU 的运算速度 > 寄存器速度 > L1 ~ L3 Cache > 内存 > 外设(磁盘)> 光盘、磁带。因此,输入输出设备的速度相较于 CPU 是很慢的,如果直接把数据通过输入设备交给 CPU 处理,处理好后再通过输出设备显示结果,就会产生木桶效应。
-
计算机体系的效率不是由 CPU 决定的(尽管 CPU 很快),而是由输入输出这两个外设决定的,这就导致计算机的效率非常差,所以不能只把外设和 CPU 对接起来,这样的效率太低了。因此冯诺依曼就在输入输出和 CPU 之间添加了存储器来改变这一现状:
-
从数据角度看,外设不和 CPU 直接交互,而是和内存交互,CPU 也是如此。仅是添加存储器这个媒介就能解决效率低的原因是:
-
- 从硬件上,存储器的存在更好地适配了外设和 CPU 速度不均衡的特点。
-
- 因为存储器的存在,让软件的存在有了更大的生存空间和价值。
-
-
总结:内存在我们看来,就是体系结构的一个大的缓存,用于适配外设和 CPU 速度不均的问题!
二、成本角度
-
前面提到过,CPU 具有寄存器,而寄存器也具有存储数据的能力,为什么不用 CPU 的寄存器来充当这个内存呢,这样就不再需要单独添加内存了。从技术上谈是可以的,但这就要考虑成本了:寄存器的成本 >> 内存 >> 磁盘(外设)。如果用寄存器充当内存,光成本就要几十万元,真承担不起。而计算机之所以能蔓延全球,主要是其具有便宜和有效的特点。因此使用内存是最优选择,既适配了速度不均的问题,也经济实惠。
-
总结:使用内存可以达到用较低的成本,来获得较高的性能的特点。
为什么软件程序在运行时必须加载到内存
我们都知道,写好的软件在编译好后,要运行,必须要先加载到内存,但是为什么要先加载到内存呢?
因为 CPU 在和存储器的交互中,要不断读取数据,这些数据必须是在内存里的,因为 CPU 只和内存打交道,但是你编译好的 .exe 程序是文件,而这个文件在编译好后是在磁盘这个外设上的,所以 CPU 会要求你把程序加载到内存,从而实现交互。而这个操作是操作系统帮你完成的,会自动加载到内存上(预加载)。
总结:体系结构规定,CPU 只和存储器(内存)打交道,要先把数据加载到内存。
运算器和控制器
运算器
计算机的计算有两种:算数计算(+、-、*、/……)+ 逻辑计算(&&逻辑与、||逻辑或……)
控制器
控制器也是一个硬件,虽然外设和中央处理器在数据上没有交互,但并不代表它俩就没有交互。前面得知输入设备会把数据预装载到内存,如何和 CPU 进行交互,但是你怎么知道所有数据都被预装载了呢,针对没被预装载的数据,中央处理器就要和外设进行交互协商,而这个操作就是由控制器完成的,从而将数据尽可能加载到内存,或把数据从内存加载到外设。
几乎所有的硬件,只能被动地完成某种功能,不能主动地完成某种功能,一般都是要配合软件完成的(操作系统+CPU)
解释你用QQ和朋友聊天的数据流动过程
假设你和你的朋友进行 QQ 聊天,如何解释一个数据从你的输入到输出的整个数据流动过程呢?
因为你和朋友的计算机都是冯诺依曼体系,所以你们通信的本质就是从一个体系结构到另一个体系结构,你是从键盘上输入数据的,随后被读进(预装载)到内存中,CPU 从内存获取到消息后对消息进行各种封装(打包),然后再将其写回内存,在内存中把数据刷新到外设(显示器),同样也刷新到了网卡上,网卡再经过内部的网络转换(忽略具体细节),此时这些数据传到了你朋友的网卡上,此时网卡就充当了输入设备,并把数据加载到内存,此时 CPU 进行数据的解包并交给存储器,此时再把存储器刷新到你朋友的外设,即显示器。