目前,人们多数使用的是基于Flash闪存的固态盘。相变存储尚在实验室,DRAM固态盘采用常见内存颗粒,数据需要额外的电源才能保存,使用者不多。
固态盘常见接口有SATA(普通PC使用的串行ATA接口)、PCI-Express(常见于显卡设备的接口,特点在于高速)等多种。不同的接口,其实都是为了通用、高速的目的。
Flash的最小存储单元是晶浮栅晶体管,对应于磁盘中的一个bit的存储单元。
磁盘中,利用磁极的不同来标记0,1,当磁头扫过盘面,通过感应电流就可以识别出不同状态,即读取数据;增强磁头的磁性,可以改变盘面记录单元的状态,实现写入数据。
固态盘中,在存储单元晶体管的栅(Gate)中,注入不同数量的电子,通过改变栅的导电性能,改变晶体管的导通效果,实现对不同状态的记录和识别。有些晶体管,栅中的电子数目多与少,带来的只有两种导通状态,对应读出的数据就只有0/1;有些晶体管,栅中电子数目不同时,可以读出多种状态,能够对应出00/01/10/11等不同数据。所以,Flash的存储单元可分为SLC(一个萝卜一个坑)和MLC(2个/多个萝卜一个坑)两种。
区别在于SLC的状态简单,所以读取很容易,MLC有多种状态,读取时,容易出错,需要校验,速度相对较慢。实际MLC的状态识别过程比上述复杂很多,读取一次MLC的功耗比SLC大很多。由于材料本身的缘故,SLC可以接受10万次级的擦写,而MLC材料只能接受万次级擦写操作,所以MLC的寿命比SLC少很多。但是,也是最重要的,由于MLC中的信息量大,同一个存储单元,信息量是SLC的N倍,所以相同容量的磁盘,MLC类型Flach成本更低,存储单元体积更小,这也导致市面上多数固态盘都采用了MLC型的Flash颗粒。SLC由于其特性,仅在高端的高速存储设备中使用。
有了上述介绍,不难理解,固态盘写入,就是改变晶体管里栅中电子数目的过程。读出,就是向晶体管施加电压,获取不同导通状态,对应识别存储数据的过程。
Flash颗粒便是大量这种浮栅晶体管的阵列,一般的U盘中会有1-2粒这种Flash颗粒,视容量而定;在SSD硬盘中,常见会有8-16粒Flash颗粒。
不过,用户在使用过程中,对器件的负面特性并不需要担心太多,生产厂商已经做出了考虑。如,由于单个存储单元的访问次数有限,如果长期在同一个区域重复读写,会导致该存储区域失效,进而影响整块盘的寿命。于是,业界研究了负载平衡技术,将用户的访问请求均匀分布在所有存储单元中,以延长整个盘寿命。而这个“不要在一只羊身上薅羊毛”的事情,就是固态盘控制器的任务了。