今天看到一个很好的比喻可以说明很形象地说明CPU、寄存器、高速缓存(cacha)、内存(RAM)、硬盘、网络之间的关系。现在把它描述如下,希望能给不懂计算机机的人一个轻松的方式来理解计算机的存储体系。

工人 & CPU

我们知道CPU的工作需要依赖数据。而工人们工作需要工具。所以不妨想象CPU是一个工人,而这数据就是工人手里的工具。他用的工具有螺丝刀、锤子、锯子、钳子、切割机等等。

tools

工人的手 & 寄存器

工人干活的时候一般手上只拿少数的一两件工具。工人的手就相当于CPU内部的寄存器,需要干什么事情,换用什么样的工具,不能拿太多的工具在手上,用完一个工具就要放回去,换另外的工具。

工人

工具包 & 高速缓存

前面说了工人的手上一般只拿少数一两件工具,用完了就要换一件工具。那么要去哪里更换工具呢?在实际工作中常出现的情况是一段时间要频繁使用螺丝刀和扳手,另一段时间频繁使用切割机和尺子。所以工人们随身携带一个工具包,装上常用的工具。对于CPU来说,这个工具包里面就是它常常要处理的数据。我们称之为高速缓存(cache)。当然工具包是带在工人身上的,所以里面装的工具不能太多。同样高速缓存位于CPU内部,容量也十分有限。从工具包换一个工具使用的时间可能就是使用工具一次所用时间的几倍或者数十倍。

工具包

工具箱 & 内存

干一项工程,肯定不是一两件工具就能完成的。公司接到业务之后,工作人员一般会把需要的工具都放如工具箱里,然后去工作现场。当然在实际工作中从工具箱取工具也是比较快的,但是相对于随身携带的工具包就慢的多了。对CPU来说也是这样,当一个程序被打开时,程序数据将被加载到内存中,这就相当于将需要的工具放入了工具箱里面。而CPU中内存中获取数据所需时间是从内存中获取数据所需时间的几十至几百倍。

工具箱

工具仓库 & 硬盘

要干活的时候就会把工具从仓库里面拿出来,装进工具箱。当不干活的时候,就会把工具放到仓库里面。在实际工作中可能出现,工具实在太多或者太大装不进工具箱的情况,这个时候会从仓库中拿出一部分需要的工具放入工具箱,把不再需要的工具放回仓库。在计算机中也是这样,内存毕竟有限,当CPU需要某些数据的时候,它会从工作现场来到硬盘拿回需要的数据放入内存,把内存中不需要的数据放入硬盘中合适的位置。可以想象这个时间是相当长的。在计算机系统中CPU从硬盘获取数据所需时间可能是从内存获取数据的几十万倍。

仓库

五金市场 & 网络

有时候在工作中,发现自己仓库里面没有某个工具,那就需要去市场上买需要的工具。这就像在计算机系统中一样,当本地硬盘上没有某个数据的时候,就要去网络上去获取。从市场上获取的工具不一定会在用完后放入仓库。在计算机系统中,获取的网页可能在我关闭了网页后就被销毁了,而有的时候我们下载的音乐可能会保存在本地。

五金市场

整个体系

至此,我们应该明白计算机存储器的体系结构了,对的他就是一个从高速到低速,从小容量到大容量的结构。如下图所示:

计算机存储体系

其实计算机的存储体系中还有很多很多细节,比如在在下级取一个数据时,替换上级的哪一个存储单元。当然以上内容也能让人们对存储结构的分层结构一点概念,不至于说自己的内存有500G。其中有的比喻有一个位置不太合理,那就是高速缓存部分,现在的存储结构中有多级高速缓存,就好比工人随身携带了由小到大的多个工具包一样。将最最常用的工具放入一级工具包,较常用的放入二级工具包。

我们知道,从硬盘读取数据是很慢的,每次开机的时候计算机就会从硬盘读取好多数据进入内存,之后常用的数据就在内存中了。而不太会读取硬盘,所以我们的计算机才会如此的快速。实际中,CPU处理的90%以上的数据都是直接从高速缓存中读取的,可以想象一下,如果所有数据都从硬盘读取,那么计算机的速度会是怎么样的?

这篇介绍也就结束了,希望能给不明白计算机存储体系的朋友一点点关于它的概念。至于细节,可以查看相关书籍。