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