关于计算机外存和内存中的存储结构解析

我们的计算机中能够存储数据的东西有内存,外存等等

内存的读写速度优于外存很多很多,但是由于其成本高的特点,一般只适用于做短时存储读取,也就是说,当我们的电脑关闭的时候,内存中的数据就全部消失了。与之相比,外存也就是磁盘,是致力于实现数据持久化技术的

了解过一些硬件的人应该知道,我们的磁盘是由很多个个圆形磁道组成的,每个磁道上又分成很多个小块,用来存储数据,如下图所示:

关于计算机外存和内存中的存储结构解析

因为小块的数量很多很多,再加上为了便于理解,我们可以将这些数据存储单元抽象为下图这样的平面矩形分块:

关于计算机外存和内存中的存储结构解析

到现在为止,我们将基本的数据存储模型建立完毕了,下面我们来比较一下内存和外存中存储结构的差异

外存

假设我们有一段数据,大小需要占满3个格子,那么我们在外存中应该如何选择格子来存储呢?

假如我们直接选择相邻的3个格子来存储数据,如下图棕色区域所示:

关于计算机外存和内存中的存储结构解析

这样,我们当读取这段数据的时候,直接通过第一个棕色格子的地址,就可以找到这段数据把它读出来,这不是挺好的吗?

但是,当我们存储了很多数据之后,我们就发现了问题所在了

假设我们又存储了一段大小为4个格子的数据,存储了一段大小为两个格子的数据,存储了大小为7个格子的数据,存储了大小为1个格子的数据,存储了大小为8个格子的数据

用一种颜色代表一段数据,可以看到,我们的磁盘存储容量已经被占满了:

关于计算机外存和内存中的存储结构解析

这时,我们想要删除绿色的和蓝色的数据,如图:

关于计算机外存和内存中的存储结构解析

删除之后,按理说我们的磁盘已经空出了三个格子的空间,可以存储大小为三个格子的数据了,但是由于我们是顺序存储,所以上面的两个格子和下面的一个格子连不到一起,意味着我们只能再存进去两个格子的数据和一个格子的数据,并不能存进去三个格子的。

也就是说,如果按照顺序存储,用到最后,我们的磁盘只能存入比较小的数据了,明明容量充足,却没法存进去大的数据,岂不是很难受?

有人可能要说了,我们可以通过删除之后把后面的数据移到前面来填补上前面的格子来达到,就像玩电脑游戏里的整理背包一样。但是如果这样的话,我们每次删除一个数据都要把这个数据后面的数据向前移动(更改数据的存储地址),这样对性能的影响非常严重,所以,显然,我们的磁盘不是用这种方式来存储数据的,而是用下面这种:

关于计算机外存和内存中的存储结构解析

这就是磁盘的存储方式——链式存储,这种方式能最大限度的利用磁盘的空间。

内存

上述的链式存储方式虽然最大限度地利用了磁盘的存储空间但是毕竟在增删改查的数据操作上的速度不如顺序存储,对于内存来说,因为它的读写速度非常非常快,因此我们上述的每次删除之后的重新整理的速度也非常快,因此我们的内存使用的是顺序存储方式,这样不会速度很慢,而且也方便了增删改查的操作。