前言
但凡是科班出生的小伙伴多多稍稍应该都听过冯诺依曼体系吧,这似乎已成为入门计算机的必备知识了,本章就带着大家一起去理解冯诺依曼体系;
一、体系构成
冯诺依曼体系主张计算机由五大部件组成,如下所示;
输入设备:接收输入信息
输出设备:将结果进行输出显示
运算器:数据的运算
控制器:控制运算(与运算器共同组成CPU)
存储器:数据的存储
上图就是我们的冯诺依曼体系图,相信大家应该多多少少也看过吧,本文到这还没完,先别走,这只是我们粗粒度的认识,下面我们继续更加深层次的理解冯诺依曼;
二、深入理解冯诺依曼
我将用下面几个问题来带着大伙谈谈我眼中的冯诺依曼;
问题一:为什么要加上内存?直接从输入设备拿走数据到CPU,计算完以后再给我们的输出设备不可以吗?
问题二:我觉得图中输入设备将数据给内存,然后内存再给CPU,然后CPU再给内存,最后内存再给我们输出设备这个过程太麻烦了,可以按照下图顺序进行数据传递吗?
其实这两个问题是一个问题,就是对我们冯诺依曼体系中存储器的理解;在理解这个问题前,我先补充一个基础知识;
补充:
1、在我们的计算机硬件中,我们各个硬件都有自己数据传输速度的问题,其关系大概如下;
CPU > 内存 > 磁盘
2、在我们计算机中,有些设备既可能是输入设备,也可能是输出设备,如磁盘,网卡等;
3、木桶原理,简单提一下,一个水桶能接多少水并不在最长的那快木板,而在于最短的那块木板;
回到正题:
回答问题一,假设我们的cpu是纳秒级别,我们的内存是微秒级别,我们的外设是毫秒级别;假如没有内存,我们处理一次数据是直接从外设传输到CPU,而这个传输的速度取决于外设,也就是毫秒级别;但是如果我们引进了内存,我们可以先将数据预加载到内存中存储起来,然后CPU直接从内存中拿取数据,此时,我们处理数据的速度取决于我们的内存了,也就是微秒级别,这样大大提高了我们的IO效率;问题二,此时,我们的问题二也就迎刃而解了,我们若像问题二那样进行数据流转,我们的IO速度还是取决于外设;
问题三:内存既然这么好,我们为啥还用磁盘呢?
这个问题,主要从两个方向进行解答,从成本来看,我们内存的价格远远大于磁盘价格,再从我们的效率来看,实际上,全部换成内存,我们的效率也并没有提升多大(肯定会有提升),但是要想计算机称为一种平民产品,价格当然也是要给非常重要的因素,我们认为没有必要用高昂的费用换取少量的速度;
问题四:为什么程序运行前需要加载到我们内存中?
我们之前就经常听说我们要运行一个程序必须提前将其加载进内存中,我们理解冯诺依曼体系后,这个问题就很好理解了,就是因为冯诺依曼体系的特点,所以我们才要将程序加载进内存中,体系结构决定了软件的行为;