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

一、背景

闪存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

闪存文件系统(Flash File System)相关推荐

  1. ESP8266 NodeMCU 闪存文件系统(SPIFFS)

    目录 闪存文件系统 ESP8266闪存文件系统基本操作 1. 通过程序向闪存文件系统写入信息 2. 通过程序从闪存文件系统读取信息 3. 通过程序向闪存文件系统文件添加信息 4. 通过程序读取目录内容 ...

  2. 星际文件系统(InterPlanetary File System,缩写IPFS)

    星际文件系统(InterPlanetary File System,缩写IPFS)是个旨在创建持久且分布式存储和共享文件的络传输协议.它是一种内容可寻址的对等超媒体分发协议.在IPFS网络中的节点将构 ...

  3. ESP8266-NodeMCU网络服务器——通过网页将文件上传到闪存文件系统

    ESP8266WebServer esp8266_server(80); / 建立网络服务器对象,该对象用于响应HTTP请求.监听端口(80) File fsUploadFile; / 建立文件对象用 ...

  4. Esp32-Arduino 学习(闪存文件系统)

    目录 闪存文件写入 闪存文件读取 闪存文件删除 从Arduino IDE 上传文件 注:本文代码来自于太极创客团队: www.taichi-maker.com,由于太极创客的教程是基于esp8266, ...

  5. ESP8266学习 六 通过闪存文件系统上传web端程序

    使用闪存文件系统建立功能更加丰富的网络服务器 掌握了如何向ESP8266开发板的闪存文件上传文件,我们就有了更多的空间来存储更加丰富的网页资源,从而让我们实现功能更加丰富的物联网项目. 本节教程里,我 ...

  6. ESP32利用SPIFFS(闪存文件系统)创建 Web服务器实现引脚控制

    ESP32利用SPIFFS(闪存文件系统)创建 Web服务器实现引脚控制 在本教程中,我们将向您展示如何构建一个web服务器,以提供存储在ESP32文件系统中的HTML和CSS文件.我们将创建分离的H ...

  7. adb 文件传输,解决只读文件系统Read-only file system问题

    操作代码: adb push C:\xxdir\project /sdcard/xxx 执行此行代码,有可能会报错:错误如下 failed to copy './xxx' to '/xxx/xxx': ...

  8. 闪存Nand Flash存储结构浅析

    NandFlash存储器由多个Block组成,每一个Block又由多个Page组成,Page的大小一般为2K+64Bytes或512+16Bytes.Page是读取和编程的基本单位,而擦除的基本单位是 ...

  9. [闪存 1] Flash(闪存)存储器底层原理|闪存存储器重要参数

    声明 主页: 元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言. 个人辛苦整理,付费内容,禁止转载. 内容摘要

最新文章

  1. python 安装PIL包的方法以及简单介绍
  2. [Python图像处理] 三十一.图像点运算处理两万字详细总结(灰度化处理、阈值化处理)
  3. 雷军:我爱编程这个工作,可以肯定我会干上一辈子
  4. 无需Docker, 5分钟徒手DIY 一个Linux容器
  5. GridSearchCV( )参数详情
  6. 如何编写单元测试用例
  7. 【PostMan】测试Post请求
  8. 国内镜像站——国外资源的代理站点
  9. fpga初始化错误_FPGA下载程序出错
  10. 【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”,送福利
  11. fmt/core.h:1711:3: error: static assertion failed: Cannot format an argument.解决方案
  12. 三菱FX系列PLC与三菱变频器通讯应用实例
  13. c语言程序设计慕课版答案潘晟旻,附件1团队及组成.doc
  14. python读取微博文本数据,对微博文本进行分句(分句主要以特定的标点符号为主)。...
  15. 用idea将一个java文件打包成可执行jar包并能正确运行
  16. 开源自主导航小车MickX4(三)底盘ROS节点
  17. 对象存储Minio 客户端工具类,实现文件上传、图像压缩、图像添加水印
  18. Caff-Opencv——图像分类(01)
  19. discuz!代码内置颜色大全(收藏)
  20. 小商品销售平台+后台管理系统(day2-day5)练习小项目~

热门文章

  1. 软件工程及软件生命周期
  2. PyQt5网易云主页UI实现
  3. spring boot验证码的实现
  4. 计算机专业该如何找实习工作?迷茫、不知所措的你值得一看~
  5. 绕过安卓SSL验证证书的常见四种方式
  6. Google Earth Engine——可视化的美国加州圣华金河流域的100年气候预测模型
  7. XTOOL EZ500全系统的诊断和特殊功能超越Xtool EZ400 EZ300 Xtool PAD
  8. ubuntu系统镜像下载源
  9. 抗变态或亲变态是更好的解决方案
  10. 不要女程序员,公司都爱招男性程序员,这是为什么?