複製鏈接
請複製以下鏈接發送給好友

yaffs

鎖定
YAFFS是第一個在GPL協議下發布的、基於日誌的、專門為NAND Flash存儲器設計的、適用於大容量的存儲設備的嵌入式文件系統。
中文名
YAFFS文件系統
外文名
Yet Another Flash File System
英文簡稱
yaffs
類    別
嵌入式文件系統

yaffs文件系統簡介

YAFFS(Yet Another Flash File System)是第一個專門為NAND Flash存儲器設計的嵌入式文件系統,適用於大容量的存儲設備;並且是在GPL(General Public License)協議下發布的,可在其網站免費獲得源代碼。
YAFFS 是基於日誌的文件系統,提供磨損平衡和掉電恢復的健壯性。它還為大容量的Flash 芯片做了很好的調整,針對啓動時間和RAM 的使用做了優化。它適用於大容量的存儲設備,已經在Linux 和WinCE 商業產品中使用。

yaffs詳細內容

YAFFS中,文件是以固定大小的數據塊進行存儲的,塊的大小可以是512字節、1 024字節或者2 048字節。這種實現依賴於它能夠將一個數據塊頭和每個數據塊關聯起來。每個文件(包括目錄)都有一個數據塊頭與之相對應,數據塊頭中保存了ECC(Error Correction Code)和文件系統的組織信息,用於錯誤檢測和壞塊處理。充分考慮了NAND Flash的特點,YAFFS把這個數據塊頭存儲在Flash的16字節備用空間中。當文件系統被掛載時,只須掃描存儲器的備用空間就能將文件系統信息讀入內存,並且駐留在內存中,不僅加快了文件系統的加載速度,也提高了文件的訪問速度,但是增加了內存的消耗。
為了在節省內存的同時提高文件數據塊的查找速度,YAFFS利用更高效的映射結構把文件位置映射到物理位置。文件的數據段被組織成樹型結構,這個樹型結構具有32字節的節點,每個內部節點都包括8個指向其他節點的指針,葉節點包括16個2字節的指向物理地址的指針。YAFFS在文件進行改寫時總是先寫入新的數據塊,然後將舊的數據塊從文件中刪除。這樣即使在修改文件時意外掉電,丟失的也只是這一次修改數據的最小寫入單位,從而實現了掉電保護,保證了數據完整性
結合貪心算法的高效性和隨機選擇的平均性,YAFFS實現了兼顧損耗平均和減小系統開銷的目的。當滿足特定的小概率條件時,就會嘗試隨機選擇一個可回收的頁面;而在其他情況下,則使用貪心算法來回收最“髒”的塊[2]。

yaffs算法簡介

YAFFS文件系統是按層次結構設計的,分成以下4部分: yaffs_guts.c,文件系統的主要算法,這部分代碼完全是用可移植的C語言編寫的;yaffs_fs.c,Linux VFS層的接口;NAND 接口,yaffs_guts 和NAND 內存訪問函數之間的包裝層,例如調用Linux mtd 層或者RAM模擬層;可移植函數,服務的包裝函數。最重要的一點是,為了獲得更好的移植性,YAFFS提供直接調用的模式,這才使得我們有機會來實現YAFFS文件系統在C51系統上的移植。