1 冯诺依曼结构体系
1.1 冯诺依曼结构体系的一些解释
-
首先,存储器其实就是广义上讲的内存(不是硬盘空间),即内存条的容量
-
中央处理器就是我们所说的CPU
-
事实上现代计算机CPU的构造早就不是冯诺依曼结构体系中的CPU的构造了,现代CPU为了实现很多功能,增加了很多很多内容,但这里我们只讨论最初CPU的基本构造
-
运算器需要负责做最基本的运算,即算术运算和逻辑运算
-
算数运算其实就是+-*%(事实上CPU只有加法器,意味着更底层一点来说,CPU只会加法,其他所有的算术运算都是某种奇技淫巧和巧妙的电路设计得到的,这一点咱应该在学习C语言的时候就了解过了,当然,现代CPU已经有了乘法器和除法器这些了,并不会全部依赖于加法器)
-
而逻辑运算就是判断
true或者false -
其他的内容会在后面的小节中详细解释
1.2 输入输出设备与IO
-
我们的键盘,鼠标,硬盘,网卡,摄像头,麦克风,都算是输入设备,用于把数据输入到内存中
-
我们的显示器,网卡,硬盘,音响,都是输出设备,用于把处理过的数据输出出来
-
比方说,我们打开一个程序,这个程序储存在硬盘里,其实就是把这个程序的内容拷贝到内存中,换句话说就是硬盘向内存传输文件
-
更加本质上说,其实就是硬盘的数据被拷贝到了内存中,然后中央处理器会向内存中取数据,等到数据处理完之后,再交回给内存,最后再由内存输出给输出设备
-
我们站在内存的角度上讲,内存会从输入设备哪里拿到数据,同时内存又会把处理过的数据交给输出设备输出,这俩过程我们统称IO(Input & Output)
1.3 为什么一定要有存储器?
-
我们知道,CPU处理计算数据非常快,是纳秒级别的,即一秒的十亿分之一
-
我们假设,如果没有存储器会发生什么?
-
比方说我输入一串指令交给CPU处理,然后CPU处理完之后通过输出设备显示,然后我(人类)还得花个好几秒接收一下输出的内容
-
此时CPU就隔这空转好一会儿,啥也不干
-
于是整个计算机的效率,就因为人类输入太慢而被拖累了,而内存的引入,就是为了平衡一下人类和CPU之间效率差距过大的问题
-
当一个程序非常大,非常复杂,需要有很多前置条件和库文件的时候,难道我需要每次都手动输入进CPU吗?
-
于是,我们就设计出了内存这么个玩意,提前将常用的文件储存起来,如果CPU要用,就不需要等人类再传进来,直接找内存拿就行,人类则负责更加不那么常用且多样化的数据
-
换句话说,就是让内存帮人类干一些繁琐的活,更为复杂,需要用到人脑的活才归为人类输入
-
如果你有了解过最近的科技区新闻,咱们可以来思考一下,为什么AMD家的X3D版本的处理器,对游戏的CPU帧的提升这么大,甚至某些游戏可以让4090产生瓶颈呢(指9800X3D)?
-
其实就是因为X3D版本的处理器把三级缓存(和内存的原理一样,速度介于内存和二级缓存之间,详见存储层次图)扩大了很多很多,因为游戏有很多东西需要重复性的使用,大的三缓能储存更多内容方便CPU更快获取常用内容
-
非X3D版本的CPU因为三缓过小,常用数据把三缓挤满后,仍旧无法满足游戏的需要,CPU处理速度过快,但三级缓存太小了,导致CPU在获取某些数据时,只能从内存中取数据而不是三级缓存(CPU从三级缓存拿数据的速度比从内存中拿数据的速度块很多),就因此出现了瓶颈,导致CPU处理数据的效率降低了(并不是CPU处理不过来,而是向CPU输入需要处理的信息的速度太慢了)
-
而X3D版本的处理器改进了这个问题,扩大三缓之后,CPU处理数据的速度就不会因为三级缓存过小而产生瓶颈,因此进而能极大提升CPU帧了
-
回到原来的问题上,这也就间接说明了为什么CPU和人类之间需要隔一层内存了,甚至这也能解释为什么CPU中会出现三级缓存,二级缓存,一级缓存的设计
1.4 能不能把内存全部换成缓存?
- 当然不行,主要原因是缓存太贵了,如果把内存全部换成缓存,计算机制造成本就会直线上升,就好像说,我们传统方式是把系统装在硬盘里,然后今天我让你把系统装在内存里,能装!的确能装!但这么点大的内存也就装个系统,然后啥也没剩下了
1.5 数据流动
-
我们把运行软件的过程通过冯诺依曼结构体系细化,以此来理解数据流动
-
假设说我们在玩一款网络游戏
-
打开网络游戏就是把网络游戏的相关代码和资源加载到内存
-
我们需要控制人物的运动,就需要键盘和鼠标作为输入设备,当输入设备的信号传递到内存之后,此时内存中的软件会把信号交给CPU进行运算,以此计算出玩家的动作,然后将结果输出到内存,接着结果数据从内存通过显示器(输出设备)显示在玩家电脑上,同时,也会把未经处理的相同的运动数据拷贝到内存,并通过网卡(输出设备)输出一份,网卡会向网络输出,然后通过转发被其他玩家的网卡(输入设备)接收,然后数据通过网卡被传递给内存,此时内存也会加载一份相同的游戏资源,并与CPU沟通,CPU会处理内存中通过网卡传进来的运动数据,然后把结果输出到内存中,最后再由内存向显示器(输出设备)输出,以显示给另一个玩家内容
- 如有问题或者有想分享的见解欢迎留言讨论