Mic 的技术点滴:关于linux, wince 6.0...还有其他牢骚 mic's another world http://www.ootroo.com/zblog

理解yaffs文件系统

2007-12-19 17:09:05 / 个人分类:linux

Yaffs文件系统是专门为NAND flash设计的,以下是我对yaffs的理解.(很多一部分是翻译,理解的,难免有疏漏之处)
$[ g3i.n)Dcb!s'qW0 LUPA开源社区{'YA Ne-NW1B_
LUPA开源社区t)gx/rhX0`
--Yaffs用到的专用术语--LUPA开源社区8kAD s p%yx}*T
Page - NAND里可访问的最小存储单元,需要跟文件系统中"页"的概念区别开来.具有的属性:读,写;能被标记,表明其是否损坏;还有用于存放校验数据的oob 单元. Page大小有512字节的,也有2K字节的;针对此,oob区域也有不同大小,512B/Page的oob有16个字节,2KB/Page的oob就是 前者的4倍,也就是说64个字节.LUPA开源社区7fYoL)eib6Y?gV
LUPA开源社区)kX+o T G `v!]Z[
LUPA开源社区QI@;ehf)ne8b
Block - NAND实现了快速的擦,就是因为有了它. Block由64个Page组成. 所以根据Page大小不同,block有16K字节的和128K字节的.
9o5|!o0p ]1Dmi0
6{(I;z@@*C0
5W~H1G,i!p:J[0 OOB - 用来存放Page上数据的ECC信息,每个Page都有自己的oobLUPA开源社区|q2\"l4Xn

0} G&t7o\^!pCQ0 Chunk - Chunk是Yaffs文件系统里的概念,是文件访问的基本单元,跟Nand物理上的page大小一样
C8S)x~NldI0
$gyGl Q.gc0 Object - 构成Yaffs文件系统的各种元素,比如文件,目录,链接,设备等等
^T9s a;B$q ^2~I9o;~0
T ~:c JX gik;Q0 LUPA开源社区ys8T#B-K)mvP
--yaffs设计--LUPA开源社区:`Ce(\$N%F!DG?
基于4个原则:
)y ?5awP1t0 1. 专门为Nand flash设计
T| w$M7\0Ia0 2. 稳定性好
ln0Ka:Fl:h0 3. 运行时消耗内存小LUPA开源社区Z ^+T a;CT
4. 启动速度快
4Yv5B&R y\(`)]0 LUPA开源社区H:e l#c^
文件数据都是存在chunk中的,chunk的大小跟page一样. 每个page都被标记了一个chunk number和file id. 简单的说,文件被分成很多chunk存在各个page中.每个chunk的有
$v2c$}*aDSl%yS0 效数据都是page的大小,除了最后哪个chunk. 照我的理解,chunk跟page就是同一个东西.
]g!K~n'z'|0
u/_c wXX L ~3v ^X0 文件的"头"当然被放置在第一个page中;里面包括了一些信息比如文件属性,路径等;这个page的属性就区别于其他page,因为yaffs系统通过找到这个"头page" 来找到文件. 文件夹,链接等也被存在类似的page中.
gfYQ5P0
&D-Gw&g@&?g0 当然文件被修改的时候,yaffs会把修改好的结果写入到新的chunk里;删除操作是通过把删除的目标(可以是文件,链接,文件夹)放置到一个'隐藏'的路径中.所以说,删除一个目标之后,它并没有从LUPA开源社区9Y/G.Q XZ(yE]
Nand中消失,而是继续存在的,知道保存它的所由page都被擦除.

TAG: linux

我来说两句

-5 -3 -1 - +1 +3 +5

Open Toolbar