闪存文件系统(Flash File System)

版权声明:本文为博主原创博客,仅提供学习参考,未经博主允许不得转载!欢迎交流讨论~ https://blog.csdn.net/SweeNeil/article/details/89363302

最近调研了一下闪存文件系统,部分结果展示如下,如有错误欢迎评论指正~

一、背景

闪存flash memory),是一种电子式可清除程序化存储器的形式,允许在操作中被多次擦或写的存储器。

随着现在闪存价格的降低,闪存越来越普及,闪存是一种非易失性存储器,断电数据并不会丢失,同时它的读写速度比机械硬盘(HDD)要快很多。无论是手机还是一些小型的嵌入式设备,闪存都是作为存储器的方式存在,现在手机的 6+128 或者 8+256 这后面的128以及256就是指的闪存(NAND Flash)的大小。现在PC机中SSD也开始成为主流,现在的SSD几乎都是基于闪存技术,目前基本也可以把SSD与闪存等同起来,但是有些情况也得注意区分。

NOR和NAND是市场上两种主要的闪存技术。

二、闪存特性

2.1 NOR Flash与NAND Flash

NOR Flash与NAND Flash有较大区别,NOR Flash更像内存,它有自己独立的地址线和数据线,它的基本存储单元是bit,用户可以随机访问任何一个bit的信息。NOR Flash价格比较贵,容量也比较小。

NAND Flash更像磁盘,它的地址线和数据线是共用的I/O线,NAND Flash以块为单位进行擦除操作。而且NAND Flash与NOR Flash相比,成本要低一些,容量却大得多。

2.2 编程原理

闪存的写入操作必须在空白区域进行,如果目标区域已经有数据,必须先擦除后写入,因此擦除操作是闪存的基本操作。

闪存编程只能将1写为0,而不能将0写成1。所以在Flash编程之前,必须将对应的块先进行擦除,擦除的过程就是将该块中的所有位都写为1的过程,块内的所有字节变为0xFF。因此可以说,编程是将相应位写0的过程,而擦除是将相应位写1的过程,两者的执行过程完全相反。

2.3 NOR Flash与NAND Flash的区别

如前面所说:NOR Flash更像内存,程序可以直接在上面跑,NAND Flash更像磁盘,需要驱动。

它们的擦除方式也有不同:NAND Flash执行擦除操作是十分简单的,而NOR Flash则要求在进行擦除前,先要将目标块内所有的位都写为0。

NOR Flash由于成本的限制,其大小其实也对应着内存的大小,NAND Flash成本比NOR Flash低,其大小也可以对应着磁盘的大小(例如SSD)。

它们之间的其他区别如下:

  1. NOR的读速度比NAND稍快一些。
  2. NAND的写入速度比NOR快很多。
  3. NAND的擦除速度远比NOR快。
  4. NAND的擦除单元更小,相应的擦除电路更加简单。
  5. NAND的实际应用方式要比NOR复杂的多。

2.4 使用要求

  1. 区块擦除(Erasing blocks):闪存的区块在写入之前,要先做擦除的动作。擦除区块的时间一般比较长,因此最好利用系统闲置的时间来进行擦除。

  2. 磨损均衡(Wear leveling):闪存区块的擦除有次数的限制,重复进行擦除以及写入同一个区块将会造成闪存读取速度变慢,甚至损坏而无法使用,因此闪存设备的驱动程序需要将擦除的区块分散,以此来延长闪存寿命。用于闪存的文件系统,也需要设计出平均写入各区块的功能。

  3. 随机存取(Random access):一般的硬盘,读写数据时,需要旋转磁盘,以找到存放的扇区,因此,一般使用于磁盘的文件系统,会作最优化,以避免搜索磁盘的作用。但是闪存可以随机存取,没有查找延迟时间,因此不需要这个最优化。

三、闪存文件系统

传统的文件系统结合闪存转换层(FTL)可以将文件写入闪存,但是它的缺点是写入的效率较差,而且对于闪存的一些特性也没有较好文件系统方案,闪存使用寿命不高。因此,针对闪存特性设计闪存文件系统是十分必要的。

根据前面的信息,感觉现在的闪存文件系统其实就是基于存储器(NAND Flash)。

已经知道了闪存使用的一些特性或要求,设计一个闪存文件系统就要尽量提高闪存的使用寿命,也就是要考虑磨损均衡。同时根据闪存的擦除要求,也就是在写的时候,如果以有数据,那么必须先擦除然后再写入。

3.1 磨损均衡

磨损均衡是闪存文件系统首先要考虑的,如何做到磨损均衡,这对于延长闪存的使用寿命十分重要。

其实做到磨损均衡就是让闪存的每一个区域都被教平衡的访问到,也就是闪存上各个块的热度(访问频率)要达到基本一致。

对于经常被更新的数据块,可以称之为“热”数据块,对长期得不到更新的数据块,称之为“冷”数据块

数据块经常更新的话,就会经常被擦除,而长期不更行的数据块,不会出现脏页而被擦除,其擦除次数会明显少于存放着经常被更新数据的块。

目前常用的磨损均衡算法大致分为两类,一类是随机性算法,一类是确定性算法

具体可以参考:https://blog.csdn.net/dongyanxia1000/article/details/79458082

3.2 区块擦除

为了避免区块擦除时,对存储在该块上的其他数据产生干扰,Flash采取异地更新的策略。

当存储数据需要更新时,文件系统将会把新的复本写入一个新的闪存区块,将文件指针重新指向,并在闲置时期将原有的区块抺除。

被更新的文件数据会被放到别的物理页上,而不是覆盖原来的数据。包含新版本数据的页被称为有效页,新版本数据被称为有效数据。包含旧版本数据的页被称为无效页,或称为脏页,脏页经过擦除操作后成为空闲页,才可以重新写入数据。因为Flash是以块为单位执行擦除的,因此需要将脏页所在块上的所有物理页都擦除,在擦除之前需要检查此块上是否存在有效页,如果存在就必须先转移到其他块上。

3.3 垃圾回收

从3.2得知闪存存储数据更新的方式,旧数据被标记为脏页所以也就涉及到了需要进行垃圾回收,闪存文件系统的垃圾回收策略也尤为重要。

3.4 写放大(写干扰)

异地更新、垃圾回收等,又会造成一个写放大问题,这也是闪存文件系统需要尽量降低的地方。

3.5 现有典型闪存文件系统

  1. JFFS2
  2. YAFFS
  3. F2FS

3.6 总结

现在关于闪存文件系统的研究,对于实现整个文件系统其实比较少,18年三星在顶刊上发表了一篇。目前的研究主要针对一些小点进行研究,目前在磨损均衡方面的研究比较少,对于垃圾回收和写放大方面研究比较多。对于文件系统而言,写放大一直是一个研究的点,垃圾回收在闪存文件系统中可能研究得比较多~

参考

1、Flash与文件系统

地址:https://blog.csdn.net/u013178472/article/details/72864428

2、闪存

地址:https://baike.baidu.com/item/%E9%97%AA%E5%AD%98/108500?fromtitle=flash%20memory&fromid=3740729&fr=aladdin

3、NAND flash和NOR flash的区别详解

地址:https://blog.csdn.net/qq_38880380/article/details/78884522

3、闪存文件系统

地址:https://baike.baidu.com/item/%E9%97%AA%E5%AD%98%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/19278229?fr=aladdin

5、Flash磨损均衡技术解析(wear-leveling)

地址:https://blog.csdn.net/dongyanxia1000/article/details/79458082

猜你喜欢

转载自blog.csdn.net/SweeNeil/article/details/89363302