基于FPGA的适用于高速海量存储的文件存储方法与流程

文档序号:12598023阅读:697来源:国知局
基于FPGA的适用于高速海量存储的文件存储方法与流程

本发明涉及数据文件存储技术领域,具体涉及一种基于FPGA的适用于高速海量存储的文件存储方法。



背景技术:

文件系统是用于明确存储设备(磁盘、固态硬盘等)存储数据的方法和数据结构,将数据以文件的形式进行管理,即在存储设备上组织数据的方法。文件系统负责对存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行检索。具体的说,它负责为用户建立、存入、读取、修改、删除、检索文件等。

然而上述文件系统通常作为操作系统软件功能的一部分整合在操作系统中,由计算机软件(指令)执行数据管理命令,如Windows系统中的FAT文件系统、NTFS文件系统、exFAT文件系统、运行在Linux系统中的ext文件系统、SWAP文件系统等。但在无操作系统的嵌入式系统中,尤其对于无CPU软件执行环境的FPGA系统中,上述文件系统由于其功能完备复杂、需由CPU软件执行等原因,并不适应FPGA硬件系统,因而受到应用限制。

同时FPGA系统除在高速数据处理领域有广泛应用,海量高速数据存储管理功能也有大量应用需求。传统应用中FPGA只实现了简单数据管理(如存储空间分为固定大小区域用于存储数据),或无数据管理功能(如直接将整个存储空间顺序存储,再次存储数据时从起始处覆盖原有数据)。这种方法无法实现类似计算机系统中文件式的有效管理,如数据大小任意、数据文件数量众多、高存储空间利用率等。



技术实现要素:

本发明解决的技术问题是:为在无CPU软件执行环境的FPGA硬件系统中实现海量数据存储管理,针对(但不限于)现有商业/工业硬盘存储标准(以扇区为存储单位,每扇区512字节),提供一种基于FPGA的适用于高速海量存储的文件存储方法。

为了解决上述技术问题,本发明的技术方案具体如下:

一种基于FPGA的适用于高速海量存储的文件存储方法,包括以下步骤:

将整个存储容量平分为C个簇,每个簇包含S个扇区;每个簇有不同的编号,编号位宽16bit;

CAP=512×C×S

其中C最大为65533,S最大为16383;

通过管理簇链表FAT来管理文件数据;每个簇链表对应的簇包含的数据顺序组合即成为一个文件;

通过管理目录数据结构DIR来记录每个文件的基本信息;

通过管理FSINFO来记录该硬盘文件系统的基本信息,包括标识文件系统有效的幻数标志0x55AA55AA、该文件系统含有的簇个数、以及每个簇占用的扇区数;

FAT、DIR和FSINFO被顺序保存在第0簇中;

该文件存储方法向用户提供了以下文件操作接口:格式化、创建/写入文件、删除文件、读取文件、列出文件;

具体的说:

格式化:当使用新的硬盘或文件系统损坏时,需要格式化硬盘,包括将所有DIR目录项清空,表明没有文件;将所有FAT所有数组成员标记为0,表明所有簇未被占用;

创建/写入文件:首先搜索空闲DIR目录项,同时搜索FAT下一个空簇;若无空闲目录项或FAT空簇,则创建文件失败;若目录中含有与给定文件ID相同的文件,则首先删除该文件;否则根据创建文件信息填充目录项文件ID和创建时间,并向新簇中写入数据;当前新簇填满数据后再搜索下一个空簇,如此反复,同时更新DIR目录项中的文件大小;当搜索空簇失败时,表明硬盘容量枯竭,无法存入新数据,文件写入被强制停止;

删除文件:首先搜索DIR目录,得到指定文件ID的起始簇编号,根据该链表头,将该链表所有内容标记为空簇,完成文件的删除;同时将目录中对应文件项清除;若未搜索到指定文件ID则删除文件失败;

读取文件:根据目录得到的文件链表头在FAT中遍历链表,读取各个簇的数据,逐步完成整个文件数据读取;

列出所有文件:遍历DIR目录项,若当前目录项非空,则输出该目录项;若当前目录为空,则跳过该目录项;如此操作直至最后一个目录项;

列出指定文件:搜索DIR目录项,若当前目录项中文件ID与给定的ID相同,则输出该目录项。

在上述技术方案中,每个簇包含的多个扇区中,每个扇区包含512字节。

在上述技术方案中,DIR维护了文件的基本信息,为固定长度的结构体数组;包括文件ID、创建时间、起始簇和文件大小信息。

在上述技术方案中,FAT为一维数组,每个成员代表对应簇的下一个簇编号,编号位宽16Bit。

在上述技术方案中,系统上电或复位后将保存在硬盘中的FAT和DIR表数据加载到FPGA内部RAM中,加载过程中对数据进行校验,若出现数据校验错误,则使用另外一个备份数据表;若备份数据表仍错误,则文件系统崩溃,需要重新初始化文件系统;加载结束后等待用户指令。

在上述技术方案中,在创建/写入文件时,空簇搜索算法为:系统维护一个簇指针,上电时被初始化为1,用于标识当前簇;读取文件时会根据FAT更新该指针;写入或创建文件时从当前指针向后搜索下一个最近的空簇用于存储数据,并标记在FAT表中。

本发明具有以下的有益效果:

本发明的基于FPGA的适用于高速海量存储的文件存储方法,大大提高了无CPU软件执行环境的FPGA系统海量数据存储管理能力,方便了大容量存储介质在FPGA系统中的应用。

附图说明

下面结合附图和具体实施方式对本发明作进一步详细说明。

图1为具备30个簇的文件分配示意图;

图2为128GB容量硬盘,32K簇,维护1024个文件的文件系统的FAT和DIR数据结构示意图;

图3为SFAT16文件系统控制流程示意图;

图4为SFAT16文件系统功能模块框图示意图。

具体实施方式

一种基于FPGA的适用于高速海量存储的文件存储方法,该文件存储方法不支持子目录,文件标识采用32Bit数据作为唯一ID。

为方便管理,将整个存储容量CAP平分为C个簇,每个簇包含S个扇区。典型地,每个扇区包含512字节。每个簇有不同的编号,编号位宽16bit(因此本发明文件系统称为SFAT16)。

CAP=512×C×S

其中C最大为65533,S最大为16383。

文件系统通过管理簇链表(即文件分配表FAT),来管理文件数据。每个簇链表对应的簇包含的数据顺序组合即成为一个文件,一个文件对应的簇链表所指定的簇编号不一定连续。图1所示为具备30个簇的文件分配表示意图,文件对应的簇链表所指定的簇编号不连续。

同时文件系统还需要管理一个目录数据结构(DIR),用来记录每个文件的基本信息。

此外还需要记录该硬盘文件系统的基本信息(FSINFO),包括标识文件系统有效的幻数标志0x55AA55AA、该文件系统含有的簇个数、以及每个簇占用的扇区数。

FSINFO、FAT和DIR被顺序保存在第0簇中,第0簇不用于存储文件数据。

DIR维护了文件的基本信息,为固定长度的结构体数组。包括文件ID、创建时间、起始簇、文件大小等信息。其中文件ID为4字节数据,0代表该目录项为空,可用于创建新文件;创建时间为4字节数据;起始簇为该文件链表头所在簇编号,下文有详细介绍。文件大小分为占用完整簇的个数、剩余数据占用完整扇区(512字节)的个数、以及再剩余数据占用4字节的个数。这种表示方式方便了数据量的统计。每个DIR目录项占用16字节,如对于可维护1K个文件的文件系统,该目录占用16KB存储空间。

FAT为一维数组,每个成员代表对应簇的下一个簇编号,编号位宽16Bit。FAT数组成员若为0,表明对应簇为未使用的簇,可在搜索空簇时被选中用于存储数据。若为-1,则该簇为本文件簇链表的最后一个簇,文件结束。以图1为例,该FAT共含30个簇,其中标注为0的为空簇,其他块分别属于簇链表1和2,代表2个文件集合。其中簇链表1、2、3、4、7、12、16、20、29(结束簇-1)构成了文件1;5、6、26、8(结束簇-1)构成文件2。

FAT和DIR被保存在第0簇中,为防止FAT和DIR损坏而导致整个文件系统崩溃,对FAT和DIR进行了数据校验和双冗余备份。系统上电或复位后将保存在硬盘中的FAT和DIR表数据加载到FPGA内部RAM中,加载过程中对数据进行校验,若出现数据校验错误,则使用另外一个备份数据表;若备份数据表仍错误,则文件系统崩溃,需要重新初始化文件系统,即格式化。加载结束后等待用户指令。

SFAT16文件系统向用户提供了以下文件操作接口:格式化、创建(写入)文件、删除文件、读取文件、列出文件。

a)格式化:当使用新的硬盘或文件系统损坏时,需要格式化硬盘。格式化即初始化文件系统的过程,包括将所有DIR目录项清空,表明没有文件;将所有FAT所有数组成员标记为0,表明所有簇未被占用。格式化完成后,硬盘无数据文件;

b)创建/写入文件:首先搜索空闲DIR目录项,同时搜索FAT下一个空簇。若无空闲目录项或FAT空簇,则创建文件失败;若目录中含有与给定文件ID相同的文件,则首先删除该文件;否则根据创建文件信息填充目录项文件ID和创建时间,并向新簇中写入数据。当前新簇填满数据后再搜索下一个空簇,如此反复,同时更新DIR目录项中的文件大小。当搜索空簇失败时,表明硬盘容量枯竭,无法存入新数据,文件写入被强制停止。其中空簇搜索算法为:系统维护一个簇指针,上电时被初始化为1,用于标识当前簇。读取文件时会根据FAT更新该指针;写入或创建文件时从当前指针向后搜索下一个最近的空簇用于存储数据,并标记在FAT表中。这种搜索方法降低了已被占用簇被搜索的概率,提高了搜索命中率和速度。

c)删除文件:首先搜索DIR目录,得到指定文件ID的起始簇编号(链表头),根据该链表头,将该链表所有内容标记为空簇(0),完成文件的删除。同时将目录中对应文件项清除。若未搜索到指定文件ID则删除文件失败。由于文件并未被真正“擦除”,因此删除文件的操作简单迅速;

d)读取文件:根据目录得到的文件链表头在FAT中遍历链表,读取各个簇的数据,逐步完成整个文件数据读取;

e)列出所有文件:遍历DIR目录项,若当前目录项非空,则输出该目录项(即文件信息,包括文件ID,文件大小,创建时间);若当前目录为空,则跳过该目录项;如此操作直至最后一个目录项;

f)列出指定文件:搜索DIR目录项,若当前目录项中文件ID与给定的ID相同,则输出该目录项(即文件信息,包括文件ID,文件大小,创建时间)。

下面结合附图进行说明:

以下G、M、K单位按照如下公式换算:

1G=1024×1M

1M=1024×1K

1K=1024

以128GB的硬盘为例,共256M个扇区,每个扇区512B。

存储空间平分为4MB(8K个扇区)大小的簇,共32K个簇。而FAT每个成员为16bit(2B),则FAT占用空间64KB。

设文件系统可维护1024个文件,每个文件目录项占用16B,则DIR占用空间16KB。

此文件系统第0簇数据结构如图2所示。

SFAT16文件系统控制流程如图3所示。

根据上述工作流程,SFAT16文件系统功能模块划分为以下几部分:

a)主控状态机:为主要流程控制模块,响应用户文件操作请求,对其他模块进行协调,实现图3所示控制流程;

b)FAT控制模块:响应主状态机指令,完成FAT的搜索、标记等;

c)DIR控制模块:响应主状态机指令,完成DIR的搜索、改写等;

d)硬盘健康状态控制模块:定期向硬盘发送读取S.M.A.R.T.请求,得到硬盘健康状态;

e)硬盘读控制模块:响应主状态机指令,完成硬盘读操作指令控制;

f)硬盘写控制模块:响应主状态机指令,完成硬盘写操作指令控制;

g)硬盘指令切换器:根据不同操作,将上述不同模块对硬盘发出的硬盘操作请求进行切换,形成统一的对硬盘指令接口。

SFAT16文件系统功能模块框图如图4所示。其中为提高系统数据读写速率,增加对磁盘阵列的支持(RAID0),使数据率成倍增长。

显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1