本發(fā)明涉及數(shù)據(jù)文件存儲(chǔ)技術(shù)領(lǐng)域,具體涉及一種基于FPGA的適用于高速海量存儲(chǔ)的文件存儲(chǔ)方法。
背景技術(shù):
文件系統(tǒng)是用于明確存儲(chǔ)設(shè)備(磁盤(pán)、固態(tài)硬盤(pán)等)存儲(chǔ)數(shù)據(jù)的方法和數(shù)據(jù)結(jié)構(gòu),將數(shù)據(jù)以文件的形式進(jìn)行管理,即在存儲(chǔ)設(shè)備上組織數(shù)據(jù)的方法。文件系統(tǒng)負(fù)責(zé)對(duì)存儲(chǔ)設(shè)備的空間進(jìn)行組織和分配,負(fù)責(zé)文件存儲(chǔ)并對(duì)存入的文件進(jìn)行檢索。具體的說(shuō),它負(fù)責(zé)為用戶建立、存入、讀取、修改、刪除、檢索文件等。
然而上述文件系統(tǒng)通常作為操作系統(tǒng)軟件功能的一部分整合在操作系統(tǒng)中,由計(jì)算機(jī)軟件(指令)執(zhí)行數(shù)據(jù)管理命令,如Windows系統(tǒng)中的FAT文件系統(tǒng)、NTFS文件系統(tǒng)、exFAT文件系統(tǒng)、運(yùn)行在Linux系統(tǒng)中的ext文件系統(tǒng)、SWAP文件系統(tǒng)等。但在無(wú)操作系統(tǒng)的嵌入式系統(tǒng)中,尤其對(duì)于無(wú)CPU軟件執(zhí)行環(huán)境的FPGA系統(tǒng)中,上述文件系統(tǒng)由于其功能完備復(fù)雜、需由CPU軟件執(zhí)行等原因,并不適應(yīng)FPGA硬件系統(tǒng),因而受到應(yīng)用限制。
同時(shí)FPGA系統(tǒng)除在高速數(shù)據(jù)處理領(lǐng)域有廣泛應(yīng)用,海量高速數(shù)據(jù)存儲(chǔ)管理功能也有大量應(yīng)用需求。傳統(tǒng)應(yīng)用中FPGA只實(shí)現(xiàn)了簡(jiǎn)單數(shù)據(jù)管理(如存儲(chǔ)空間分為固定大小區(qū)域用于存儲(chǔ)數(shù)據(jù)),或無(wú)數(shù)據(jù)管理功能(如直接將整個(gè)存儲(chǔ)空間順序存儲(chǔ),再次存儲(chǔ)數(shù)據(jù)時(shí)從起始處覆蓋原有數(shù)據(jù))。這種方法無(wú)法實(shí)現(xiàn)類似計(jì)算機(jī)系統(tǒng)中文件式的有效管理,如數(shù)據(jù)大小任意、數(shù)據(jù)文件數(shù)量眾多、高存儲(chǔ)空間利用率等。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明解決的技術(shù)問(wèn)題是:為在無(wú)CPU軟件執(zhí)行環(huán)境的FPGA硬件系統(tǒng)中實(shí)現(xiàn)海量數(shù)據(jù)存儲(chǔ)管理,針對(duì)(但不限于)現(xiàn)有商業(yè)/工業(yè)硬盤(pán)存儲(chǔ)標(biāo)準(zhǔn)(以扇區(qū)為存儲(chǔ)單位,每扇區(qū)512字節(jié)),提供一種基于FPGA的適用于高速海量存儲(chǔ)的文件存儲(chǔ)方法。
為了解決上述技術(shù)問(wèn)題,本發(fā)明的技術(shù)方案具體如下:
一種基于FPGA的適用于高速海量存儲(chǔ)的文件存儲(chǔ)方法,包括以下步驟:
將整個(gè)存儲(chǔ)容量平分為C個(gè)簇,每個(gè)簇包含S個(gè)扇區(qū);每個(gè)簇有不同的編號(hào),編號(hào)位寬16bit;
CAP=512×C×S
其中C最大為65533,S最大為16383;
通過(guò)管理簇鏈表FAT來(lái)管理文件數(shù)據(jù);每個(gè)簇鏈表對(duì)應(yīng)的簇包含的數(shù)據(jù)順序組合即成為一個(gè)文件;
通過(guò)管理目錄數(shù)據(jù)結(jié)構(gòu)DIR來(lái)記錄每個(gè)文件的基本信息;
通過(guò)管理FSINFO來(lái)記錄該硬盤(pán)文件系統(tǒng)的基本信息,包括標(biāo)識(shí)文件系統(tǒng)有效的幻數(shù)標(biāo)志0x55AA55AA、該文件系統(tǒng)含有的簇個(gè)數(shù)、以及每個(gè)簇占用的扇區(qū)數(shù);
FAT、DIR和FSINFO被順序保存在第0簇中;
該文件存儲(chǔ)方法向用戶提供了以下文件操作接口:格式化、創(chuàng)建/寫(xiě)入文件、刪除文件、讀取文件、列出文件;
具體的說(shuō):
格式化:當(dāng)使用新的硬盤(pán)或文件系統(tǒng)損壞時(shí),需要格式化硬盤(pán),包括將所有DIR目錄項(xiàng)清空,表明沒(méi)有文件;將所有FAT所有數(shù)組成員標(biāo)記為0,表明所有簇未被占用;
創(chuàng)建/寫(xiě)入文件:首先搜索空閑DIR目錄項(xiàng),同時(shí)搜索FAT下一個(gè)空簇;若無(wú)空閑目錄項(xiàng)或FAT空簇,則創(chuàng)建文件失敗;若目錄中含有與給定文件ID相同的文件,則首先刪除該文件;否則根據(jù)創(chuàng)建文件信息填充目錄項(xiàng)文件ID和創(chuàng)建時(shí)間,并向新簇中寫(xiě)入數(shù)據(jù);當(dāng)前新簇填滿數(shù)據(jù)后再搜索下一個(gè)空簇,如此反復(fù),同時(shí)更新DIR目錄項(xiàng)中的文件大?。划?dāng)搜索空簇失敗時(shí),表明硬盤(pán)容量枯竭,無(wú)法存入新數(shù)據(jù),文件寫(xiě)入被強(qiáng)制停止;
刪除文件:首先搜索DIR目錄,得到指定文件ID的起始簇編號(hào),根據(jù)該鏈表頭,將該鏈表所有內(nèi)容標(biāo)記為空簇,完成文件的刪除;同時(shí)將目錄中對(duì)應(yīng)文件項(xiàng)清除;若未搜索到指定文件ID則刪除文件失敗;
讀取文件:根據(jù)目錄得到的文件鏈表頭在FAT中遍歷鏈表,讀取各個(gè)簇的數(shù)據(jù),逐步完成整個(gè)文件數(shù)據(jù)讀?。?/p>
列出所有文件:遍歷DIR目錄項(xiàng),若當(dāng)前目錄項(xiàng)非空,則輸出該目錄項(xiàng);若當(dāng)前目錄為空,則跳過(guò)該目錄項(xiàng);如此操作直至最后一個(gè)目錄項(xiàng);
列出指定文件:搜索DIR目錄項(xiàng),若當(dāng)前目錄項(xiàng)中文件ID與給定的ID相同,則輸出該目錄項(xiàng)。
在上述技術(shù)方案中,每個(gè)簇包含的多個(gè)扇區(qū)中,每個(gè)扇區(qū)包含512字節(jié)。
在上述技術(shù)方案中,DIR維護(hù)了文件的基本信息,為固定長(zhǎng)度的結(jié)構(gòu)體數(shù)組;包括文件ID、創(chuàng)建時(shí)間、起始簇和文件大小信息。
在上述技術(shù)方案中,F(xiàn)AT為一維數(shù)組,每個(gè)成員代表對(duì)應(yīng)簇的下一個(gè)簇編號(hào),編號(hào)位寬16Bit。
在上述技術(shù)方案中,系統(tǒng)上電或復(fù)位后將保存在硬盤(pán)中的FAT和DIR表數(shù)據(jù)加載到FPGA內(nèi)部RAM中,加載過(guò)程中對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),若出現(xiàn)數(shù)據(jù)校驗(yàn)錯(cuò)誤,則使用另外一個(gè)備份數(shù)據(jù)表;若備份數(shù)據(jù)表仍錯(cuò)誤,則文件系統(tǒng)崩潰,需要重新初始化文件系統(tǒng);加載結(jié)束后等待用戶指令。
在上述技術(shù)方案中,在創(chuàng)建/寫(xiě)入文件時(shí),空簇搜索算法為:系統(tǒng)維護(hù)一個(gè)簇指針,上電時(shí)被初始化為1,用于標(biāo)識(shí)當(dāng)前簇;讀取文件時(shí)會(huì)根據(jù)FAT更新該指針;寫(xiě)入或創(chuàng)建文件時(shí)從當(dāng)前指針向后搜索下一個(gè)最近的空簇用于存儲(chǔ)數(shù)據(jù),并標(biāo)記在FAT表中。
本發(fā)明具有以下的有益效果:
本發(fā)明的基于FPGA的適用于高速海量存儲(chǔ)的文件存儲(chǔ)方法,大大提高了無(wú)CPU軟件執(zhí)行環(huán)境的FPGA系統(tǒng)海量數(shù)據(jù)存儲(chǔ)管理能力,方便了大容量存儲(chǔ)介質(zhì)在FPGA系統(tǒng)中的應(yīng)用。
附圖說(shuō)明
下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
圖1為具備30個(gè)簇的文件分配示意圖;
圖2為128GB容量硬盤(pán),32K簇,維護(hù)1024個(gè)文件的文件系統(tǒng)的FAT和DIR數(shù)據(jù)結(jié)構(gòu)示意圖;
圖3為SFAT16文件系統(tǒng)控制流程示意圖;
圖4為SFAT16文件系統(tǒng)功能模塊框圖示意圖。
具體實(shí)施方式
一種基于FPGA的適用于高速海量存儲(chǔ)的文件存儲(chǔ)方法,該文件存儲(chǔ)方法不支持子目錄,文件標(biāo)識(shí)采用32Bit數(shù)據(jù)作為唯一ID。
為方便管理,將整個(gè)存儲(chǔ)容量CAP平分為C個(gè)簇,每個(gè)簇包含S個(gè)扇區(qū)。典型地,每個(gè)扇區(qū)包含512字節(jié)。每個(gè)簇有不同的編號(hào),編號(hào)位寬16bit(因此本發(fā)明文件系統(tǒng)稱為SFAT16)。
CAP=512×C×S
其中C最大為65533,S最大為16383。
文件系統(tǒng)通過(guò)管理簇鏈表(即文件分配表FAT),來(lái)管理文件數(shù)據(jù)。每個(gè)簇鏈表對(duì)應(yīng)的簇包含的數(shù)據(jù)順序組合即成為一個(gè)文件,一個(gè)文件對(duì)應(yīng)的簇鏈表所指定的簇編號(hào)不一定連續(xù)。圖1所示為具備30個(gè)簇的文件分配表示意圖,文件對(duì)應(yīng)的簇鏈表所指定的簇編號(hào)不連續(xù)。
同時(shí)文件系統(tǒng)還需要管理一個(gè)目錄數(shù)據(jù)結(jié)構(gòu)(DIR),用來(lái)記錄每個(gè)文件的基本信息。
此外還需要記錄該硬盤(pán)文件系統(tǒng)的基本信息(FSINFO),包括標(biāo)識(shí)文件系統(tǒng)有效的幻數(shù)標(biāo)志0x55AA55AA、該文件系統(tǒng)含有的簇個(gè)數(shù)、以及每個(gè)簇占用的扇區(qū)數(shù)。
FSINFO、FAT和DIR被順序保存在第0簇中,第0簇不用于存儲(chǔ)文件數(shù)據(jù)。
DIR維護(hù)了文件的基本信息,為固定長(zhǎng)度的結(jié)構(gòu)體數(shù)組。包括文件ID、創(chuàng)建時(shí)間、起始簇、文件大小等信息。其中文件ID為4字節(jié)數(shù)據(jù),0代表該目錄項(xiàng)為空,可用于創(chuàng)建新文件;創(chuàng)建時(shí)間為4字節(jié)數(shù)據(jù);起始簇為該文件鏈表頭所在簇編號(hào),下文有詳細(xì)介紹。文件大小分為占用完整簇的個(gè)數(shù)、剩余數(shù)據(jù)占用完整扇區(qū)(512字節(jié))的個(gè)數(shù)、以及再剩余數(shù)據(jù)占用4字節(jié)的個(gè)數(shù)。這種表示方式方便了數(shù)據(jù)量的統(tǒng)計(jì)。每個(gè)DIR目錄項(xiàng)占用16字節(jié),如對(duì)于可維護(hù)1K個(gè)文件的文件系統(tǒng),該目錄占用16KB存儲(chǔ)空間。
FAT為一維數(shù)組,每個(gè)成員代表對(duì)應(yīng)簇的下一個(gè)簇編號(hào),編號(hào)位寬16Bit。FAT數(shù)組成員若為0,表明對(duì)應(yīng)簇為未使用的簇,可在搜索空簇時(shí)被選中用于存儲(chǔ)數(shù)據(jù)。若為-1,則該簇為本文件簇鏈表的最后一個(gè)簇,文件結(jié)束。以圖1為例,該FAT共含30個(gè)簇,其中標(biāo)注為0的為空簇,其他塊分別屬于簇鏈表1和2,代表2個(gè)文件集合。其中簇鏈表1、2、3、4、7、12、16、20、29(結(jié)束簇-1)構(gòu)成了文件1;5、6、26、8(結(jié)束簇-1)構(gòu)成文件2。
FAT和DIR被保存在第0簇中,為防止FAT和DIR損壞而導(dǎo)致整個(gè)文件系統(tǒng)崩潰,對(duì)FAT和DIR進(jìn)行了數(shù)據(jù)校驗(yàn)和雙冗余備份。系統(tǒng)上電或復(fù)位后將保存在硬盤(pán)中的FAT和DIR表數(shù)據(jù)加載到FPGA內(nèi)部RAM中,加載過(guò)程中對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),若出現(xiàn)數(shù)據(jù)校驗(yàn)錯(cuò)誤,則使用另外一個(gè)備份數(shù)據(jù)表;若備份數(shù)據(jù)表仍錯(cuò)誤,則文件系統(tǒng)崩潰,需要重新初始化文件系統(tǒng),即格式化。加載結(jié)束后等待用戶指令。
SFAT16文件系統(tǒng)向用戶提供了以下文件操作接口:格式化、創(chuàng)建(寫(xiě)入)文件、刪除文件、讀取文件、列出文件。
a)格式化:當(dāng)使用新的硬盤(pán)或文件系統(tǒng)損壞時(shí),需要格式化硬盤(pán)。格式化即初始化文件系統(tǒng)的過(guò)程,包括將所有DIR目錄項(xiàng)清空,表明沒(méi)有文件;將所有FAT所有數(shù)組成員標(biāo)記為0,表明所有簇未被占用。格式化完成后,硬盤(pán)無(wú)數(shù)據(jù)文件;
b)創(chuàng)建/寫(xiě)入文件:首先搜索空閑DIR目錄項(xiàng),同時(shí)搜索FAT下一個(gè)空簇。若無(wú)空閑目錄項(xiàng)或FAT空簇,則創(chuàng)建文件失??;若目錄中含有與給定文件ID相同的文件,則首先刪除該文件;否則根據(jù)創(chuàng)建文件信息填充目錄項(xiàng)文件ID和創(chuàng)建時(shí)間,并向新簇中寫(xiě)入數(shù)據(jù)。當(dāng)前新簇填滿數(shù)據(jù)后再搜索下一個(gè)空簇,如此反復(fù),同時(shí)更新DIR目錄項(xiàng)中的文件大小。當(dāng)搜索空簇失敗時(shí),表明硬盤(pán)容量枯竭,無(wú)法存入新數(shù)據(jù),文件寫(xiě)入被強(qiáng)制停止。其中空簇搜索算法為:系統(tǒng)維護(hù)一個(gè)簇指針,上電時(shí)被初始化為1,用于標(biāo)識(shí)當(dāng)前簇。讀取文件時(shí)會(huì)根據(jù)FAT更新該指針;寫(xiě)入或創(chuàng)建文件時(shí)從當(dāng)前指針向后搜索下一個(gè)最近的空簇用于存儲(chǔ)數(shù)據(jù),并標(biāo)記在FAT表中。這種搜索方法降低了已被占用簇被搜索的概率,提高了搜索命中率和速度。
c)刪除文件:首先搜索DIR目錄,得到指定文件ID的起始簇編號(hào)(鏈表頭),根據(jù)該鏈表頭,將該鏈表所有內(nèi)容標(biāo)記為空簇(0),完成文件的刪除。同時(shí)將目錄中對(duì)應(yīng)文件項(xiàng)清除。若未搜索到指定文件ID則刪除文件失敗。由于文件并未被真正“擦除”,因此刪除文件的操作簡(jiǎn)單迅速;
d)讀取文件:根據(jù)目錄得到的文件鏈表頭在FAT中遍歷鏈表,讀取各個(gè)簇的數(shù)據(jù),逐步完成整個(gè)文件數(shù)據(jù)讀??;
e)列出所有文件:遍歷DIR目錄項(xiàng),若當(dāng)前目錄項(xiàng)非空,則輸出該目錄項(xiàng)(即文件信息,包括文件ID,文件大小,創(chuàng)建時(shí)間);若當(dāng)前目錄為空,則跳過(guò)該目錄項(xiàng);如此操作直至最后一個(gè)目錄項(xiàng);
f)列出指定文件:搜索DIR目錄項(xiàng),若當(dāng)前目錄項(xiàng)中文件ID與給定的ID相同,則輸出該目錄項(xiàng)(即文件信息,包括文件ID,文件大小,創(chuàng)建時(shí)間)。
下面結(jié)合附圖進(jìn)行說(shuō)明:
以下G、M、K單位按照如下公式換算:
1G=1024×1M
1M=1024×1K
1K=1024
以128GB的硬盤(pán)為例,共256M個(gè)扇區(qū),每個(gè)扇區(qū)512B。
存儲(chǔ)空間平分為4MB(8K個(gè)扇區(qū))大小的簇,共32K個(gè)簇。而FAT每個(gè)成員為16bit(2B),則FAT占用空間64KB。
設(shè)文件系統(tǒng)可維護(hù)1024個(gè)文件,每個(gè)文件目錄項(xiàng)占用16B,則DIR占用空間16KB。
此文件系統(tǒng)第0簇?cái)?shù)據(jù)結(jié)構(gòu)如圖2所示。
SFAT16文件系統(tǒng)控制流程如圖3所示。
根據(jù)上述工作流程,SFAT16文件系統(tǒng)功能模塊劃分為以下幾部分:
a)主控狀態(tài)機(jī):為主要流程控制模塊,響應(yīng)用戶文件操作請(qǐng)求,對(duì)其他模塊進(jìn)行協(xié)調(diào),實(shí)現(xiàn)圖3所示控制流程;
b)FAT控制模塊:響應(yīng)主狀態(tài)機(jī)指令,完成FAT的搜索、標(biāo)記等;
c)DIR控制模塊:響應(yīng)主狀態(tài)機(jī)指令,完成DIR的搜索、改寫(xiě)等;
d)硬盤(pán)健康狀態(tài)控制模塊:定期向硬盤(pán)發(fā)送讀取S.M.A.R.T.請(qǐng)求,得到硬盤(pán)健康狀態(tài);
e)硬盤(pán)讀控制模塊:響應(yīng)主狀態(tài)機(jī)指令,完成硬盤(pán)讀操作指令控制;
f)硬盤(pán)寫(xiě)控制模塊:響應(yīng)主狀態(tài)機(jī)指令,完成硬盤(pán)寫(xiě)操作指令控制;
g)硬盤(pán)指令切換器:根據(jù)不同操作,將上述不同模塊對(duì)硬盤(pán)發(fā)出的硬盤(pán)操作請(qǐng)求進(jìn)行切換,形成統(tǒng)一的對(duì)硬盤(pán)指令接口。
SFAT16文件系統(tǒng)功能模塊框圖如圖4所示。其中為提高系統(tǒng)數(shù)據(jù)讀寫(xiě)速率,增加對(duì)磁盤(pán)陣列的支持(RAID0),使數(shù)據(jù)率成倍增長(zhǎng)。
顯然,上述實(shí)施例僅僅是為清楚地說(shuō)明所作的舉例,而并非對(duì)實(shí)施方式的限定。對(duì)于所屬領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在上述說(shuō)明的基礎(chǔ)上還可以做出其它不同形式的變化或變動(dòng)。這里無(wú)需也無(wú)法對(duì)所有的實(shí)施方式予以窮舉。而由此所引伸出的顯而易見(jiàn)的變化或變動(dòng)仍處于本發(fā)明創(chuàng)造的保護(hù)范圍之中。