一、引子
固态硬盘英文缩写叫SSD
,大家应该都比较熟悉。
这个部分最有可能在选择题当中考察的一些特性,这里都全部总结在了这张思维导图里边。
接下来我会解释这张导图里面包含的各个知识点,帮助大家理解,降低你的记忆负担。
二、固态硬盘
(1)介绍
首先看一下固态硬盘长什么样。
左边这个是传统的机械硬盘,右边是SSD固态硬盘。
可以看到SSD固态硬盘里边有很多小芯片,黑色的这些小芯片,这些芯片就是用于存储数据的。
我们知道机械硬盘存储数据是通过这些盘面上的一些磁性物质来记录二进制的 0 和 1 的。而固态硬盘存储数据是基于闪存技术(Flash Memory)。
大家熟悉的 u 盘,其实也是采用了闪存技术。
本质上闪存,它属于一种电可擦除的ROM,也就是EEPROM。
(2)组成
一个 固态硬盘由这样的两个部分组成,首先是闪存翻译层
,其次是由多个闪存芯片组成的存储介质。
用一个图表示长这个样子:
系统通过I/O 总线向 SSD发过来此次要读或者要写的逻辑块号,也就是指明了一个逻辑地址,这个逻辑地址经由闪存翻译层
的翻译之后,会把逻辑地址映射到具体的某一个物理地址。
所以闪存翻译层它做的就是一个地址变换的工作。
从这个图里可以看到,一个固态硬盘里边它可能会包含多块闪存芯片,这些闪存芯片里面都可以存储数据。
我们再看一下这个图里边黑色的这些东西,就是一个一个的闪存芯片。
我们继续深挖每一块闪存芯片它的内部结构。
每一块闪存芯片,它里边会由若干个数据块
组成。比如每一个块的大小可能是 16 k b 到 512 k b。
而每一个块又可以进一步地再拆解为一个的页
,每个页的大小可能是 512 个字节到 4 k b这么大。
需要注意的是,系统对固态硬盘的读写是以页为单位的,每次读或者写一个页。
系统通过 IO 总线指明此次要读要写的逻辑块号是多少。
如果数据存放在磁盘,也就是机械硬盘。里边的一个逻辑块对应的应该是一个磁盘的块,或者是磁盘的一个扇区。
我们知道磁盘的读写单位以块为单位,但是如果此次系统要读的逻辑块,它是存放在固态硬盘里边的。这儿所谓的一个逻辑块,应该是对应固态硬盘里面的一个页,而不是对应固态硬盘里边的一个块。
固态硬盘的读写单位是以页为单位的,因此固态硬盘的一个页相当于磁盘的一个扇区,而固态硬盘的一个块,你可以把它理解为相当于磁盘的一个磁道,而一个磁道里边会包含多个扇区。
由于块、页这些概念,这些术语在其他地方也出现过,而且含义不同,因此这些概念很有可能混淆。
(3)读写特性
好,到此为止,我们搞明白了固态硬盘的组成。
闪存翻译层会把系统指明的逻辑块号翻译成对应的页,因为一个逻辑块对应的应该是固态硬盘的一个页。
固态硬盘的存储介质由多个闪存芯片组成,每一个闪存芯片又包含多个块,而每个块又包含多个页。
固态硬盘的读写是以页为单位进行读写的,相当于磁盘的扇区。
另一方面,需要特别注意,固态硬盘会以块为单位对数据进行擦除,一个块被擦干净之后,其中的每个页都可以被写一次,被读无限次。
解释一下,假如这个页已经被写入数据了,接下来如果还想再往这一页写入数据,是不被允许的。
想要再次往这一页写入数据,就必须先把这一整块进行擦除,就像皮擦一样,你把它整个都擦干净,再往里面写入数据,只能这么做。
所以以块为单位,对数据进行擦除。
而这一整块都擦干净了之后,其中的每一页就可以被再次地写入数据。
🤔现在问题来了,这个块里边每一页都有可能会有数据,但我只是想往这一页里边写入新的数据。如下:
但是我要写之前,必须把一整块所有的数据全部都给擦除,擦干净才可以往这一页里边写,这就会导致其他页的数据也跟着消失。这么做显然是不合理的。
怎么处理?
处理的方法是,固态硬盘会把其他块的数据(只想要改变第一页的数据)先给复制到另一块对应的位置,如下:
然后再把想要写入的新数据写到这个地方(第一个页),如下:
接着把原来的块给擦除,擦干净,这样就可以保证其他页的数据不会丢失。如下:
现在数据丢失的问题解决了,但是又出现了另一个问题。
刚才我们说闪存翻译层会把逻辑块号映射到一个对应的物理位置,比如逻辑块号 x+0
,一直到x+n
。
之前闪存翻译层是把这个范围的逻辑块号映射到了刚才被我们擦除的位置,就是这一整块的各个页里。
但是现在这些逻辑块所对应的数据被我们挪到右边这个地方来了。
为了让这个地址的映射关系保持正确,闪存翻译层在做了刚才数据迁移的动作之后,会把这些逻辑块号重新进行映射,映射到新的位置,而原有的映射就把它舍弃。如下:
所以,对于固态硬盘来说,一个逻辑地址,它所对应的实际的物理位置有可能是会变的,只不过闪存翻译层会把映射关系修改正确而已。
现在我们理解了这句话,固态硬盘会以块为单位进行擦除,擦干净的块,其中的每一页都可以写一次,读无数次。
另外,如果现在要写的页面当中本来就有数据,是不允许直接往里边写入新数据的,需要把它所属的块内其他页全部复制到一个新的,也就是已经被擦干净的一个块当中,然后再往对应的位置写入新的页。
这就导致了固态硬盘读的速度通常很快,而写的速度会比读的速度慢得多。因为写操作可能会引起擦除的动作以及数据迁移的动作。
另一个方面,固态硬盘它是支持随机访问的,我们给定一个逻辑地址,或者给定一个逻辑块号。闪存翻译层,可以通过电路,用电路迅速地定位到对应的物理地址。
相比之下,如果使用的是磁盘,给定一个逻辑地址,要找到对应的物理地址,磁盘需要进行移动磁臂、旋转磁盘等等,需要进行这样的一些机械的操作。
因此,磁盘是通过移动机械臂来定位到具体的物理地址,而固态硬盘是通过电路来直接定位到物理地址。
所以,固态硬盘支持随机访问。 你访问任何一个地址所需要花的时间都是相同的。
相比之下,对于机械硬盘而言,如果此时要访问的物理地址离磁臂的当前位置比较远,这就需要移动磁臂。
因此,对于机械硬盘而言,你要访问不同的地址,可能需要花的时间,需要等的时间也各不相同。
三、固态硬盘与机械硬盘比较
现在我们已经掌握了固态硬盘的读写特性。
个人认为在选择题当中,也有可能考察固态硬盘和机械硬盘他们的一些特性比较。所以这也给大家进行了总结。
①固态硬盘的读写速度通常比机械硬盘更快,随机访问、随机读写的性能也要更强。
②固态硬盘是用电路来控制你要访问的物理地址的,而机械硬盘是通过移动磁臂、旋转磁盘来控制你要访问的物理地址、物理位置。因此会有寻道时间、旋转延迟这些东西影响机械硬盘的读写速度。
③固态硬盘它安静无噪音,因为它就是一个电路板,没有机械部件。而机械硬盘它的磁盘是要转的,同时磁臂也是要移动的。所以你在夜间使用机械硬盘的时候,往往会听见它里面旋转的声音,噪音会更大一些。
④固态硬盘通常会更耐糙一些,因为它里边没有机械部件,这些电路板你焊死了之后很难坏。但是机械硬盘它里面的这些机械部件还是很容易坏的。所以在耐摔、抗震这些方面,固态硬盘要更优秀一些。
⑤固态硬盘的能耗也更低,更不费电,缺点就是更贵。
⑥接下来这条特性特别重要。固态硬盘的一个块如果被擦除的次数太多,比如我们重复的一直往一个块里面不断地写东西,这个块是不是就有可能被多次擦除?比如一个块可能被擦除了1万次之后,这个块就不能再使用了,就会坏掉。
相比之下,机械硬盘的扇区,它不会因为你写的次数太多而坏掉。
由于这个特性,现在固态硬盘通常会引入磨损均衡技术,这个技术的思想就是把擦除平均地分布在各个块上,以提升使用寿命。
磨损均衡技术
还是结合图解释一下。
如果不采取磨损均衡技术,我们是不是有可能会反复的往同一个块里边写入数据?往块里边写数据写的越多,是不是就意味着这个块越有可能被反复的擦除?这个块被擦除的次数太多了之后,整个块就坏掉了,就不能用了。
这就跟薅羊毛一样,你薅羊毛不能老是在一只羊身上薅对吧?容易把这只羊给薅秃了。
如何解决这个问题?还好我们刚才说闪存翻译层可以把逻辑块号映射到这个地方,也可以让它映射到其他的地方,物理位置是可以变的。如下:
因此,如果发现这个块它被擦除的次数已经很多了,就是它已经老旧了。那么接下来要往其中写数据的时候,可以把块的内容迁移一下,迁移到其他地方。
我们可以往更新的这些块里边写数据。更新的这些块被擦除的次数还比较少,寿命还够。
所以这就是**磨损均衡技术**
。
我们要想办法把擦除平均地分布在各个块上,以提升整个固态硬盘的使用寿命。
磨损均衡技术分为两种,
<1>一种叫动态磨损均衡
。
就是刚才我们说的,在每一次写入数据的时候,固态硬盘会优先的选择累计擦除次数更少的新缓存块。因为无论你写到哪个位置,反正闪存翻译层都可以把逻辑地址进行一个正确的映射。所以你把数据写到新的缓存块里边岂不是更好?
这是动态磨损均衡技术,在写入数据的时候,会触发磨损均衡的管理方案。
<2> 另一种叫做静态的磨损均衡技术
。
固态硬盘会悄悄地监测哪些块是经常被读的,哪些块是经常被写的。
比如这些块都(蓝色)是比较老的块,也就是被擦除的次数很多。
而这些块(绿色)又是比较新的块。
在这两个块当中,假如其中存的是电影这样的数据,你想一下你下载到本地的电影数据,基本上你只有可能去读它,不可能去写它,对吧?
对于这种读多写少的数据,是不是可以把它迁移到更老的、寿命更短的这些块(蓝色)里边?因为你写的少,是不是就意味着对这些块的擦除需求就不高?对这些比较老的块进行读,并不会损耗它的寿命;但是对这些老旧的块进行写,就有可能引发擦除,而每一次擦除就会让它的寿命减一。
所以静态磨损均衡技术会在后台悄悄地监控哪些块被读了多少次,被写了多少次。读多写少的这些块就可以把它迁移到更老旧的这些块当中,而让更新的块来承担写操作更多的任务。
这就是两种磨损均衡技术。
到此为止就涵盖了操作系统和计组当中固态硬盘部分要求大家掌握的东西。
其中固态硬盘的读写性能特性和磨损均衡技术这两个部分是操作系统明确指明要求你掌握的。
其他这些部分也有可能在选择题当中进行考察。
关于固态硬盘的内容,大家掌握这些 就可以了。
四、补充
最后再来拓展一个东西。
有的同学可能会担心,既然我的固态硬盘被写、被擦除的次数多了之后,数据就有可能会丢失,那是不是意味着我使用固态硬盘不安全?
我们来看这样的一个例子。
某固态硬盘,它采用了磨损均衡技术,大小是1TB,每个闪存块的擦写寿命是 1K 次。某男子平均每天会往固态硬盘里面写 128GB 的数据。在最理想的情况下,固态硬盘可以用多久?
简单算一下。
最理想的情况下,固态硬盘当中每个块被擦除的次数都是完全均衡的,整个固态硬盘可以存 1TB 的数据。
男子每天会写128GB这么多的数据,所以平均每过 8 天,整个固态硬盘里边的所有的闪存块都会被写满一次,也都需要擦除一次,这是理想的情况。
每个闪存块的寿命是可以擦 1K 次,所以理想的情况下总共经过 8K 天。也就是经过 23 年之后,固态硬盘才会被玩坏。
所以这儿是想跟大家说,你的固态硬盘没那么容易坏。 通常现在的固态硬盘可以擦除的次数可能几万次。只要你的固态硬盘它的技术成熟,同时你每天写数据的这些需求肯定达不到 128 GB这么大。你的固态硬盘用到你 80 岁应该也是没问题的。所以大家放心,你的数据没那么容易丢失。
这就是固态硬盘考点的所有内容。