分离式文件存储系统
技术领域
本实用新型涉及一种文件存储系统,尤其是涉及一种用于无线传感网络节点的分离式文件存储系统。
背景技术
自2009年8月温总理提出“感知中国”以来,物联网技术高速的发展着,传统的传感器正逐步实现微型化、智能化、信息化、网络化,即逐步完善物联网四大核心技术之一的无线传感网技术。无线传感网络主要用于数据采集并通过网络传递。传感网络中可能有大量的传感数据需要本地存储并集中发送,以达到减少通信次数、降低功耗、减小对网络实时性要求、提升数据传送成功率的目的。
存储大量的传感数据需要一种适用的管理方式,而现有的基于Flash文件系统主要应用于嵌入式系统,对内存限制不高,外存容量也比较大。这对于无线传感器网络节点内存受限、以传感数据为信息单元的应用不适合。
中华人民共和国国家知识产权局于2006年8月23日公开了公开号为CN1822230A的专利文献,名称是基于NADA Flash存储器文件系统的实现方法,它是建立NAND Flash存储器文件系统控制块索引,利用索引进行链表化区块分配和链表化垃圾数据收回,并以猝发式输入输出进行数据读写,使用垃圾区块回收机制来回收那些不再包含有效数据的块。但是本方案在读取和写入时仍然是以块为操作对象,具有较大的内存占用,难以适用于无线传感网络。
发明内容
本实用新型主要是解决现有技术所存在的读写基本单位较大、对内存占用大、对存储器的擦写频繁的技术问题,提供一种以单条信息为读写对象、占用内存少、减少对存储器擦写次数的分离式文件存储系统。
本实用新型针对上述技术问题主要是通过下述技术方案得以解决的:一种分离式文件存储系统,包括主控MCU、用于存储文件目录信息和位置信息的第一存储器以及用于存储文件内容信息的第二存储器,所述第一存储器和第二存储器分别与所述主控MCU连接。
将文件的不同部分存储于不同的存储器,这样在进行删除操作和格式化操作的时候只需要对第一存储器进行读写,减少了对第二存储器的擦写次数。
作为优选,所述第一存储器为E2PROM存储器。
作为优选,所述第二存储器为Flash存储器。
E2pRom存储器能够单字节的读写,而Flash存储器由于本身特性,对于存储器的写操作只能将1写为0,反之不行,故对Flash进行操作时需要先擦除后写入数据,而Flash存储器只能对一个数据段进行擦除。基于以上特性,提出了将需要经常进行修改保存的目录及页面管理区存储于可单字节读写的E2pROM存储器中,而将数据量较大不需经常修改的传感数据存储于Flash存储器。
本实用新型中的E2PROM泛指可以直接进行单字节读写的存储器,如FRAM(铁电存储器,无读写次数的限制)。
主控MCU控制数据在各存储器中的读取、写入和删除。
一种分离式文件存储系统管理方法,具体为:建立目录区、页面管理区和数据区三个逻辑区域,目录区和页面管理区位于E2PROM存储器,数据区位于Flash存储器,目录区存放文件目录信息,页面管理区放置文件各部分在数据区的具体位置信息,数据区存放文件内容信息,文件内容信息为传感数据,文件内容信息写入和读取的基本单位为一条传感数据,数据区包括若干个页面(Page),每一个页面可以存储若干条传感数据。
还建立有开发预留区和功能辅助区,开发预留区和功能辅助区都位于E2PROM存储器,开发预留区存放开发过程中使用到的序列号、密钥和系统参数中的一种或多种,功能辅助区包括存放文件的格式化标志的格式化标志区(FormatFlag)和存放要删除文件Fid号的被删文件区(FidToDelete)。
文件Fid号为文件在目录区中所占的目录编号,例如第一条目录的文件Fid号为1,第一条目录的文件Fid号为2,以此类推。
目录区包括若干个目录数据单元,每个目录数据单元包括:
文件名区,存放文件名称;
文件类型区(FileType),存放文件类型,并说明文件所存储的信息类型、信息单元的长度和数据区的一个页面能存储的数据条数;
起始页面区(StartPage),存放文件的起始页面号,可用于查找文件的起始位置;
页面总数区(PageCount),存放文件占用的页面数量,可用于指示文件占用存储空间的大小;
末页信息区(LstCount),存放文件在最后一个页面具有的传感数据条数,联合PageCount 能计算出文件总的传感数据条数。
信息单元具体指存储于Flash数据区的最小读写单元,即一条传感数据,每条传感数据的长度可根据应用的不同来设定。
页面管理区包括若干个页面管理单元,页面管理单元的数量与数据区的页面的数量相同,并且页面管理单元与数据区的页面按顺序一一对应,每个页面管理单元包括:
下一页位置区(NextPage),存放下一个属于文件的页面的位置或者文件尾;
从属状态区(Fid),存放本页面管理单元所对应的页面的状态。
从属状态包括此页为空和不为空两种状态。页面管理单元具有三种情况:
1、NextPage 数据为0,Fid数据不为0,则表示该页面管理单元所对应的页面为文件尾;
2、NextPage 数据为0,Fid数据为0,表示该页面管理单元所对应的页面为空闲页;
3、NextPage 数据不为0,Fid数据不为0,表示该页面管理单元所对应的页面已被文件占用。
页面管理区为链表式结构,即每个页面管理单元都指明本文件的下一个页面管理单元的位置。而页面管理单元与数据区页面按顺序一一对应,读取数据区的数据时只要找到页面管理单元就可以找到对应的页面。
文件管理包括初始化、写入、读取、格式化和删除;
格式化具体操作为:删除目录区的所有数据和页面管理区的所有数据,同时将格式化标志设置为已格式化的状态;
删除具体操作为:S101将要删除文件的Fid号存入被删文件区;
S102 通过遍历目录区查找到要删除的文件对应的目录数据单元;
S103 根据目录数据单元的起始页面区查找第一个页面管理单元;
S104 根据各页面管理单元的链式结构删除所有本文件的页面管理单元的数据直至最后一页;
S105将被删文件区中存放的要删除文件的Fid号删除。
初始化操作具体为:
S201 主控MCU上电,读取格式化标志,如果格式化标志表明文件已经格式化,则跳转到步骤S203,如果格式化标志表明文件未被格式化,则跳转到步骤S202;
S202 删除目录区的所有数据和页面管理区的所有数据,同时将格式化标志设置为已格式化的状态,然后跳转到步骤S203;
S203 读取要删除的文件信息,如果要删除的文件信息为有文件要删除的状态,则跳转到步骤S204,否则结束初始化;
S204 遍历目录区和页面管理区,删除目录区的所有数据和页面管理区的所有数据,减少文件碎片占用存储空间的可能,结束初始化。
写入的具体操作为:
S301 判断要写入的文件是否存在,如果存在则跳转到步骤S302,否则跳转到步骤S304;
S302 判断是否还有页面空间用于存储数据,如果没有页面空间则写入失败,告知用户空间不足,同时结束写入;如果还有页面空间,则跳转到步骤S303;
S303 根据文件的目录数据单元中的信息计算本条数据在Flash存储器中的位置,将数据写入相应的位置,修改页面总数区和末页信息区的相应信息,告知用户写入成功,结束写入;
S304 新建文件,然后判断文件建立是否成功,如果成功则跳转到步骤S303,如果建立不成功则告知用户空间不足,结束写入。
读取包括读单条传感数据和读整个文件;
读单条传感数据具体为:判断所要读取的传感数据是否文件内;如果不在文件内,则直接退出并告知用户读取失败;如果在文件内,则根据页面管理区的信息和单个页面存储的数据条数计算该条传感数据的位置并读取数据;
读整个文件具体为:根据页面管理区链表和总的数据条数将文件读取存入指定的内存位置。
两种读取方法都需要读总数据条数,总数据条数=单个页面数据条数容量×(文件占用页面数量-1)+最后一个页面具有的信息条数。
Flash存储器具有先擦除后写入的特性,现有的Flash文件系统需要有数据缓冲机制,而本实用新型提出的文件系统将文件的不同部分分别存于不同类型存储器,并提供专用的文件名命名规则与读写数据以单条传感数据为数据单元的机制,不必使用数据缓冲机制的情况下实现了单条信息的实时写入,有效减小文件系统对内存的占用。
现有技术存在的问题:
现有的Flash文件系统最小操作单元为一个簇,采用数据缓冲的机制,无论是对目录还是文件数据进行修改时,都需要将整个簇的信息读入内存,而一个簇的大小一般为2K到32K字节,这对内存要求苛刻的单片机系统是难以忍受的。
若采用现有的Flash文件系统,即使采用如下优化方式,都不能很好的解决问题:
一、采用最小的文件擦除单元,读写时目录和文件一般各需占用512字节,相比常规的用法能够减少一半的内存占用量,但占用内存量仍然非常大,且存在间隙的写入一条传感信息,每次写入都需擦除一次Flash,对将大大降低存储器使用寿命。
二、基于优化办法一,可提出在内存储传感信息直到满足减少对Flash擦写次数的要求,但该类型的应用一般程序非常容易受到干扰,若系统复位,存于内存中的数据将全部丢失,这种方法也是不可取。
本实用新型提供的文件系统以单条传感数据为一个读写单元,只在文件新添加一页时擦除页面一次,每次写入一条传感信息时可根据文件在目录区的信息计算出要写入的位置,可直接写入。无论对经常需要修改的文件目录信息还是文件信息都不必将整个簇的所有信息读入内存,减少了对内存的占用。数据区的页面可以是一个或者若干个Flash存储器最小擦除单元即Flash存储器的物理页。
对于目录和页面管理区,若存于Flash中,需要经常修改,修改时势必也需将最小擦除单元内的所有数据读出,本实用新型将该数据存于E2pROM存储器,直接写入即可,不必占用内存。
对于数据信息,每条信息写入Flash时,先通过目录和页面管理区信息计算得出将要写入的信息位置,传感数据属于追加的方式,故不用先读取数据至内存,再修改内存数据,最后写回Flash的方式。该方法即保证了减少内存的占用,也不必多次擦写Flash存储器,保证了存储器使用寿命。
本实用新型带来的有益效果是,减少了内存占用、减少Flash存储器的擦写次数、提高了存储器的使用寿命。
附图说明
图1是本实用新型的一种物理结构示意图;
图2是本实用新型的一种总数据结构示意图;
图3 是本实用新型的一种功能辅助区的结构示意图;
图4是本实用新型的一种目录区的数据结构示意图;
图5是本实用新型的一种页面管理区的数据结构示意图;
图6是本实用新型的一种数据区的数据结构示意图;
图7是本实用新型的一种初始化流程图;
图8是本实用新型的一种写入流程提。
图中:1、主控MCU,2、E2PROM存储器,3、Flash存储器,4、开发预留区,5、功能辅助区,6、目录区,7、页面管理区,8、数据区,501、FormatFlag,502、FidToDelete,503、功能辅助预留区,601、文件名区,602、FileType,603、StartPage,604、PageCount, 605、LstCount,701、NextPage,702、Fid,801、Page。
具体实施方式
下面通过实施例,并结合附图,对本实用新型的技术方案作进一步具体的说明。
施例:本实施例的一种分离式文件存储系统,如图1所示,包括主控MCU1、E2PROM存储器2和Flash存储器3,E2PROM存储器2和Flash存储器3分别与主控MCU1连接。
一种分离式文件存储系统管理方法,如图2所示,建立开发预留区4、功能辅助区5、目录区6、页面管理区7和数据区8五个逻辑区域,开发预留区4、功能辅助区5、目录区6和页面管理区7位于E2PROM存储器,数据区8位于Flash存储器。目录区6存放文件目录信息,页面管理区7放置文件各部分在数据区8的具体位置信息,数据区8存放文件内容信息,文件内容信息为传感数据,文件内容信息写入和读取的基本单位为一条传感数据。如图6所示,数据区8包括若干个页面(Page 801),每一个页面可以存储若干条传感数据。
开发预留区4存放开发过程中使用到的序列号、密钥和系统参数中的一种或多种。如图3所示,功能辅助区包括存放文件的格式化标志的格式化标志区(FormatFlag 501)、存放要删除文件Fid号的被删文件区(FidToDelete 502)和功能辅助预留区503。功能辅助预留区503作为系统升级或者修改的预留使用区。
如图4所示,目录区6包括若干个目录数据单元,每个目录数据单元包括:
文件名区601,存放文件名称;
文件类型区(FileType 602),存放文件类型,并说明文件所存储的信息类型、信息单元的长度和数据区的一个页面能存储的数据条数;
起始页面区(StartPage 603),存放文件的起始页面号,可用于查找文件的起始位置;
页面总数区(PageCount 604),存放文件占用的页面数量,可用于指示文件占用存储空间的大小;
末页信息区(LstCount 605),存放文件在最后一个页面具有的信息条数,联合PageCount 能计算出文件总的信息条数。
如图5所示,页面管理区7包括若干个页面管理单元,页面管理单元的数量与数据区8的页面的数量相同,并且页面管理单元与数据区的页面按顺序一一对应,每个页面管理单元包括:
下一页位置区(NextPage 701),存放下一个属于文件的页面的位置或者文件尾;
从属状态区(Fid 702),存放本页面管理单元所对应的页面的状态。
从属状态包括此页为空和不为空两种状态。页面管理单元具有三种情况:
1、NextPage 数据为0,Fid数据不为0,则表示该页面管理单元所对应的页面为文件尾;
2、NextPage 数据为0,Fid数据为0,表示该页面管理单元所对应的页面为空闲页;
3、NextPage 数据不为0,Fid数据不为0,表示该页面管理单元所对应的页面已被文件占用。
页面管理区7为链表式结构,即每个页面管理单元都指明本文件的下一个页面管理单元的位置。而页面管理单元与数据区8页面按顺序一一对应,读取数据区的数据时只要找到页面管理单元就可以找到对应的页面。
文件管理包括初始化、写入、读取、格式化和删除;
格式化具体操作为:删除目录区的所有数据和页面管理区的所有数据,同时将格式化标志FormatFlag501设置为已格式化的状态(设为1);
删除具体操作为:S101将要删除文件的Fid号存入FidToDelete 502;
S102 通过遍历目录区查找到要删除的文件对应的目录数据单元;
S103 根据目录数据单元的起始页面区查找第一个页面管理单元;
S104 根据各页面管理单元的链式结构删除所有本文件的页面管理单元的数据直至最后一页;
S105 从FidToDelete 502中删除要删除文件的Fid号。
删除和格式化所有操作不涉及到对Flash存储器进行读、写或删除。
初始化操作如图7所示,具体为:
S201 主控MCU上电,读取格式化标志,如果格式化标志表明文件已经格式化(格式化标志为1),则跳转到步骤S203,如果格式化标志表明文件未被格式化(格式化标志为0,只有出厂时会将格式化标志设定为0),则跳转到步骤S202;
S202 删除目录区的所有数据和页面管理区的所有数据,同时将格式化标志设置为已格式化的状态,然后跳转到步骤S203;
S203 读取要删除的文件信息,如果要删除的文件信息为有文件要删除的状态,则跳转到步骤S204,否则结束初始化;
S204 遍历目录区和页面管理区,删除目录区的所有数据和页面管理区的所有数据,减少文件碎片占用存储空间的可能,结束初始化。
初始化操作也不涉及到对Flash存储器进行读、写或删除。
此初始化在系统复位后都需执行一次,其中提出的格式化文件系统的服务可根据用户的需求直接调用。
写入如图8所示,具体操作为:
S301 判断要写入的文件是否存在,如果存在则跳转到步骤S302,否则跳转到步骤S304;
S302 判断是否还有页面空间用于存储数据,如果没有页面空间则写入失败,告知用户空间不足,同时结束写入;如果还有页面空间,则跳转到步骤S303;
S303 根据文件的目录数据单元中的信息计算本条数据在Flash存储器中的位置,将数据写入相应的位置,修改页面总数区和末页信息区的相应信息,告知用户写入成功,结束写入;
S304 新建文件,然后判断文件建立是否成功,如果成功则跳转到步骤S303,如果建立不成功则告知用户空间不足,结束写入。
写入的时候不需要对整个页面进行读出操作,通过目录区信息找到数据区的空位,直接在空位写入即可。
读取包括读单条传感数据和读整个文件;
读单条传感数据具体为:判断所要读取的传感数据是否文件内;如果不在文件内,则直接退出并告知用户读取失败;如果在文件内,则根据页面管理区的信息和单个页面存储的数据条数计算该条传感数据的位置并读取数据;
读整个文件具体为:根据页面管理区链表和总的数据条数将文件读取存入指定的内存位置。
两种读取方法都需要读总数据条数,总数据条数=单个页面数据条数容量×(文件占用页面数量-1)+最后一个页面具有的信息条数。
分离式文件存储系统还包括与主控MCU连接的指示灯,所述指示灯为红绿双色LED,在存储系统空闲容量小于10%时指示灯显示红色,在存储系统空闲容量大于10%时指示灯显示绿色。
本文中所描述的具体实施例仅仅是对本实用新型精神作举例说明。本实用新型所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本实用新型的精神或者超越所附权利要求书所定义的范围。
尽管本文较多地使用了页面管理区、数据区、读取等术语,但并不排除使用其它术语的可能性。使用这些术语仅仅是为了更方便地描述和解释本实用新型的本质;把它们解释成任何一种附加的限制都是与本实用新型精神相违背的。