CRAMFS 與 YAFFS 簡介與區別

2021-05-26 16:10:49 字數 2111 閱讀 8022

cramfs 與 yaffs

[ 2009-3-28 8:18:00 | by: zcying ]

cramfs簡介

cramfs檔案系統是專門針對快閃儲存器設計的唯讀壓縮的檔案系統,其容量上限為256m,採用zlib壓縮,檔案系統型別可以是ext2或ext3.

如果使用ramdisk方式來使用檔案系統,那麼在系統執行之後,首先得把flash上的映像檔案全部解壓到ram中,構造ramdisk環境,才可以執行程式,但有乙個致命的弱點,在正常情下,同樣的**不僅在flash占用了空間,而且還在ram中占用極大的空間,這違背了嵌入式中節省資源的原則.

cramfs檔案系統並不需要一次性地將檔案系統中的所有內容解壓到ram中,而只是是系統需要訪問某個位置的資料時,馬上計算出該資料在cramfs中的位置,將其解壓到ram中,然後通過記憶體訪問來獲取資料,cramfs中的解壓縮之後的記憶體中的資料存放位置都是由cramfs檔案系統本身來管理,使用者並不需要實現過程,因此增加了透明度,給開發人員節約了時間.

cramfs擁有以下一些特性:

採用實時解壓縮方式,但解壓縮的時候有延遲。

cramfs的資料都是經過處理、打包的,對其進先寫操作有一定困難。所以cramfs不支援寫操作,這個特性剛好適合嵌入式應用中使用flash儲存檔案系統的場合。

在cramfs中,檔案最大不能超過16mb。

支援組標識(gid),但是mkcramfs只將gid的低8位儲存下來,因此只有這8位是有效的。

支援硬鏈結。但是cramfs並沒有完全處理好,硬鏈結的檔案屬性中,鏈結數仍然為1.

cramfs的目錄中,沒有「.」和「..」這兩項。因此,cramfs中的目錄的鏈結數通常也僅有乙個。

cramfs中,不會儲存檔案的時間戳(timestamps)資訊。當然,正在使用的檔案由於inode儲存在記憶體中,因此其時間可以暫時地變更為最新時間,但是不會儲存到cramfs檔案系統中去。

當前版本的cramfs只支援page_cache_size為4096的核心。因此,如果發現cramfs不能正常讀寫的時候,可以檢查一下核心的引數設定。

yaffs簡介

yaffs是第乙個專門為nand flash儲存器設計的嵌入式檔案系統,適用於大容量的儲存裝置;並且是在gpl(general public license)協議下發布的,可在其**免費獲得源**。 

yaffs中,檔案是以固定大小的資料塊進行儲存的,塊的大小可以是512位元組、1 024位元組或者2 048位元組。這種實現依賴於它能夠將乙個資料塊頭和每個資料塊關聯起來。每個檔案(包括目錄)都有乙個資料塊頭與之相對應,資料塊頭中儲存了ecc(error correction code)和檔案系統的組織資訊,用於錯誤檢測和壞塊處理。充分考慮了nand flash的特點,yaffs把這個資料塊頭儲存在flash的16位元組備用空間中。當檔案系統被掛載時,只須掃瞄儲存器的備用空間就能將檔案系統資訊讀入記憶體,並且駐留在記憶體中,不僅加快了檔案系統的載入速度,也提高了檔案的訪問速度,但是增加了記憶體的消耗。 

為了在節省記憶體的同時提高檔案資料塊的查詢速度,yaffs利用更高效的對映結構把檔案位置對映到物理位置。檔案的資料段被組織成樹型結構,這個樹型結構具有32位元組的節點,每個內部節點都包括8個指向其他節點的指標,葉節點包括16個2位元組的指向實體地址的指標。yaffs在檔案進行改寫時總是先寫入新的資料塊,然後將舊的資料塊從檔案中刪除。這樣即使在修改檔案時意外掉電,丟失的也只是這一次修改資料的最小寫入單位,從而實現了掉電保護,保證了資料完整性。 

結合貪心演算法的高效性和隨機選擇的平均性,yaffs實現了兼顧損耗平均和減小系統開銷的目的。當滿足特定的小概率條件時,就會嘗試隨機選擇乙個可**的頁面;而在其他情況下,則使用貪心演算法來**最「髒」的塊[2]。 

yaffs檔案系統是按層次結構設計的,分成以下4部分: yaffs_guts.c,檔案系統的主要演算法,這部分**完全是用可移植的c語言編寫的;yaffs_fs.c,linux vfs層的介面;nand 介面,yaffs_guts 和nand 記憶體訪問函式之間的包裝層,例如呼叫linux mtd 層或者ram模擬層;可移植函式,服務的包裝函式。最重要的一點是,為了獲得更好的移植性,yaffs提供直接呼叫的模式,這才使得我們有機會來實現yaffs檔案系統在c51系統上的移植。

cramfs & yaffs

YAFFS檔案系統簡介

yaffs檔案系統簡介 yaffs yet another flash filing system 是第乙個專門為nand flash儲存器設計的嵌入式檔案系統,適用於大容量的儲存裝置 並且是在gpl general public license 協議下發布的,可在其 免費獲得源 yaffs是基於日...

git與github區別與簡介

git 是乙個版本管理工具,是可以在你電腦不聯網的情況下,只在本地使用的乙個版本管理工具,其作用就是可以讓你更好的管理你的程式,比如你原來提交過的內容,以後雖然修改了,但是通過git這個工具,可以把你原來提交的內容重現出來,這樣對於你後來才意識到的一些錯誤的更改,可以進行還原。總的來說git是一種版...

TCP與UDP簡介與對比

名稱 tcpudp 是否連線 面向連線 面向非連線 傳輸可靠性 可靠不可靠 應用場合 傳輸大量資料 少量資料速度慢 快tcp transmission control protocol,傳輸控制協議 是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。udp user data ...