YAFFS(全称:Yet Another Flash File System)是由Aleph One公司所发展出来的NAND Flash 嵌入式文件系统。

YAFFS
开发者Charles Manning
全称Yet Another Flash File System
功能
操作系统支持AndroidFirefox OSLinuxWindows CE、pSOS、eCos、ThreadX

在YAFFS中,最小存储单位为一个Page,文件内的数据是存储在固定512 bytes的Page中,每一个Page亦会有一个对应的16 bytes的Spare(OOB,Out-Of-Band)。YAFFS采用Tree Node Structure,由多个Tree Node(Tnode)所组成,Tnode又分成Internal Tnode与Lowest-Level Tnode,其中Internal Tnode由8个Pointers所组成,Lowest-Level Tnode由16个Entries所组成,其时间复杂度(Time Complexity)相当于O(log N),故地址转换时间较迅速。一旦Flash Memory挂载(mount)之时,YAFFS会为每个文件在RAM中建立一个Tree, 并随时提供Chunk(即Page, 由yaffs_Object所配置),可是 YAFFS并未完全实现耗损平均技术(wear-leveling)算法,因此还是会造成部分的Block过度访问。

目前YAFFS在将Data写入Flash Memory时会执行Garbage Collection,YAFFS Garbage Collection分成两种Mode:Aggressive Mode及Passive Mode, 而且找寻Dirtiest Block(最多Invalid Chunk)及查找Empty Block都是透过Linear Search的方式(JFFS2是Link List的方式)。YAFFS2不再使用Partial Page Programming(YAFFS仍使用)。

YAFFS2 编辑

YAFFS2 是Aleph1的工程师Charles Manning 开发的NAND Flash 文件系统。YAFFS1和YAFFS2 主要差异还是在于page 读写 size的大小,YAFFS2可支持到2K per page, 远高于YAFFS的512 bytes, 因此对大容量NAND Flash更具优势。其他与YAFFS1不同的是, YAFFS2不再写spare area, sequenceNumber 用29 bits 表示。Yaffs2还拥有YAFFS1所缺乏的SuperBlock, 因此YAFFS1严重依赖文件系统的read_super。

目前YAFFS 和YAFFS2 皆遵守GNU GPL开放源代码。Android 采用yaffs2作为MTD NAND flash文件系统,位于fs/yaffs2/目录下。

相关条目 编辑

参考资料 编辑

外部链接 编辑