Linux flash 文件系统剖析
过一个内部微控制器在硬件中实现,因此对于上层文件系统是透明的.
平均读写 前面提到 flash 设备属于耗损品:在变成坏块以前,可以执行有限次数的反复的 Erase 操作(因此由坏块管理进行标记).平均读写算法能够最大化 flash 的寿命.平均读写有两种形式:动态平均读写 和静态平均读写 . 动态平均读写解决了块的 Erase 周期的次数限制.动态平均读写算法并不是随机使用可用的块,而是平均使用块,因此,每个块都获得了相同的使用机会.静态平均读写算法解决了一个更有趣的问题.除了最大化 Erase 周期的次数外,某些 flash 设备在两个 Erase 周期之间还受到最大化 Read 周期的影响.这意味着如果数据在块中存储的时间太长并且被读了很多次,数据会逐渐消耗直至丢失.静态平均读写算法解决了这一问题,它可以定期将数据移动到新块.
系统架构 到目前为止,我已经讨论了 flash 设备及其面临的基本挑战.现在,让我们看看这些设备如何组合成为一个分层架构的一部分(参加图 1).架构的顶层是虚拟文件系统(VFS),它为高级应用程序提供通用接口.VFS 下面是 flash 文件系统(将在下节介绍).接下来是 Flash 转换层(Flash Translation Layer,FTL),它整体管理 flash 设备,包括从底层 flash 设备分配块、地址转换、动态平均读写和垃圾收集.在某些 flash 设备中,可以在硬件中实现一部分 FTL . 图 1. flash 系统的基本架构 Linux 内核使用内存技术设备(Memory Technology Device,MTD)接口,这是针对 flash 系统的通用接口.MTD 可以自动检测 flash 设备总线的宽度以及实现总线宽度所需设备的数量.
Flash 文件系统 Linux 可以使用多种 flash 文件系统.下一小节将解释每种文件系统的设计和优点. Journaling Flash File System Journaling Flash File System 是针对 Linux 的最早 flash 文件系统之一. JFFS 是一种专门为 NOR flash 设备设计的日志结构文件系统.它非常独特,能够解决许多 flash 设备问题,但同时也导致一些新问题. JFFS 将 flash 设备视为一种循环的块日志.写入 flash 的数据被写到了空间的末尾,开始部分的块则被收回,而两者之间的空间是空闲的;当空间变少时,将执行垃圾收集.垃圾收集器将有效块移动到日志的尾部,跳过无效或废弃块,并擦除它们(参见图 2).因此这种文件系统可以自动实现静态和动态平均读写.这种架构的主要缺点是过于频繁地执行擦除操作(而没有使用最佳擦除策略),从而使设备迅速磨损. 图 2. 在垃圾收集之前和之后循环日志
挂载 JFFS 时结构细节将读取到内存中,这将延缓挂载时间并消耗更多的内存. Journaling Flash File System 2 尽管 JFFS 在早期非常有用,但是它的平均读写算法容易缩短 NOR flash 设备的寿命.因此重新设计了底层算法,去掉了循环日志.JFFS2 算法专门为 NAND flash 设备设计,并且改善压缩性能. 在 JFFS2 中,flash 中的每个块都是单独处理的.JFFS2 通过维护块列表来充分地对设备执行平均读写.clean 列表表示设备中的块全部为有效节点.dirty 列表中的块至少包含有一个废弃节点.,free 列表包含曾经执行过擦除操作并且可以使用的块. 垃圾收集算法通过合理的方法智能地判断应该回收的块.目前,这个算法根据概率从 clean 或 dirty 列表中选择.dirty 列表的选择概率为 99%(将有效内容移到另一个块),而 clean 列表的选择概率为 1%(将内容移到新的块).在这两种情况中,对选择的块执行擦除操作,然后将其置于 free 列表(参见图 3).这允许垃圾收集器重用废弃的块,但是仍然围绕 flash 移动数据,以支持静态平均读写. 图 3. JFFS2 中的块管理和垃圾收集 Yet Another Flash File System Y |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |