YAFFS2

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/目錄下,由於循序GPL,因此源碼是可以看到的。

相關詞條

熱門詞條

聯絡我們