維基百科,自由的百科全書
YAFFS(全稱:Yet Another Flash File System)是由Aleph One公司所發展出來的NAND Flash 嵌入式檔案系統。
在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 是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/目錄下。