具体实施方式
下面将结合较佳实施例及附图对本发明的内容作进一步详细描述。显然,下文所描述的实施例仅用于解释本发明,而非对本发明的限定。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。应当理解的是,尽管在下文中采用术语“第一”、“第二”等来描述各种信息,但这些信息不应限于这些术语,这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本发明范围的情况下,“第一”信息也可以被称为“第二”信息,类似的,“第二”信息也可以被称为“第一”信息。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。
图1是本发明的Flash文件系统的数据处理方法在一个实施例中的流程示意图,如图1所示,本实施例中的Flash文件系统的数据处理方法包括以下步骤:
步骤S110,在接收数据写入请求后,判断Flash存储器中与数据存储末尾节点相对应的剩余存储区是否满足待写入数据的存储要求;若否,则进行步骤S120;若是,则进入步骤S130;
在本实施例中,待写入数据可以是目录,也可以是文件。数据存储末尾节点是指距离Flash存储空间末尾最近的节点。与末尾节点相对应的剩余存储区是指目前使用到的最远地址距离存储空间末尾所剩的存储区。例如图2所示,假设Flash存储器的存储空间为1024KB,图2是文件存储的现状,数据存储末尾节点对应于文件3,其使用到了1000KB地址,距离Flash存储空间末尾最近。在接收数据写入请求后,Flash文件系统判断Flash存储器中与数据存储末尾节点相对应的剩余存储区是否满足待写入数据的存储要求,即判断图2中的剩余存储区1是否满足写入数据的存储要求。
在一种可选的实施方式中,Flash文件系统使用数据记录链表来记录目录和文件,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。链表结构可以充分利用存储空间,实现灵活的存储空间动态管理。
本实施例中的数据记录链表可以是目录记录链表,也可以是文件记录链表。当Flash文件系统接收到数据写入请求后,Flash文件系统可判断与数据记录链表末尾节点相对应的剩余存储区是否满足待写入数据的存储要求。数据记录链表中末尾节点与Flash存储器中数据存储末尾节点相对应,且与已使用到的地址相关。对于剩余存储区是否满足存储要求,Flash文件系统可以通过计算地址之间的可用空间进行判断。例如,例如,Flash存储器地址为0x0000-0xFFFF,目前数据记录链表中末尾节点对应的数据已经使用到了地址0xFF00,那么从0xFF00到Flash存储器末尾地址0xFFFF还有(0xFFFF-0xFF00=0xFF)的存储空间可用,若要待写入数据大小为4B,则数据记录链表中末尾节点对应的剩余存储区可以满足存储要求,但若要存储0x100的文件,则剩余存储区不能满足存储要求。
步骤S120,计算Flash存储器起始地址对应的剩余存储区与所述末尾节点相对应的剩余存储区的存储空间总和,并判断所述存储空间总和是否满足所述存储要求;
具体的,从Flash存储器的起始地址开始,相邻文件或目录之间的存储空间并非一定是连续的,相邻文件或目录之间会存在存储碎片,因此除了数据存储末尾节点对应的剩余存储区外,Flash存储器中还有其它可用的剩余存储区。当数据存储末尾节点对应的剩余存储区不满足待写入数据的存储要求时,搜索Flash存储器起始地址对应的剩余存储区,并计算起始地址对应的剩余存储区域数据存储末尾节点相对应的剩余存储区的存储空间总和,并判断存储空间总和是否满足存储要求。其中,Flash存储器的起始地址即首地址,如地址0000。
以写入文件为例,假设Flash存储器的存储空间为1024KB,图2是文件存储空间的现状,数据存储末尾节点对应于文件3,其使用到了1000KB地址的位置,故末尾节点对应的剩余存储区1只有24KB,若待写入文件只有4KB,则剩余存储区1满足待写入文件的存储要求,故可将待写入文件写入剩余存储区1。但若待写入文件有32KB,则剩余存储区1不满足待写入文件的存储要求,此时,计算Flash存储器起始地址对应的剩余存储区与末尾节点对应的剩余存储区的存储空间总和。Flash文件系统可以通过计算地址之间的可用空间来检查各个剩余存储区的存储空间。例如图3所示,检查剩余存储区2,利用地址之间的可用空间计算剩余存储区2的存储空间,然后再加上数据存储末尾节点对应的剩余存储区1的存储空间,得到存储空间总和,此后进一步判断是否满足待写入文件的存储要求。
步骤S130,将所述待写入数据存储至所述末尾节点相对应的剩余存储区以及所述起始地址对应的剩余存储区。
具体的,待写入数据包括第一部分数据和第二部分数据,在写入所述待写入数据时,可先将待写入数据的第一部分数据存储至数据存储末尾节点对应的剩余存储区,然后将待写入数据的第二部分数据存储至起始地址对应的剩余存储区。或者,先将待写入数据的第一部分数据存储至起始地址对应的剩余存储区,然后将待写入数据的第二部分存储至数据存储末尾节点对应的剩余存储区。
进一步的,还可以更新数据记录链表的节点信息,如将新写入数据的数据长度、存储地址等信息作为一个节点追加至数据记录链表的末尾。
基于本实施例所提供的Flash文件系统的数据处理方法,在写入目录和文件时,可顺序选取存储块进行存储,若空间不足则从Flash存储器的起始地址进行选取,有效避免了某些存储块被频繁使用导致失效,增强了Flash文件系统的安全性和鲁棒性,特别适合用于智能卡、安全芯片等片内Flash存储容量有限、可靠性要求较高的场合。
进一步的,Flash文件系统可以对Flash存储器进行初始化,初始化的过程包括生成坏块统计表、文件目录表以及文件分配表的过程。其中,坏块统计表用户统计Flash存储器的坏块,避免将数据存储到坏块中。例如1MB的Flash存储器,若出现32KB的坏块,则该Flash存储器只有992KB的可用存储空间。文件目录表用于存储目录,而文件分配表则是用于记录各文件存储位置及文件状态,文件分配表使用链表(即文件记录链表)来记录文件的信息。
在另一个实施例中,参照图4所示,本发明的Flash文件系统的数据处理方法,进一步包括以下步骤:
步骤S125,若所述存储空间总和不满足所述存储要求,则启动垃圾回收机制,对Flash存储器中的剩余存储区进行合并处理;
步骤S126,判断合并处理后的剩余存储区是否满足所述存储要求;若是,则将待写入数据存储至满足存储要求的剩余存储区;若否,则返回写入失败的提示信息;
在本实施例中,垃圾回收机制用于整理存储空间,减小存储空间碎片。当Flash存储器起始地址对应的剩余存储区与数据存储末尾节点相对应的剩余存储区的存储空间总和不满足待写入数据的存储要求时,启动垃圾回收机制。参照图2所示,若剩余存储区2与剩余存储区1的存储空间总和不满足待写入数据的存储要求,此时启动垃圾回收机制,整理存储空间,对剩余存储区进行合并处理,例如在图2中,可调整文件1、文件2以及文件3的存储空间,使剩余存储3和剩余存储区1合并,或者使剩余存储区2、剩余存储3以及剩余存储区1合并。
在合并剩余存储区之后,再判断剩余存储区是否满足待写入数据的存储要求,若满足,则在剩余存储区存储待写入数据。若剩余存储区仍然不满足待写入数据的存储要求,则Flash文件系统返回写入失败的提示信息。
对于合并剩余存储区之后的判断过程也可以参照步骤S110和S120,即在通过垃圾回收机制合并剩余存储区之后,检查数据存储末尾节点对应的剩余存储区是否满足要求,若不满足,则继续判断起始地址对应的剩余存储区与数据存储末尾节点对应的剩余存储区的存储空间总和是否满足存储要求。例如在图2中,假设剩余存储区3和剩余存储区1合并,则先判断合并后的剩余存储区是否满足存储要求,若满足,则存储待写入数据至合并后的剩余存储区;若不满足,则进一步检查剩余存储区2和合并后的剩余存储区的存储空间总和是否满足存储要求。此后便与步骤130的处理过程一致。
对于垃圾回收机制,本实施例还提供一种实现方法。以写入文件为例,启动垃圾回收机制,对剩余存储区进行合并处理的过程包括:从占用存储空间最大的文件相对应的节点开始,按照节点指向调整相应文件的存储区,以使相邻文件的存储区连续。
在合并剩余存储区时,确定占用存储空间最大的文件作为基准文件,以该基准文件作为开始节点,按照节点指向逐步调整相应文件的存储区。参照图5所示,文件B是占用存储空间最大的文件,其对应节点指向的下一个文件为文件C,因此,以文件B为基准文件,调整文件C的存储区,消除文件B与文件C之间的存储碎片,这样就实现了剩余存储区的合并,合并结果参照图6所示。
进一步的,本发明的Flash文件系统的数据处理方法还能实现掉电保护功能,依据数据写入请求可以判断是否启动掉电保护机制,例如数据写入请求中包含是否启动掉电保护机制的标志位,若该标识位为“1”,则表示启动掉电保护机制。
图7是本发明的Flash文件系统的数据处理方法在又一实施例中的流程示意图。参照图7所示,在存储待写入数据时,若依据数据写入请求判定启动掉电保护机制,则按照掉电保护写入方式存储所述待写入数据,以防止写入过程中重要文件丢失、文件破损等问题。
在一种可选的实施方式中,参照图8所示,按照掉电保护写入方式存储待写入数据的过程包括:
步骤S801,从满足所述存储要求的剩余存储区中选择数据缓冲区和目标存储区,并设置所述数据缓冲区和所述目标存储区的属性均为第一属性;
数据缓冲区和目标存储区的选择方法可参照步骤S110、步骤S120的选择过程。从满足存储要求的剩余存储区中选择数据缓冲区和目标存储区,参照图9所示,确定目标存储区后,数据缓冲区1和数据缓冲区2均可以选择。
属性可以用来标记数据缓冲区和目标存储区的使用情况,设置数据缓冲区和所述目标存储区的属性均为第一属性后,表示数据缓冲区和所述目标存储区均为待写入状态。
步骤S802,将所述待写入数据写入所述数据缓冲区,并设置所述数据缓冲区和所述目标存储区的属性均为第二属性;
将待写入数据写入数据缓冲区后,设置数据缓冲区和目标存储区的属性均为第二属性,表示数据缓冲区和目标存储区均为已写入状态。
步骤S803,将所述待写入数据写入所述目标存储区,并设置所述数据缓冲区和所述目标存储区的属性均为第三属性,且删除所述数据缓冲区。
将待写入数据写入目标存储区后,设置数据缓冲区和所述目标存储区的属性均为第三属性,表示数据缓冲区和所述目标存储区的属性均为已完成状态,此时删除数据缓冲区,即清空数据缓冲区的存储内容。
若在按照掉电保护写入方式存储待写入数据的过程中发生意外掉电,则参照图9所示,在重新上电后,执行以下处理过程:
步骤S901,检查所述目标存储区的属性;
步骤S902,若所述目标存储区的属性为第一属性,则删除所述目标存储区和所述数据缓冲区;
步骤S903,若所述目标存储区的属性为第二属性,则将所述待写入数据从所述数据缓冲区写入到所述目标存储区,并删除所述数据缓冲区;
步骤S904,若所述目标存储区的属性为第三属性,则不做处理。
具体的,在重新上电后,对目标存储区的属性进行检查,如果目标存储区的属性为第一属性,表明目标存储区处于待写入状态,此时删除数据缓冲区和目标存储区,此后可以重新按照掉电保护写入方式存储待写入数据。如果目标存储区的属性为第二属性,表明数据缓冲区和目标存储区处于已写入状态,此时将数据缓冲区中存储的待写入数据写入到目标存储区,并删除数据缓冲区,以此保证写入数据的完整性。如果目标存储区的属性为第三属性,表明目标存储区处于已完成的状态,待写入数据已成功存储至目标存储区,此时不需要进行处理。
进一步的,本发明的Flash文件系统的数据处理方法还可以读取数据。参照图10所示,包括以下步骤:
步骤S1001,在接收读取数据请求后,根据所述读取数据请求对Flash存储器中的文件属性进行检查;
步骤S1002,若检查到与所述读取数据请求相对应的数据,则读取该数据。
本实施例中读取的数据既可以是文件,也可以是目录。具体的,以读取文件为例,读取数据请求中可包含文件名或文件标识,Flash文件系统接收读取数据请求后,根据文件名或文件标识对Flash存储器中的目录和文件的文件属性进行检查,若找到与读取数据请求中的文件名或文件标识相一致的文件,则读取该文件。另外,如果未找到与读取数据请求中的文件名或文件标识相一致的文件,则返回读取失败的提示信息。读取目录的过程与读取文件类似,此处不予赘述。
进一步的,本发明的Flash文件系统的数据处理方法还可以删除数据。参照图11所示,包括以下步骤:
步骤S1101,接收删除数据请求;
步骤S1102,删除Flash存储器中与所述删除数据请求相对应的节点信息。
本实施例中,删除的数据既可以是文件,也可以是目录。具体的,以删除文件为例,删除数据请求中可包含文件名或文件标识,在删除文件时,仅删除Flash存储器中与文件名或文件标识相对应的节点信息,而不擦除存储的文件,在下次写入文件时再执行擦除操作,这样可以进一步防止频繁擦除某个存储块。删除目录的过程与删除文件类似,此处不予赘述。
需要说明的是,对于前述的各方法实施例,为了简便描述,将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。
根据上述本发明的Flash文件系统的数据处理方法,本发明还提供一种Flash文件系统的数据处理装置,下面结合附图及较佳实施例对本发明的Flash文件系统的数据处理装置进行详细说明。
图12为本发明的Flash文件系统的数据处理装置在一个实施例中的结构示意图。如图12所示,该实施例中的Flash文件系统的数据处理装置包括:
存储空间末尾判断模块1,用于在接收数据写入请求后,判断Flash存储器中与数据存储末尾节点相对应的剩余存储区是否满足待写入数据的存储要求;
搜索判断模块2,用于在与数据记录链表末尾节点相对应的剩余存储区不满足待写入数据的存储要求时,计算Flash存储器起始地址对应的剩余存储区与所述末尾节点相对应的剩余存储区的存储空间总和,并判断所述存储空间总和是否满足所述存储要求;
写入模块3,用于在所述存储空间总和满足所述存储要求时,将所述待写入数据存储至所述末尾节点相对应的剩余存储区以及所述起始地址对应的剩余存储区。
进一步的,仍参照图12所示,本实施例中的Flash文件系统的数据处理装置还包括初始化模块4,用于对Flash存储器进行初始化。初始化模块4进行初始化的过程包括生成坏块统计表、文件目录表以及文件分配表的过程。其中,坏块统计表用户统计Flash存储器的坏块,避免将数据存储到坏块中。例如1MB的Flash存储器,若出现32KB的坏块,则该Flash存储器只有992KB的可用存储空间。文件目录表用于存储目录,而文件分配表则是用于记录各文件存储位置及文件状态,文件分配表使用链表来记录文件的信息。
可选的,仍参照图12所示,本实施例中的Flash文件系统的数据处理装置还包括:
垃圾回收模块5,用于在所述存储空间总和不满足所述存储要求时,启动垃圾回收机制,对Flash存储器中的剩余存储区进行合并处理;
合并判断模块6,用于判断合并处理后的剩余存储区是否满足所述存储要求;若是,则写入模块3将所述待写入数据存储至合并处理后的剩余存储区。
可选的,仍参照图12所示,本实施例中的Flash文件系统的数据处理装置,还包括:
掉电保护启动判断模块7,用于依据所述数据写入请求判断是否启动掉电保护机制;若是,则写入模块3在存储所述待写入数据时,按照掉电保护写入方式存储所述待写入数据。
进一步的,仍参照图12所示,本实施例中的Flash文件系统的数据处理装置还包括读取模块8。读取模块8在接收读取数据请求后,根据读取数据请求对Flash存储器中的文件属性进行检查,若检查到与所述读取数据请求相对应的数据,则读取该数据。
具体的,以读取文件为例,读取数据请求中可包含文件名或文件标识,读取模块8接收读取数据请求后,根据文件名或文件标识对Flash存储器中的目录和文件的文件属性进行检查,若找到与读取数据请求中的文件名或文件标识相一致的文件,则读取该文件。另外,如果读取模块8未找到与读取数据请求中的文件名或文件标识相一致的文件,则返回读取失败的提示信息。
进一步的,仍参照图12所示,本实施例中的Flash文件系统的数据处理装置还包括删除模块9,删除模块9接收删除数据请求后,删除Flash存储器中与删除数据请求相对应的节点信息。
具体的,以删除文件为例,删除数据请求中包含文件名或文件标识,删除模块9在删除文件时,仅删除Flash存储器中与文件名或文件标识相对应的节点信息,而不擦除存储的文件,在写入模块3下次写入文件时再执行擦除操作,这样可以进一步防止频繁擦除某个存储块。
上述Flash文件系统的数据处理装置可执行本发明实施例所提供的Flash文件系统的数据处理方法,具备执行方法相应的功能模块和有益效果,此处不再对各个功能模块实现其功能的具体方法进行赘述。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。