亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種文件系統(tǒng)的存儲方法及系統(tǒng)與流程

文檔序號:11803221閱讀:264來源:國知局
一種文件系統(tǒng)的存儲方法及系統(tǒng)與流程
本發(fā)明涉及計算機文件系統(tǒng)技術(shù)領(lǐng)域,更具體的說,涉及文件系統(tǒng)的存儲方法及系統(tǒng)。

背景技術(shù):
FATFS(FileAllocationTableFileSystem)是微軟公司推出著名文件系統(tǒng),因其簡潔、高效、易用等特性,長期占據(jù)著壟斷地位。然而隨著多媒體行業(yè)的發(fā)展,大容量硬盤的出現(xiàn),F(xiàn)ATFS略顯力不從心。微軟也因此推出了FAT16、FAT32及exFAT等文件系統(tǒng)來適應(yīng)的新的需求。然而FAT文件分配表結(jié)構(gòu)并沒有革命性變化,文件無論大小,都采用同一FAT文件分配表,統(tǒng)一的簇的大小。其中,一個簇由1或N個扇區(qū)組成,是文件存儲的最小單位。采用現(xiàn)有的存儲文件的方式,用戶在對文件系統(tǒng)格式化時,如果設(shè)置大的簇來適應(yīng)大文件,那么會存在浪費空間的問題。因為一個簇只能被一個文件占用,如果小文件存儲在空間很大的簇中,那么該簇大量的剩余空間因無法存儲其他文件就會被浪費掉,所以采用設(shè)置大簇的方式來存儲大量小文件,會造成浪費空間的情況。如果設(shè)置小的簇來適應(yīng)小文件,那么大文件需要存儲在多個小簇中,所以會產(chǎn)生巨大的FAT文件分配表,從而增加了簇鏈的搜索時間,導(dǎo)致造成內(nèi)存消耗增加,性能下降。對于一個復(fù)雜的文件系統(tǒng),不同大小的文件必然同時存在。因此,如何解決上述技術(shù)缺陷,成為目前最需要解決的問題。

技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明的設(shè)計目的在于,提供一種文件系統(tǒng)的存儲方法及系統(tǒng),以節(jié)省文件系統(tǒng)的空間,降低對內(nèi)存的消耗,而且提高文件系統(tǒng)的性能。本發(fā)明實施例是這樣實現(xiàn)的:一種文件系統(tǒng)的存儲方法,包括:將獲取到的文件存儲在簇的多個子簇中,所述子簇為在磁盤的每個簇中被預(yù)先均勻劃分出來的;當(dāng)所述簇中存儲的文件數(shù)為一個時,則在文件分配表中記錄所述簇對應(yīng)的下一個子簇號;當(dāng)所述簇中存儲的文件數(shù)大于一個時,則在該簇中建立一個記錄著所述簇的每個子簇對應(yīng)的下一個子簇號的文件分配從表,并在所述文件分配表中記錄該簇具有所述文件分配從表。優(yōu)選地,在上述的文件系統(tǒng)的存儲方法中,當(dāng)所述簇不存在對應(yīng)的下一個子簇號時,則在所述文件分配表中記錄所述簇對應(yīng)的下一個子簇號為空。優(yōu)選地,在上述的文件系統(tǒng)的存儲方法中,當(dāng)所述簇的子簇不存在對應(yīng)的下一個子簇號時,則在所述文件分配從表中記錄所述子簇對應(yīng)的下一個子簇號為空。優(yōu)選地,在上述的文件系統(tǒng)的存儲方法中,當(dāng)所述簇中存儲的文件數(shù)為一個,且刪除所述簇的子簇中的文件時,則在所述文件分配從表中記錄所述簇的子簇為未分配狀態(tài)。優(yōu)選地,在上述的文件系統(tǒng)的存儲方法中,當(dāng)所述簇中存儲的文件數(shù)大于一個,且刪除所述簇的子簇中的文件時,則在所述文件分配從表中記錄所述簇的子簇為未分配狀態(tài)。優(yōu)選地,在上述的文件系統(tǒng)的存儲方法中,當(dāng)所述簇中存儲的文件數(shù)大于一個,且刪除所述簇中的所有文件時,則刪除所述文件分配從表,且在所述文件分配表中記錄所述簇為未分配狀態(tài)。優(yōu)選地,在上述的文件系統(tǒng)的存儲方法中,當(dāng)在所述磁盤中存儲一個文件,且所述磁盤的簇中存在文件分配從表時,則將所述文件優(yōu)先存儲至所述文件分配從表所在的簇中。優(yōu)選地,在上述的文件系統(tǒng)的存儲方法中,所述子簇占據(jù)一個扇區(qū)的空間。一種FAT文件系統(tǒng)的存儲系統(tǒng),包括:子簇分配模塊,用于在磁盤的每個簇中預(yù)先均勻的劃分出多個子簇;存儲模塊,用于將獲取到的文件存儲在簇的多個子簇中;文件分配表記錄模塊,用于當(dāng)所述簇中存儲的文件數(shù)為一個時,則在文件分配表中記錄所述簇對應(yīng)的下一個子簇號;當(dāng)所述簇中存儲的文件數(shù)大于一個時,則在所述文件分配表中記錄該簇具有所述文件分配從表;文件分配從表建立模塊,用于當(dāng)所述簇中存儲的文件數(shù)大于一個時,則在該簇中建立一個記錄著所述簇的每個子簇對應(yīng)的下一個子簇號的文件分配從表。與現(xiàn)有技術(shù)相比,本實施例提供的技術(shù)方案具有以下優(yōu)點和特點:在本發(fā)明提供的方案中,文件可以存儲在簇的子簇中,并且如果將兩個以上的文件存儲在一個簇中時,只需在該簇中建立一個文件分配從表,并記錄在文件分配表中,這樣就可以通過文件分配表訪問到文件分配從表,從而訪問到每個簇的子簇,所以本發(fā)明可以將磁盤中的每個簇的空間都充分利用起來;而且,通過在簇中建立文件分配從表的方式,不會產(chǎn)生巨大的文件分配表,從而不會增加簇鏈的搜索時間。因此,本發(fā)明提供的方案不僅充分的利用了磁盤的空間,而且有效降低了簇鏈搜索的時間。附圖說明為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明所提供的一種文件系統(tǒng)的存儲方法的流程圖;圖2為本發(fā)明所提供的一種磁盤整體存放效果示意圖;圖3為本發(fā)明所提供的一種文件分配表的示意圖;圖4為本發(fā)明所提供的一種文件分配從表的示意圖;圖5為本發(fā)明所提供的一種文件系統(tǒng)的存儲系統(tǒng)的模塊圖。具體實施方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。本發(fā)明實施例提供了一種文件系統(tǒng)的存儲方法,包括:將獲取到的文件存儲在簇的多個子簇中,所述子簇為在磁盤的每個簇中被預(yù)先均勻劃分出來 的;當(dāng)所述簇中存儲的文件數(shù)為一個時,則在文件分配表中記錄所述簇對應(yīng)的下一個子簇號;當(dāng)所述簇中存儲的文件數(shù)大于一個時,則在該簇中建立一個記錄著所述簇的每個子簇對應(yīng)的下一個子簇號的文件分配從表,并在所述文件分配表中記錄該簇具有所述文件分配從表。由于上述文件系統(tǒng)的存儲方法的具體實現(xiàn)存在多種方式,下面通過具體實施例進行詳細說明:請參見圖1所示,圖1所示的為一種文件系統(tǒng)的存儲方法的流程圖,該方法包括:步驟S11、將獲取到的文件存儲在簇的多個子簇中,所述子簇為在磁盤的每個簇中被預(yù)先均勻劃分出來的;在步驟S11中,在使用磁盤的空間之前,需要對磁盤進行格式化。在進行格式化時,需要確定好每子簇的扇區(qū)數(shù),每簇的子簇數(shù),將在簇內(nèi)劃分出來的空間稱為子簇。為了達到最好的效果,通常每子簇1個扇區(qū),每簇的子簇數(shù)=扇區(qū)字節(jié)數(shù)/元素字節(jié)數(shù)。格式化后,并不存在文件分配從表。步驟S12、當(dāng)所述簇中存儲的文件數(shù)為一個時,則在文件分配表中記錄所述簇對應(yīng)的下一個子簇號;在步驟S12中,如果在簇中所存儲的文件只有一個,不管這個文件是否完全占用了整個簇的空間,那么都需要在文件分配表中記錄這個簇對應(yīng)的下一個子簇號;如果這個簇中的文件并沒有對應(yīng)的下一個子簇號,那么在文件分配表中記錄這個簇對應(yīng)的為空。步驟S13、當(dāng)所述簇中存儲的文件數(shù)大于一個時,則在該簇中建立一個記錄著所述簇的每個子簇對應(yīng)的下一個子簇號的文件分配從表,并在所述文件分配表中記錄該簇具有所述文件分配從表。在步驟S13中,如果在簇中所存儲的文件大于一個時,假設(shè)在簇中存儲兩個文件,那么在文件分配表中就沒有辦法記錄這兩個文件分別指向的兩個子簇號,因為文件分配表中記錄的只是一個簇與一個子簇的對應(yīng)關(guān)系,而無法記錄這個簇中的兩個子簇與另外兩個子簇的對應(yīng)關(guān)系。所以在文件分配表中一個簇只能指向一個子簇,無法指向兩個子簇,這是由文件分配表的結(jié)構(gòu)所決定的。所以如果希望能夠記錄下簇中的兩個子簇能夠分別對應(yīng)另外兩個子簇,那么需要在該簇中建立一個文件分配從表,用這個文件分配從表來記 錄該簇中每個子簇對應(yīng)的下一個子簇號。當(dāng)在該簇中建立文件分配從表以后,需要在文件分配表中記錄該簇中具有文件分配從表。在圖1所示的實施例中,文件可以存儲在簇的子簇中,并且如果將兩個以上的文件存儲在一個簇中時,只需在該簇中建立一個文件分配從表,并記錄在文件分配表中,這樣就可以通過文件分配表訪問到文件分配從表,從而訪問到每個簇的子簇,所以本發(fā)明可以將磁盤中的每個簇的空間都充分利用起來;而且,通過在簇中建立文件分配從表的方式,不會產(chǎn)生巨大的文件分配表,從而不會增加簇鏈的搜索時間。因此,本發(fā)明提供的方案不僅充分的利用了磁盤的空間,而且有效降低了簇鏈搜索的時間。在圖1所示的實施例中,當(dāng)所述簇不存在對應(yīng)的下一個子簇號時,則在所述文件分配表中記錄所述簇對應(yīng)的下一個子簇號為空。當(dāng)所述簇的子簇不存在對應(yīng)的下一個子簇號時,則在所述文件分配從表中記錄所述子簇對應(yīng)的下一個子簇號為空。當(dāng)所述簇中存儲的文件數(shù)為一個,且刪除所述簇的子簇中的文件時,則在所述文件分配從表中記錄所述簇的子簇為未分配狀態(tài)。當(dāng)所述簇中存儲的文件數(shù)大于一個,且刪除所述簇的子簇中的文件時,則在所述文件分配從表中記錄所述簇的子簇為未分配狀態(tài)。當(dāng)所述簇中存儲的文件數(shù)大于一個,且刪除所述簇中的所有文件時,則刪除所述文件分配從表,且在所述文件分配表中記錄所述簇為未分配狀態(tài)。當(dāng)在所述磁盤中存儲一個文件,且所述磁盤的簇中存在文件分配從表時,則將所述文件優(yōu)先存儲至所述文件分配從表所在的簇中。下面通過具體事例進行詳細說明,請參見圖2至圖4所示,圖2所示的為磁盤整體存放效果圖,圖3所示的為文件分配表的示意圖,圖4所示的為文件分配從表的示意圖。在圖2至圖4所示的實施例中,存在兩種類型的文件分配表,其中,新增類型的文件分配表是動態(tài)創(chuàng)建的。FATFS文件系統(tǒng)原有的表可以叫文件分配表,新增的叫文件分配從表。在圖2至圖4所示的實施例中,為了便于分析說明,在從這里開始,我們假定一個扇區(qū)為16字節(jié),一個子簇就一個扇區(qū)。而一個簇有4個扇區(qū),即4個子簇。而整個磁盤假定有6個簇,文件分配表中每個元素32位。6個簇約需2個扇區(qū)存放,假定就放在第0簇的后兩個扇區(qū)。圖2展示了整體存放 效果,其中根目錄占據(jù)第1簇與第3簇,文件1占據(jù)第2簇及第4簇中第0子簇。文件2占據(jù)第4簇第1子簇、第2子簇,及第5簇。圖3所示的為文件分配表,文件分配表中主要是一個單向鏈表,每個元素的位置對應(yīng)一個簇,其最高位叫做文件分配從表標志,表示本簇是否有文件分配從表;其余位指向下一個子簇,叫簇索引。在圖3所示的文件分配表中,每個元素的最高位(b31)為文件分配從表標志,低位(b0-b30)為簇索引。在圖3中,上面一行即為00001000,這八個位代表當(dāng)前的簇是否存在文件分配從表,其中,0表示不存在文件分配從表,1表示存在文件分配從表。那么第5位,即第四簇中存在文件分配從表,所以從左向右看的第五位的數(shù)字為1,結(jié)合圖2來看確實是在第四簇中的第三子簇存在文件分配從表。另外,在圖3所示的每個方框表示一個32位的元素,方框內(nèi),上面的數(shù)字表示本簇是否存在文件分配從表,其中0表示不存在文件分配從表。下面的數(shù)字指向下一個子簇,其中0表示本簇未分配,-1表示已分配或文件最后簇,-2表示沒有真實的簇對應(yīng)或壞簇。圖4所示的為文件分配從表,文件分配從表也是一個單向鏈表,每個元素的位置代表一個子簇,其值指向下一個子簇。子簇屬于某個簇,文件分配從表存儲在其簇內(nèi)最后的子簇上。一個文件分配從表占據(jù)一個子簇,表示所屬簇內(nèi)的鏈式關(guān)系。其中,圖4中的每個方框表示一個32位的元素,方框內(nèi)數(shù)字表示下一個子簇的索引,其中0表示本子簇未分配,-1表示已分配或文件最后簇。在圖4的第一個方框內(nèi)為-1,表示文件1為最后簇;第二個方框為18,表示第17子簇內(nèi)的文件2的簇索引為第18子簇,即第二個方框是第17子簇,第17子簇的簇索引為第18子簇;第三個方框為20,表示第18子簇內(nèi)的文件2的的簇索引為第20子簇,即第三個方框是第18子簇,第18子簇的簇索引為第20子簇;第四個方框為-1,該第19子簇存放的為文件分配從表,且正好為最后簇,所以為-1。通過上述實施例可以看出,本發(fā)明提供的文件分配表與文件分配從表的有機結(jié)合,協(xié)調(diào)工作,實現(xiàn)簇鏈的遍歷。首先文件的目錄信息(DIRENTRY)說明了這個文件的第一個子簇的簇號,據(jù)這個子簇編號可計算出所歸屬的簇。簇與文件分配表的元素對應(yīng),可以在文件分配表中檢查簇的子表是否存在。 如果這個簇的文件分配從表不存在,則整個簇為文件所使用,下一簇是文件分配表中的簇索引;否則,則在文件分配從表中搜索下一個簇。在圖2至圖4所示的實施例中,還可以對剩余空間進行計算。首先,在文件分配表中掃描所有簇,如果為0表示這個簇為空閑;當(dāng)存在文件分配從表時,再文件分配從表中掃描所有子簇,如果為0表示這個子簇為空閑。這樣便可以計算它的剩余空間。在圖2至圖4所示的實施例中,新建一個文件或文件復(fù)制時,需要為其分配一定大小的空間。推薦分配方法如下:首先,所需空間被切割為N個簇。為其在文件分配表中分配這N個簇。這個過程與原FATFS大致相同。其次,簇切割余下的子簇,應(yīng)通過文件分配表搜尋所有文件分配從表,在文件分配從表中為其分配子簇。如果無法從現(xiàn)有的文件分配從表分配余下的子簇,需要在一個空白簇創(chuàng)建文件分配從表,然后分配。在圖2至圖4所示的實施例中,刪除文件時,需要先遍歷文件鏈,釋放對其分配的簇及子簇,在子簇釋放過程中,如果文件分配從表內(nèi)所有子簇都空了,則文件分配從表被刪除,文件分配表中的文件分配從表標志置0。另外,上述已講解了雙FAT表的數(shù)據(jù)結(jié)構(gòu),邏輯及工作原理。基于上述已可以改造出一個雙FAT表的文件系統(tǒng)了。但具體實施時邏輯與流程將更復(fù)雜,需要考慮更多的情況,進行更深的優(yōu)化、提供更強大的功能。例如:在文件分配表中,如果文件分配從表標志為1,則簇索引可以轉(zhuǎn)義,表示本簇中空白子簇的數(shù)量,這樣可以加快分析速度。增大文件:此應(yīng)當(dāng)分析此文件對應(yīng)的最后簇是否有空白子簇,如果有應(yīng)該先分配這些子簇。然后再按新建文件的規(guī)則分配空間。減小文件:減小后文件的尾簇對應(yīng)的簇會有更多的空閑子簇,如果該簇沒有文件分配從表,應(yīng)該創(chuàng)建文件分配從表,并在文件分配從表中反映這些空閑子簇。虛擬U盤:分析文件分配表與及所有文件分配從表,將雙FAT表變?yōu)橐粋€大的FAT表,轉(zhuǎn)化為當(dāng)前流行操作系統(tǒng)(如Windows等)能識別的文件系統(tǒng)。請參見圖5所示,圖5所示的為一種FAT文件系統(tǒng)的存儲系統(tǒng),該存儲系統(tǒng)1包括:子簇分配模塊11,用于在磁盤2的每個簇中預(yù)先均勻的劃分出多個子簇;存儲模塊12,用于將獲取到的文件存儲在簇的多個子簇中;文件分配表記錄模塊13,用于當(dāng)所述簇中存儲的文件數(shù)為一個時,則在文件分配 表中記錄所述簇對應(yīng)的下一個子簇號;當(dāng)所述簇中存儲的文件數(shù)大于一個時,則在所述文件分配表中記錄該簇具有所述文件分配從表;文件分配從表建立模塊14,用于當(dāng)所述簇中存儲的文件數(shù)大于一個時,則在該簇中建立一個記錄著所述簇的每個子簇對應(yīng)的下一個子簇號的文件分配從表。需要說明的是,圖1至圖5所示的實施例只是本發(fā)明所介紹的優(yōu)選實施例,本領(lǐng)域技術(shù)人員在此基礎(chǔ)上,完全可以設(shè)計出更多的實施例,因此不在此處贅述。對這些實施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1