ucfs檔案系統:各函式操作流程:
新建檔案流程(4k內容)
函式實際作用
flash耗時
作用目的
fsopen
讀目錄表(第一次)
0.7ms
判斷檔案是否已開啟
讀目錄表(第二次)
0.7ms
判斷檔案是否存在
寫目錄表
4+49+15ms
寫檔名建立時間
fswrite
讀sec1(fat表)
0.7ms
讀fat表(查詢空閒簇)
寫sec1(fat表)
4+49+15ms
寫fat表(寫首簇)
寫資料(大於sec41)
4+49+15
寫資料讀目錄表(第三次)
0.7ms
讀目錄表
寫目錄表
4+49+15
更新檔案屬性(大小,修改時間)
fsclose
建立乙個內容為4kb以內的檔案所需要的時間綜合
243~270ms
太慢了!
1.fsopen中第一次讀目錄表可以省去,判斷目錄是否已開啟可以通過已開啟檔案結構體判斷,這裡應該是為了更加安全先檢測目錄是否存在了。
2.fswrite中當一次寫入資料量大於一簇時,那麼在讀取fat表計算空閒簇 並寫入fat表後 寫資料的語句會迴圈執行直到資料全部寫入,最後寫目錄表更新檔案大小和時間;而多次呼叫fswrite寫入資料就會多次讀寫fat表和目錄表,產生較多的擦寫次數造成讀寫效率下降,因此應用層呼叫寫檔案時盡量一次寫入盡可能多的資料避免多次呼叫fswrite函式。
3.根據嵌入式裝置實際情況寫檔案的資料量大都是小資料,不會超過1k位元組,因此fswrite效率並不高,為了提高寫檔案效率可以建立緩衝機制(耗費記憶體):將fat表和目錄表讀到記憶體,每次修改不寫入flash, 單位時間內的多次寫同一檔案(不超過一簇)的也緩衝到記憶體,直到單位時間耗盡或者緩衝區滿 或者fsclose被呼叫才寫入flash,**修改比較複雜,其最終結果待實際檢驗。
實驗結果:
1.實驗得出寫大資料(4k整數倍),檔案系統效率提高微小,緩衝區每次都被填滿,所以必須寫入磁碟,因此寫大資料時緩衝機制只在讀寫fat表和目錄表時發揮作用,讀寫資料時不起作用。
2.多次寫入少量資料(小於一扇區資料量),檔案系統效率提公升隨fswrite
的呼叫次數逐步提公升,因為少量資料先寫進緩衝區,等緩衝滿才寫入磁碟,因此多次寫小資料是緩衝機制的作用就會越來越大。
檔案系統 why檔案系統
為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...
檔案系統 檔案系統的架構
vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...
檔案系統 編寫檔案系統
8.5 編寫乙個檔案系統 如果寫乙個實際檔案系統,但是涉及的東西太多,不容易簡明扼要的理解檔案系統的實現。linux核心中提供的romfs檔案系統是個非常理想的例子,既有實際應用架構,也清晰明了,故以romfs為例項分析檔案系統的實現。一 linux檔案系統的實現要素 編寫新檔案系統涉及一些基本物件...