在Flash存儲介質上的關於文件分配表的緩存實現方法
2023-07-12 01:47:11 2
專利名稱:在Flash存儲介質上的關於文件分配表的緩存實現方法
技術領域:
本發明為針對嵌入式設備FAT文件系統的一種FAT項緩存實現的方法。
背景技術:
嵌入式設備多以Flash作為存貯媒體,其RAM等資源都比較有限,且往往對掉電保護有嚴格要求。Flash存貯媒體的寫操作一般都比較耗時,且不能實現數據位由」0」-」1」的翻轉,這就要求儘可能減少Flash上的寫操作。因此嵌入式設備上的FAT文件系統在其實現上應具有一些特殊性。
對於FAT表,一般的文件系統實現方式是申請一塊很大內存空間,作為FAT表的內存映象。實際上一個文件的操作過程中需修改的FAT項個數往往並不多,有一個FAT項只有2個或4個字節。這些方法內存空間消耗較大,且不利於文件系統的掉電保護。
嵌入式設備文件系統要求緩存不能佔用較多的RAM資源,又要有較高的命中率,緩存效率較高。
發明內容
為了克服上述現有技術內存空間消耗較大、且不利於文件系統的掉電保護的缺點,提供一種在Flash存儲介質上關於文件分配表的緩存實現方法。
本發明的技術方案是提供一種在Flash存儲介質上關於文件分配表的緩存實現方法,其緩存針對單個的文件,當創建或打開文件時,就會創建一文件對象結構與之對應,在文件對象結構中有一個結構數組FatCache[FAT_CACHE_NUM],該數組的一個元素為一個FAT項緩存節點,該節點是一個包含了如下欄位的結構Age修改時間,該值越小,表明該項修改時間越早;ClusterNo簇號,FAT項對應簇的簇號;FatValFAT項的值;在文件系統的Disk被打開時,會申請一個位圖表,該表的每一位順序對應FAT區中的FAT項,如對應的FAT項被使用,則該項被置為『1』,否則為『0』;當文件系統修改FAT項時,就將要修改的FAT項對應的簇號、FAT項的值、當前時間寫到數組FatCache[]的一個節點中;如FatCache[]中沒有對應節點或沒有屬性為NULL的節點,則找出FatCache[]中的LRU節點,將其值回寫進Disk,再將要改寫的FAT項對應的簇號、FAT項的值、當前時間寫至LRU節點中,上述的LRU指最近最少使用的節點;在寫FAT項的值進入對應的FAT項緩存節點時,如FAT項的值不為FREE,則要置位圖表中的對應位為『1』,表示該FAT項已被佔用;
在回寫FAT項緩存節點中的FAT值到Disk中的FAT區的對應位置時,如FAT項的值為FREE,則要置位圖表中的對應位為『0』,表示該FAT項已被釋放,處於FREE狀態;當關閉或刷新文件時,文件系統會將FatCache[]中的有效內容寫入disk FAT區的對應位置。
所述的在Flash存儲介質上關於文件分配表的緩存實現方法,其FAT項緩存的實施方法包含以下三部分內容第一文件系統修改FAT項的實施方法;第二文件系統讀FAT項的實施方法;第三將FAT項緩存節點的FAT值寫入disk中FAT區的實施方法。
所述的在Flash存儲介質上關於文件分配表的緩存實現方法,所述的文件系統修改FAT項的實施方法如下步驟一,先查找要修改的FAT項是否在結構數組FatCache中,如果命中,直將FAT項的值寫入結構數組FatCache對應的FAT項緩存節點中;如果沒有命中,轉下一步;步驟二,結構數組FatCache中是否有空閒項,如存在,則以空閒項作為要修改FAT項的緩存節點,並將位圖中的對應位置為『1』;如果不存在,轉下一步;步驟三,在結構數組FatCache中找LRU項,將該項的值回寫入Disk,如回寫的FAT值為Free,還應將回寫項在位圖中的對應位置為『0』。然後將數組中的該項改為要修改FAT項的緩存節點,再將要修改的FAT項在位圖中的對應位置為『1』。
所述的在Flash存儲介質上關於文件分配表的緩存實現方法,所述的文件系統讀FAT項的實施方法如下查找要讀的FAT項是否在結構數組FatCache中,如果命中,則從結構數組FatCache對應的中讀出該FAT項的值;如果沒有命中,則從Disk的FAT表中讀出。
所述的在Flash存儲介質上關於文件分配表的緩存實現方法,所述的將FAT項緩存節點的FAT值寫入disk中FAT區的實施方法如下步驟一,找到緩存節點對應的FAT項所在的FAT區中扇區,為敘述方便,稱該扇區為扇區A;步驟二,將扇區A的內容讀入扇區Buffer中;步驟三,根據簇號將其要回寫緩存節點的FAT值寫入扇區緩衝區的對應位置中,如FAT值為FREE,則要將簇號記錄在一數組DeletedLisk中;步驟四,在FatCache[]中查找,是否還有緩存節點對應的目錄扇區為扇區A,若存在,則根據簇號將其FAT值寫入扇區緩衝區的對應位置中,如FAT值為FREE,則要將簇號記錄在數組DeletedLisk中;步驟五,將扇區緩衝區中的內容寫入扇區A中;步驟六,在DeletedLisk中逐個查找有效簇號,根據簇號將位圖中的對應位置為0,釋放該簇。
本發明的有益效果是本發明在Flash存儲介質上關於文件分配表的緩存實現方法,其所需的RAM資源較少,但緩存的命中率較高,並使文件系統能較好、較容易地解決掉電問題。
下面將參考附圖進行詳細的說明。
附圖1為本發明在Flash存儲介質上關於文件分配表的緩存實現方法的說明文件系統修改FAT項的步驟。
附圖2為本發明在Flash存儲介質上關於文件分配表的緩存實現方法的說明回寫FAT項緩存節點的步驟。
具體實施例方式
本發明在Flash存儲介質上關於文件分配表的緩存實現方法的緩存針對單個的文件,當創建或打開文件時,就會創建一文件對象結構與之對應,在文件對象結構中有一個結構數組FatCache[FAT_CACHE_NUM],該數組的一個元素我們在此稱之為一個FAT項緩存節點,該節點是一個包含了如下欄位的結構Age修改時間,該值越小,表明該項修改時間越早;ClusterNo簇號,FAT項對應簇的簇號;FatValFAT項的值;在文件系統的Disk被打開時,會申請一個位圖表,該表的每一位順序對應FAT區中的FAT項,如對應的FAT項被使用,則該項被置為『1』,否則為『0』;當文件系統修改FAT項時,就將要修改的FAT項對應的簇號、FAT項的值、當前時間寫到數組FatCache[]的一個節點中;如FatCache[]中沒有對應節點或沒有屬性為NULL的節點,則找出FatCache[]中的LRU節點,將其值回寫進Disk,再將要改寫的FAT項對應的簇號、FAT項的值、當前時間寫到LRU節點中,上述的LRU指最近最少使用的節點集合;在寫FAT項的值進入對應的FAT項緩存節點時,如FAT項的值不為FREE,則要置位圖表中的對應位為『1』,表示該FAT項已被佔用;在回寫FAT項緩存節點中的FAT值到Disk中的FAT區的對應位置時,如FAT項的值為FREE,則要置位圖表中的對應位為『0』,表示該FAT項已被釋放,處於FREE狀態;當關閉或刷新文件時,文件系統會將FatCache[]中的有效內容寫入disk FAT區的對應位置。
請一併參閱圖1和圖2,本發明在Flash存儲介質上關於文件分配表的緩存實現方法包括以下步驟1.文件系統修改FAT項的實施方法(參閱附圖1)步驟一,先查找要修改的FAT項是否在結構數組FatCache中,如果命中,直將FAT項的值寫入結構數組FatCache對應的FAT項緩存節點中;如果沒有命中,轉下一步;步驟二,結構數組FatCache中是否有空閒項,如存在,則以空閒項作為要修改FAT項的緩存節點,並將位圖中的對應位置為『1』;如果不存在,轉下一步;
步驟三,在結構數組FatCache中找LRU項,將該項的值回寫入Disk,如回寫的FAT值為Free,還應將回寫項在位圖中的對應位置為『0』。然後將數組中的該項改為要修改FAT項的緩存節點,再將要修改的FAT項在位圖中的對應位置置為『1』。
2.文件系統讀FAT項的實施方法查找要讀的FAT項是否在結構數組FatCache中,如果命中,則從結構數組FatCache對應的中讀出該FAT項的值;如果沒有命中,則從Disk的FAT表中讀出。
3.將FAT項緩存節點的FAT值寫入disk中FAT區的實施方法(參閱附圖2)步驟一,根據緩存節點的簇號確定對應的FAT項所在的目錄扇區及其在扇區中的位置(為敘述方便,稱該扇區為扇區A);步驟二,將扇區A的內容讀入扇區Buffer中;步驟三,根據簇號將其要回寫緩存節點的FAT值寫入扇區緩衝區的對應位置中。如FAT值為FREE,則要將簇號記錄在一數組DeletedLisk中;步驟四,在FatCache[]中查找,是否還有緩存節點對應的目錄扇區為扇區A,若存在,則根據簇號將其FAT值寫入扇區緩衝區的對應位置中,如FAT值為FREE,則要將簇號記錄在數組DeletedLisk中;步驟五,將扇區緩衝區中的內容寫入扇區A中;步驟六,在DeletedLisk中逐個查找有效簇號,根據簇號將位圖中的對應位置為0,釋放該簇。
權利要求
1.一種在Flash存儲介質上關於文件分配表的緩存實現方法,其特徵在於其緩存針對單個的文件,當創建或打開文件時,就會創建一文件對象結構與之對應,在文件對象結構中有一個結構數組FatCache[FAT_CACHE_NUM],該數組的一個元素為一個FAT項緩存節點,該節點是一個包含了如下欄位的結構Age修改時間,該值越小,表明該項修改時間越早;ClusterNo簇號,FAT項對應簇的簇號;FatValFAT項的值;在文件系統的Disk被打開時,會申請一個位圖表,該表的每一位順序對應FAT區中的FAT項,如對應的FAT項被使用,則該項被置為『1』,否則為『0』;當文件系統修改FAT項時,就將要修改的FAT項對應的簇號、FAT項的值、當前時間寫到數組FatCache[]的一個節點中;如FatCache[]中沒有對應節點或沒有屬性為NULL的節點,則找出FatCache[]中的LRU節點,將其值回寫進Disk,再將要改寫的FAT項對應的簇號、FAT項的值、當前時間寫到LRU節點中,上述的LRU指最近最少使用的節點;在寫FAT項的值進入對應的FAT項緩存節點時,如FAT項的值不為FREE,則要置位圖表中的對應位為『1』,表示該FAT項已被佔用;在回寫FAT項緩存節點中的FAT值到Disk中的FAT區的對應位置時,如FAT項的值為FREE,則要置位圖表中的對應位為『0』,表示該FAT項已被釋放,處於FREE狀態;當關閉或刷新文件時,文件系統會將FatCache[]中的有效內容寫入disk FAT區的對應位置。
2.按照權利要求1所述的在Flash存儲介質上關於文件分配表的緩存實現方法,其特徵在於FAT項緩存的實施方法包含以下三部分內容第一文件系統修改FAT項的實施方法;第二文件系統讀FAT項的實施方法;第三將FAT項緩存節點的FAT值寫入disk中FAT區的實施方法。
3.按照權利要求2所述的在Flash存儲介質上關於文件分配表的緩存實現方法,其特徵在於所述的文件系統修改FAT項的實施方法如下步驟一,先查找要修改的FAT項是否在結構數組FatCache中,如果命中,直將FAT項的值寫入結構數組FatCache對應的FAT項緩存節點中;如果沒有命中,轉下一步;步驟二,結構數組FatCache中是否有空閒項,如存在,則以空閒項作為要修改FAT項的緩存節點,並將位圖中的對應位置置為『1』;如果不存在,轉下一步;步驟三,在結構數組FatCache中找LRU項(Age最小),將該項的值回寫入Disk,如回寫的FAT值為Free,還應將回寫項在位圖中的對應位置為『0』。然後將數組中的該項改為要修改FAT項的緩存節點,再將要修改的FAT項在位圖中的對應位置為『1』。
4.按照權利要求2所述的在Flash存儲介質上關於文件分配表的緩存實現方法,其特徵在於所述的文件系統讀FAT項的實施方法如下查找要讀的FAT項是否在結構數組FatCache中,如果命中,則從結構數組FatCache對應的中讀出該FAT項的值;如果沒有命中,則從Disk的FAT表中讀出。
5.按照權利要求2所述的在Flash存儲介質上關於文件分配表的緩存實現方法,其特徵在於所述的將FAT項緩存節點的FAT值寫入disk中FAT區的實施方法如下步驟一,根據緩存節點的簇號確定對應的FAT項所在的目錄扇區及其在扇區中的位置,為敘述方便,稱該扇區為扇區A;步驟二,將扇區A的內容讀入扇區Buffer中;步驟三,根據簇號將其要回寫緩存節點的FAT值寫入扇區緩衝區的對應位置中,如FAT值為FREE,則要將簇號記錄在一數組DeletedLisk中;步驟四,在FatCache[]中查找,是否還有緩存節點對應的目錄扇區為扇區A,若存在,則根據簇號將其FAT值寫入扇區緩衝區的對應位置中,如FAT值為FREE,則要將簇號記錄在數組DeletedLisk中;步驟五,將扇區緩衝區中的內容寫入扇區A中;步驟六,在DeletedLisk中逐個查找有效簇號,根據簇號將位圖中的對應位置為0,釋放該簇。
全文摘要
本發明在Flash存儲介質上關於文件分配表的緩存實現方法發明的緩存針對單個的文件,當創建或打開文件時,就會創建一文件對象結構與之對應,在文件對象結構中有結構數組FatCache[FAT_CACHE_NUM]作為要修改的目錄項的緩存,FatCache數組中的每一項對應文件的一個FAT項,其結構包含簇號、簇對應的FAT項的值以及FAT項的修改時間,當文件系統修改FAT項時,就在FatCache[]找一節點,將要修改的FAT項對的簇號、FAT值、時間寫入對應的節點中,當關閉或刷新文件時,文件系統會將FatCache[]中的有效內容寫入disk FAT區的對應位置。本發明所需RAM資源較少,簡化了文件系統的掉電保護工作。
文檔編號G06F12/08GK1963810SQ200510117738
公開日2007年5月16日 申請日期2005年11月9日 優先權日2005年11月9日
發明者張學平 申請人:康佳集團股份有限公司