目录
1.内存和外设的速度2.内存的意义2.1无内存2.2有内存 3.冯诺依曼体系的理解4.数据流的流向4.1单机4.2 跨主机
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
它是由如下及部分构成:
这里的体系结构我们不考虑软件,只研究硬件其中:
输入设备:键盘、话筒、摄像头、网卡、磁盘等
计算机的本质是计算数据,要计算数据第一步是想办法把数据交给计算机,需要有对应的设备来采集相应的数据,这就需要使用输入设备。输出设备:显示器、磁盘、网卡、声卡、音箱等
计算机的作用是服务用户,计算完数据后需要将数据输出给用户,这就需要输出设备存储器:内存
CPU;运算器、控制器
计算机的本质工作是计算,CPU就是用来计算的,这是必不可少的。
比如我们今天买了一部手机,这个手机没有芯片,那也只能当作移到硬盘来用。
注意:同种设备可能即使输入设备,也是输出设备
如磁盘、网卡等,
内存需要从磁盘中读取数据(为什么不是CPU读取下面会讲),这时它是输入设备,CPU处理好的数据需要经由内存放入磁盘,这里它就是输出设备。我们在聊天软件如微信、QQ聊天时,别人将信息通过网卡传给我们,这时本地的网卡对于我们就是输入设备,我们将信息通过本地的网卡传给别人,此时本地的网卡就是输出设备。存储器不是磁盘,是内存,之后会反复用到内存
1.内存和外设的速度
上面讲了冯诺依曼体系中输入设备、输出设备、CPU为什么存在,那为什么要有**存储器(内存)**呢?这是本文的一个重点。我们需要一一讲解。
我们必须先来简绍一个常识
输入设备、输出设备我们通常称之为外围设备,简称:外设(这个说法很多,我们这里称之为外设)外设和内存特点:
外设的速度非常的慢
内存的速度比外设快的多
举例:
以磁盘为例(磁盘我们经常会接触到),我们在网上分别去买磁盘和存储器,磁盘我们可以买到七八百G的磁盘,而要是去买存储器(内存),只能买到4G或8G的内存条。
我们知道,内存和磁盘都可以保存数据,磁盘这样的设备我们将数据存入后,就不会丢失,而内存却是”掉电易失“存储介质,当我们的电脑突然关机将电源切断(对内存不在供电),内存中的数据也就没了。但内存的价格却是要比磁盘贵的。
内存凭什么贵呢?就凭它”掉电易失“吗?
当然不是这样,原因如下
内存的优势就是存储数据快它本身制造成本高谁都知道计算机越快越好,那为什么不把磁盘换成内存,提高存储速度,就是因为它的成本高。
如果将磁盘换为大小相同的内存,一台电脑的售价就会暴涨,这不是一般人能够消费的,不利于电脑的销售(不利于资本家挣钱),所以现在的电脑其实是一个性价比产品。
磁盘还是在我们自己电脑上,速度就慢于内存,而其它的外设,如网卡,需要借助网路,数据的传输更是在千里之外,速度就更慢了,所以我们必须明确一点,外设的速度相比于其它设备非常的慢。
2.内存的意义
上面讲了内存的速度要比外设的速度快,很多人会有疑问,计算机中快当然好,我们可以快速的存储数据,但是内存是”掉电易失“的,而且价格高,意味着我们最后存储数据的位置依然是磁盘,是不是可以去掉存储器,将CPU和输入设备输出设备直接连接呢?如下面的简易模型
首先,这么做一定是可以的,也能创造出一个计算机来,但是,这么做是要付出代价的。
这里在简绍一个概念:
在整个计算机中,内存还不是最快的,CPU以及CPU中的寄存器存储计算数据才是最快的。
**注意:**寄存器最快,也最贵,存储数据最少,计算机中的数据很多,寄存器用来存储当前需要CPU运算的数据,不能被替代。
我们可以这样看代码计算机中各设备的速度:CPU的工作速度是纳秒级,内存的速度是微妙级,外设是毫秒级
1秒 (s) =1000 毫秒 (ms) = 1,000,000 微秒 (μs) = 1,000,000,000 纳秒 (ns)
这时我们已经知道,外设的速度是很慢的,而CPU的速度是非常快的,这要的计算机我们就能参考木桶原理
一个木桶中可以存放多少水,不是由最长的那片木头决定的,而是由最短的那片木头决定的。
再来看一下计算机,CPU的速度非常的快,而外设的速度非常慢,那该计算机整体的速率就以外设为主。
有了这些知识,下面我们看一下本文的重点,分别来看一下计算机在有无内存的情况下的速率。
2.1无内存
CPU每次处理数据的大小是有限的,在没有内存的情况下,输入设备向CPU直接传入数据,CPU计算后再向输出设备传输数据,接着等待输入设备下一次的数据传入,计算机整体的速率就是外设的速率。
2.2有内存
铺垫: CPU每次处理数据的大小有限,内存具有存储数据的能力,CPU的处理数据和内存加载数据可以同时进行。
根据统计学原理,当一个数据被访问时,那么下一次有很大可能访问的就是周围的数据,所以当CPU需要处理一段数据时,内存会将该数据和周围的数据一同加载进来,在CPU处理数据的同时,内存仍在工作,那下次CPU就可以在内存中获取数据。
输出数据也是相同的,CPU处理完数据后将数据放入内存中,当输出数据需要时,在从内存中获取。
所以,此时计算机的速率就是内存的速率
相对于无内存的情况,有内存时的情况要快很多。这就是内存的意义。
3.冯诺依曼体系的理解
结合上面的知识,根据这种图我们可以知道:
站在硬件和数据层面上,CPU与存储器相互传输数据,同时控制外设和存储器,告知需要处理的数据,汇总到存储器,在由CPU处理,处理后,返回给存储器,最后控制存储器存入外设。
总结:
在数据层面上,CPU不和外设直接沟通,而是直接只和内存打交道在数据层面上,外设之和内存打交道这就是为什么,我们常听说,我们编写的C程序需要在运行先加载到内存。
因为CPU之和内存打交道,可执行程序就是一个文件,它放在磁盘中,需要先将其从外设中加载到内存,CPU才可以使其运行从而得到结果。在Windows中双击后即加载到内存,Linux中使用./
后加载到内存。
这就是用硬件方案解释软件现象。
扩展:
我们经常说CPU当中有寄存器,实际上寄存器不仅在CPU中,在其它外设中也有寄存器。
如:当我们敲击键盘时,键盘是先将获取到的内容存储在寄存器当中,然后通过寄存器将数据写入内存中。
在物理层面,各个硬件单元之间是通过总线连接的,外设与内存之间的总线叫做IO总线,内存与CPU之间的总线叫做系统总线。
在早些年的计算机中,因为芯片能力不强,有时是之间将外设中的数据传输给CPU,CPU计算完后在交给内存,在合适的时候由内存拿出数据。现在不在使用这个技术,而是在外设中使用DMA芯片,将外设的数据存入内存,不在利用CPU。
在数据层面上,CPU不和外设交互,但有时候,有些控制信号需要二者交互。
如:一些外设给CPU发送控制信号,请求帮助处理一些数据。
4.数据流的流向
我们以及有了对冯诺依曼体系的理解,接下来我们就可以看一下,在硬件层面,单机和跨主机之间,数据流是如何流向的!
也就是研究,我们使用./
将我们的程序加载到内存,然后执行我们的代码,最后输出在外设显示器上打印,它的整个数据流在硬件上是如何走的。
该内容难度不高,作为理解软件的工具。
因为软件是无法脱离硬件的,当我们理解了硬件的数据流向,软件上的很多行为我们就可以尝试去理解它了。
4.1单机
以在音乐播放器(网易云音乐)播放音乐为例:
首先,我们的客户端软件,先加载到内存,然后由CPU执行,接着我们就看到了网易云的界面,
其次,我们点击播放音乐,通过外设的网卡,拿到数据,再将数据传输到内存,经CPU计算(此时的计算可以看作解析),计算后将计算结果返回到内存,由内存传到外设,传到计算机的音箱中播放出来。
4.2 跨主机
以两个人(A和B)在QQ中聊天为例:
当A给B发送”在吗?“,数据是怎样流的的?(不考虑网络)
要使用QQ,首先需要联网,而A和B的电脑都是冯诺依曼体系结构,在A向B发送消息的过程中,A的电脑充当输入设备、显示器和网卡是输出设备。B的电脑中网卡充当输入设备、显示器充是输出设备。
A在键盘上输入数据,在硬件上讲,将数据输入到内存,在软件上讲,将数据输入到QQ中。然后数据要经过计算和加密,经由CPU计算,将计算结果传回内存,由内存传到外设,这里是传到了两个地方,一个是A自己的显示器,因为他输入的消息,他自己也要看到,另一个传到了网卡,经由网卡传给B。
B的计算机通过网卡拿到数据,将数据传给内存,经过CPU进行解密操作,在传回内存,由内存传到外设中的显示器,使B看到该消息。
其中,将外设中的数据读入内存,将数据显示在显示器上和发送到网卡,都是由软件(QQ)内部自己来完成。
从外设获得数据这样的操作,我们并不少见,比如C语言中的scanf
,printf
,都是从外设获得数据。
总结: 数据的流动必须遵守冯诺依曼的结构。