我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
它是由如下及部分构成:
- 这里的体系结构我们不考虑软件,只研究硬件
其中:
输入设备:键盘、话筒、摄像头、网卡、磁盘等
- 计算机的本质是计算数据,要计算数据第一步是想办法把数据交给计算机,需要有对应的设备来采集相应的数据,这就需要使用输入设备。
输出设备:显示器、磁盘、网卡、声卡、音箱等
- 计算机的作用是服务用户,计算完数据后需要将数据输出给用户,这就需要输出设备
存储器:内存
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
,都是从外设获得数据。
总结: 数据的流动必须遵守冯诺依曼的结构。