作者:@小萌新
专栏:@Linux
作者简介:大二学生 希望能和大家一起进步!
本篇博客简介:简单介绍冯诺伊曼体系
冯诺伊曼体系
冯诺伊曼体系结构的合理性
我们在Linux的第一篇博客中讲解了第一台计算机的发明是为了解决导弹的弹道问题被发明出来的 即计算机被发明出来是为了解决我们的实际问题的
那么既然它被发明出来是要解决我们的实际问题的我们就需要一个输入设备将我们的问题输入进去
当计算机在内部进行一定的算术运算或者是逻辑运算之后把我们想要得到的结果返回给我们
怎么返回给我们呢? 这个时候我们显然就需要输出设备了
也就是说最简单的计算机体系至少需要这三个组成
输入设备 输出设备 运算器
但是显然我们只有运算器是不够的 因为这样子三个设备是孤立的三个单元
我们这个时候还需要一个控制器将这三个单元链接起来 控制何时输入 何时运算 何时输出 我们将这个设备叫做控制器
所以说后面的结构会变成这个样子
后面我们将这个具有运算和控制功能的设备赋予了一个新的名字 叫做cpu(中央处理器)
但是我们知道 cpu的运算能力是非常快的 而我们的输入输出则是非常慢的
这里就会引出一个矛盾 如果让输入输出设备和cpu直接连接的话效率就会变得非常低
于是我们后面想到了在输入和输出设备和cpu之间添加一个缓冲区 不让他们直接接触 这个缓冲区的效率一定要高于输入输出设备 它就是内存
加上了内存之后输入的数据直接写入到内存中 然后由内存与cpu沟通
经过了cpu的计算后再次写入内存中由内存写进输出设备
这样子就避免了cpu和输入输出设备的直接沟通 提高了效率
同时cpu中的控制器控制着整个计算机的运行
这样子我们就证明了冯诺依曼体系的合理性了
内存提高性能的原理
为什么明明输入设备到cpu只有一步
而输入设备到内存再到cpu有两步 输入设备到cpu的效率反而会比较慢呢?
这里我们就要提到深入理解计算机系统一书中提出的一个概念 局部性原理
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中
内存首先是一个存储设备 那么它肯定就有存储数据的能力
它可以在cpu处理一行数据的时候将下面几行的数据预先加载进来
根据局部性原理 这些数据是大概率要被使用的
而cpu能够同时处理数据和加载数据 这样子cpu就可以直接从内存中读取数据了
这就是内存能偶提高性能的原因
输出设备是也是一样的cpu处理完数据直接存放到内存中 当输出设备需要用的时候直接从内存中读取 这跟我们常说的缓冲区概念有所关联
输入缓冲区和输出缓冲区
输入设备输入数据之后数据并不能被直接读取
同样的 输出设备并不能直接输出处理完后的数据
输入的数据被存放在一个叫做输入缓冲区的地方
将被输出的数据存放在一个叫做输出缓冲区的地方
关于这两个概念 我的其他博客中有所设计 大家可以参考着理解
输入缓冲区
输出缓冲区
冯诺伊曼体系之间的交流
我们这里用QQ发送消息作为示例
两台电脑就是两个符合冯诺依曼体系的系统
首先我们通过键盘输入我们想要发送的信息
这个信息进入内存中
内存中的数据被cpu读取并处理最后返回到内存中(加密信息)
网卡读取内存中的数据输出到网络中
网络中的数据被另外一台计算机的网卡读取到之后进入内存中
内存中的数据被cpu读取并处理最后返回内存中(解密数据)
最后显示器上会显示内存中的信息 也就是我们发送的信息
从这个过程中我们可以发现
输入输出设备并不是固定死的 有的设备既能当输入设备也能当输出设备
相关知识
- 输入输出设备之间可以相互转换 比如说网卡在发送信息的时候是输出设备 在接受消息的时候就是输入设备了
- 其实不光是cpu中有寄存器 为了提高效率其他的外设中也有寄存器
- 在物理层面上 所有的设备都是通过一根总线相连的 外设与内存之间的线叫做io线 内存和cpu之间的线叫做系统总线
常见的输入设备:键盘、鼠标、网卡、硬盘、话筒、摄像头、扫描仪等
常见的输出设备:显示器、音响、网卡、硬盘、打印机等