Yaffs文件系统是专门为NAND flash设计的,以下是我对yaffs的理解.(很多一部分是翻译,理解的,难免有疏漏之处)
--Yaffs用到的专用术语--
Page - NAND里可访问的最小存储单元,需要跟
文件系统中"页"的概念区别开来.具有的属性:读,写;能被标记,表明其是否损坏;还有用于存放校验数据的oob 单元. Page大小有512字节的,也有2K字节的;针对此,oob区域也有不同大小,512B/Page的oob有16个字节,2KB/Page的oob就是前者的4倍,也就是说64个字节.
Block - NAND实现了快速的擦,就是因为有了它. Block由64个Page组成. 所以根据Page大小不同,block有16K字节的和128K字节的.
OOB - 用来存放Page上数据的ECC信息,每个Page都有自己的oob
Chunk - Chunk是Yaffs文件系统里的概念,是文件访问的基本单元,跟Nand物理上的page大小一样
Object - 构成Yaffs文件系统的各种元素,比如文件,目录,链接,设备等等
--yaffs设计--
基于4个原则:
1. 专门为Nand flash设计
2. 稳定性好
3. 运行时消耗内存小
4. 启动速度快
文件数据都是存在chunk中的,chunk的大小跟page一样. 每个page都被标记了一个chunk number和file id. 简单的说,文件被分成很多chunk存在各个page中.每个chunk的有
效数据都是page的大小,除了最后哪个chunk. 照我的理解,chunk跟page就是同一个东西.
文件的"头"当然被放置在第一个page中;里面包括了一些信息比如文件属性,路径等;这个page的属性就区别于其他page,因为yaffs系统通过找到这个"头page" 来找到文件. 文件夹,链接等也被存在类似的page中.
当然文件被修改的时候,yaffs会把修改好的结果写入到新的chunk里;删除操作是通过把删除的目标(可以是文件,链接,文件夹)放置到一个'隐藏'的路径中.所以说,删除一个目标之后,它并没有从
Nand中消失,而是继续存在的,知道保存它的所由page都被擦除.