SSD为什么不能当做内存用?

存储 存储软件
为什么 SSD 不能当做内存用?在回答这个问题之前我们先去某东上逛一圈。

为什么 SSD 不能当做内存用?在回答这个问题之前我们先去某东上逛一圈。

[[414255]]

图片来自 Pexels

输入“SSD”随便找到销量比较高的一项,在商品详情页上有这样的描述:

注意图片上显示的规格,读速高达 3.5GB/s,真实情况下稍差点(尤其是随机读写),但也不会很离谱,可以看到,这个速度是非常快的,基本秒传高清电影的水平。

那么问题来了,既然现在的 SSD 读取速度这么快,那么可以把 SSD 当做内存来用吗?

要想回答这个问题,我们先来看看内存的速度。

速度差异

当前采用第四代 DDR 技术的内存,其带宽基本上能到 20GB-30GB 左右。怎么样,即使 SSD 的速度很快,但和内存相比还是有一个数量级的差异。

也就是说,如果真的当把 SSD 当内存使用,那么你的计算机可能会比当前慢上 10 倍左右。

[[414257]]

如果站在用户的角度你觉得慢点无所谓,那么接下来我们从计算机以及操作系统的角度来看看这样可不可行。

新建一个文件试试

如果你现在在计算机旁边可以进行一个小实验,以下以我的 Windows 10 机器为例。

新建一个文本文件,随便写点什么东西,然后右键打开属性,你会看到:

这个文件大小本身只有 816 字节,但却占据了 4KB 的空间。让我们再往这个文件里加些内容,再看一下:

此时内容的大小是 5.73KB,占据的空间却来到了 8KB。这说明什么呢?很简单,这说明文件大小是按照块来分配的,但这又能说明什么问题呢?

访问内存与访问硬盘的区别

要知道内存的寻址粒度是 byte 级别的,也就是说每个字节都有它的内存地址,CPU 可以直接通过这个地址获取到相应的内容。

但对于 SSD 来说就不是这样了,从上面的实验也可以看到,其实 SSD 是以块的粒度来管理数据的,至于块的大小各有差异,这不是重点。

这里的重点是:CPU 没有办法直接访问文件中某个特定的字节。

CPU 没有办法直接访问存储在 SSD 上的任何数据。那么 CPU 是怎么访问文件内容的呢?

文件系统来帮忙

一切皆文件这个概念想必大家都不陌生吧。在现代操作中,我们以文件的形式来使用 SSD,这绕不开操作系统中的文件系统。

文件系统把 SSD 上的数据以文件的形式呈现出来,程序直接操作文件,读写文件时把请求发送给文件系统,文件系统把请求路由给 SSD,SSD 处理完请求后数据会被 Copy 到相应进程的内存中,此后程序直接操作内存。

完整的过程以及文件系统的实现可以写成一本书的完整一章!

从这里我们可以看出,CPU 没有办法像访问内存那样直接按照字节粒度去 SSD 中寻址,CPU 访问 SSD(磁盘)通常需要借助文件系统。

当然,我们也有办法绕开文件系统,但 CPU 依然无法直接访问 SSD(磁盘)中的某个字节。

正是因为 CPU 无法直接按照字节粒度去访问 SSD,因此 CPU 无法脱离内存直接在 SSD 中运行你写的程序。

操作系统在把 SSD 当内存用

当然在这里还要插个题外话,尽管操作系统不能把 SSD 当内存来用,但实际上操作系统在间接把你的 SSD 当内存来用。

现代操作系统会自动在空闲内存中缓存 SSD(磁盘)数据。

当你首次读取文件时,这次读请求的确需要经过慢吞吞的 SSD(磁盘)来处理,但此后这块数据就被缓存在了内存当中,下次再访问这块数据时就不用访问 SSD(磁盘)了。

而如果你写入数据,一般来说也是写到内存,稍后会有一个任务把内存中的数据写入磁盘。

因此从这里我们可以看出,现代操作系统基本上是在把 SSD 当内存来用,更不用提磁盘交换空间,是不是很聪明。

OK,这个题外话就到这里。让我们回到原问题来。

虚拟内存

现代操作系统的内存管理都采用虚拟内存,这会带来一个问题。

对于 32 位操作系统来说,其最大寻址范围只有 4G,也就是说如果你把 SSD 当做内存,即使 SSD 有 1T,那么操作系统真正能用到的也只有 4G,剩下的就都浪费掉了。

[[414262]]

因此,现代操作系统对内存的管理方式也无法让我们把 SSD 当内用,除非修改操作系统。

当然,对于 64 位操作系统则不存在这个问题,因为 64 位操作系统可寻址空间足够大,尽管这个空间足够可观也需要意识到这是有上限的。

使用寿命

SSD 的制造原理决定了这类存储设备是有固定使用寿命的。

你会发现 SSD 这货就和车一样,当跑出一定里程后就会出问题,在 SSD 中的里程数就是所谓的总写入字节,TBW,全称是 Max Terabytes Written,最多能写多少 TB,以下是某种型号的 SSD 其 TBW 规格。

一般来说普通的 SSD 其 TBW 在几百 TB,也就是说如果你的 SSD 写入上百 TB,那么很可能就要报废了。

有的同学可能觉得这使用寿命也太短了吧,但实际上作为普通用户,你的电脑不会有那么频繁的写 SSD 场景,每天写磁盘的量应该会很小,当然频繁下小电影除外,因此作为普通用户你可以不用在意 SSD 的使用寿命问题。

但就像刚才说的,SSD 毕竟是有 TBW 这个限制的,内存则没有这个问题。因此如果你把 SSD 当内存用的话,相信很快你的 SSD 就会被 CPU 写死。

展望未来

受限于当代的存储设备制造技术,我们还没有办法直接把 SSD 当做内存来用,我们的各种软件包括操作系统、文件系统以及各种硬件包括 CPU 等都没有做好把 SSD 当做内存来用的准备。

但随着技术的进步,这一点未来可能会有改观。Intel 已经发布了一种存储设备,该设备就像 SSD,但同时又可以支持像内存那样随机寻址。

也许在未来我们的内存也可以像 SSD 那样,即使断电内容也不会丢失,那样的话你的电脑就没有“关机”这种操作了,电脑加电后根本就没有“启动”一说,是不是很有趣。

[[414263]]

如果内存和磁盘一样断电后也不丢内容,那么会带来什么有趣的新功能呢?

总结

SSD 能否当做内存来用?这绝不是一个简单的问题,这涉及到 CPU、操作系统、文件系统、存储设备制造原理等方方面面的问题,你需要对计算机系统有透彻的理解才能回答好这个问题。

作者:码农的荒岛求生

编辑:陶家龙

出处:转载自公众号码农的荒岛求生(ID:escape-it)

 

 

责任编辑:武晓燕 来源: 码农的荒岛求生
相关推荐

2021-07-19 09:27:42

SSD内存Linux

2020-01-14 11:23:16

SSDOP磁盘

2024-10-30 09:42:43

固态硬盘SSD闪存

2012-12-18 11:55:38

2022-05-22 21:23:10

前端监控系统

2016-05-26 12:11:00

Redis内存开源

2022-12-13 08:00:39

2023-12-08 08:40:16

函数

2013-10-29 10:24:31

程序员漫画

2023-09-14 13:23:42

Llama-2模型参数

2021-08-10 09:58:59

ThreadLocal内存泄漏

2020-04-14 16:03:31

Linux虚拟内存操作系统

2021-07-09 06:00:45

网络钓鱼培训数据泄露

2011-05-05 17:57:18

软件开发

2024-06-06 08:10:30

多线程Mapnull

2023-10-30 08:51:09

平台管理工程

2017-02-07 20:49:15

2009-12-04 13:31:21

PHP全局变量不能生效

2018-06-04 15:17:10

编程语言中文编程
点赞
收藏

51CTO技术栈公众号