大话存储笔记(一)

来源:互联网 发布:黄岩深孔钻编程招聘 编辑:程序博客网 时间:2024/06/06 17:26

------2017/05/22   20:30

最近在写论文,很扯淡的论文,因此没有啥写的意义,纯属为了给老师交差。无聊就看看书,不为别的,就只是看看,记录一下吧


1、SSD(固态硬盘),比较常见的是基于FLASH介质的,一个PAGE是FLASH芯片IO的最小单位,每128个page组成一个block,每2048个block组成一个区域。一整片flash芯片由两个区域组成,一个区域存储奇数的block。一个存储偶数序号的block。两个区域(plane)可以并行操作。

flash芯片的page大小可以为4314B(其实就是4KB+218B的ECC校验)或者是2111B(这个还不理解如何得出),其实block大小也视flash容量而定,可以是32KB,64KB...(比如文件系统的块大小也是定的比如KB,8KB..)

2、向flash芯片中写入数据前需要进行擦除(这个见过好多次,这个在某些方面真的容易导致SSD损坏。。个人认为),SSD的擦除是这么定义的:将一大片的连续的Cell一下子全部放电。这一大片的连续的cell其实就是一个block,即每次擦除只能擦除一整个block或者多个block,意味着不能擦除某个或者某段page,或者单个或者多个page(类似于文件系统读写数据的最小单元是block,而不是扇区)。一块崭新的SSD  上所有的cell都是已经被擦除过的。

      SSD以page为单位进行写操作,写完一个page再写一个page。读操作也是以一个page为单位

 3、FLASH芯片的缺点之--写之前的擦除操作

 我的天,果然写之前擦除是flash芯片的一个很大的通病。具体如下:如上述所说,即使我只是些一个page,但是我仍然要将该page所在的block进行擦除,当然擦除之前需要将该block数据读取出来到SSD的RAM BUFFER中。然后擦除整个block,然后将要写入的page的数据在该ram中对应位置进行修改,然后整个block写入原来的已擦除的block中。

 这样加大了写操作的开销,而且这也是导致SSD需要很大缓存的原因。。。


 有一种情况是写入前不需要擦除的:

     比如说SSD刚买来还是没有文件(是真的第一次使用,没有数据,是指该SSD被整盘擦除。而不是使用过该SSD,之后将该SSD 的数据进行过擦除,这种不纯净),这个时候FLASH 中的free space 是最大的。对于属于free space 的存储空间写之前不需要擦除,只有那种意境被写入过数据的空间,也即occupied space 的空间写之前才需要进行擦除。但是SSD怎么知道这些空间属于哪种space呢?这就可以硕士文件系统知道了。文件系统应该是维护者该SSD 的一个bitmap,每个bit对应的一个block的状态。

注意:文件系统对已存在文件的删除,并不会为SSD制造free space,因为文件系统删除文件时候是不会忘该文件的磁盘存储位置写0或者写1的,只是对该文件的源数据进行修改。比如一块SSD被使用,写过数据,然后你即使对里面的数据进行删除,全部清空,SSD的free space也可能是0(比如以前你往该SSD存储满了数据,再删除)因此 对于SSD来说,free space只会越来越少,最后甚至为0,导致每次写之前都需要擦除。

----------------------------------------------FLASH也针对该缺点有一些措施。。但是以后有更深体会了再回来补充吧--------------------------------


原创粉丝点击