发明内容
本发明所要解决的技术问题是提供一种Flash文件***的数据处理方法,以在掉电保护的基础上,以较低的***开销实现Flash的磨损均衡的功能。
本发明的另一个目的是将上述构思应用于具体的应用环境中,提供一种Flash文件***的数据处理装置,从而保证该方法的实现和应用。
为解决上述技术问题,本发明实施例提供了一种Flash文件***的数据处理方法,所述Flash文件***包括地址映射块,所述地址映射块记录有Flash文件中所有逻辑块与物理块的映射关系,所述方法包括:
依据Flash文件的更新请求,在Flash文件***的物理块中查找第一空闲块,在所述第一空闲块中写入更新的Flash文件;
在所述Flash文件***的物理块中继续查找第二空闲块,在所述第二空闲块中写入更新的地址映射块,第二空闲块具体为Flash文件***中第二个空闲的物理块。
优选的,所述地址映射块还记录有版本信息、写入完成标识和有效标识信息,所述写入更新地址映射块的步骤包括:
生成所述更新地址映射块的版本信息;
写入所述更新Flash文件中相应的逻辑块与第一空闲块的映射关系;
写入原始地址映射块中未更新的逻辑块与物理块的映射关系;
对所述更新地址映射块标记写入完成标识;
在所述更新地址映射块中记录有效标识,以及,在所述原始地址映射块中记录无效标识。
优选的,所述的方法,还包括:
依据当前具有有效标识的地址映射块的数量,判断是否发生了意外掉电。
优选的,通过以下步骤判断是否发生意外掉电:
若当前仅有一个具有有效标识的地址映射块,则判断未发生意外掉电;
若当前有两个具有有效标识的地址映射块,则判断发生了意外掉电。
优选的,所述的方法,还包括:
如果发生意外掉电,则在复位后搜索所述更新地址映射块的写入完成标识,若有,则依据所述更新的地址映射块恢复新数据;若没有,则 依据所述原始地址映射块恢复旧数据。
优选的,在依据所述原始地址映射块恢复旧数据时,所述的方法还包括:
擦除所述更新地址映射块。
优选的,通过以下步骤查找空闲块:依据所述地址映射块中记录的逻辑块与物理块的映射关系查找空闲块。
本发明实施例还公开了一种Flash文件***的数据处理装置,所述Flash文件***包括地址映射块,所述地址映射块记录有Flash文件中所有逻辑块与物理块的映射关系,所述装置包括:
第一空块查找模块,用于依据Flash文件的更新请求,在Flash文件***的物理块中查找第一空闲块;
第一写入模块,用于在所述第一空闲块中写入更新的Flash文件;
第二空块查找模块,用于在所述Flash文件***的物理块中继续查找第二空闲块,第二空闲块具体为Flash文件***中第二个空闲的物理块;
第二写入模块,用于在所述第二空闲块中写入更新的地址映射块。
优选的,所述地址映射块还记录有版本信息、写入完成标识和有效标识信息,所述第二写入模块包括:
版本更新子模块,用于生成所述更新地址映射块的版本信息;
映射更新子模块,用于写入所述更新Flash文件中相应的逻辑块与第一空闲块的映射关系;
映射保留子模块,用于写入原始地址映射块中未更新的逻辑块与物理块的映射关系;
完成标识子模块,用于对所述更新地址映射块标记写入完成标识;
有效标识子模块,用于在所述更新地址映射块中记录有效标识,以及,在所述原始地址映射块中记录无效标识。
优选的,所述的装置,还包括:
掉电判断模块,用于依据当前具有有效标识的地址映射块的数量,判断是否发生意外掉电。
优选的,所述的装置,还包括:
复位搜索模块,用于在掉电复位后搜索所述更新地址映射块的写入完成标识,若有,则触发新数据恢复模块;若没有,则触发旧数据恢复模块;
新数据恢复模块,用于依据所述更新的地址映射块恢复新数据;
旧数据恢复模块,用于依据所述原始地址映射块恢复旧数据。
优选的,所述的装置,还包括:
擦除模块,用于在依据所述原始地址映射块恢复旧数据时,擦除所述更新地址映射块。
与现有技术相比,本发明具有以下优点:
首先,本发明基于记录有Flash文件中所有逻辑块与物理块的映射关系的地址映射块,在所述Flash文件***的整个物理块中循环处理数据,具体为,在更新文件的某块数据时,不对其物理块进行修改,而通过查找另外的空闲块,在该空闲块中写入更新文件,然后再依据该块数据的新的地址映射关系来生成新的地址映射块。处理后,旧数据所在的物理块从使用中的物理块变成了空闲块,而新数据所在的物理块从空闲块变成了使用中的物理块,可以看出,这种数据处理方法不会使某个物理块存在特别的、多于其它物理块的擦写次数,因而很好地实现了整个Flash的磨损均衡功能。
再者,本发明通过在地址映射块中进一步记录版本信息、写入完成标识和有效标识信息,结合以上数据处理方法,来监控掉电的情况以及进行掉电复位后的数据恢复操作,即可进一步保证在掉电保护的基础上,以非常小的***开销来实现Flash的磨损均衡功能。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
一般来说,整个Flash文件***可以分为两个层次,第一层用于直接和物理硬件接触,管理Flash物理存储器;第二层用于在基层之上,实现文件管理,如实现FAT。本发明实施例主要涉及Flash文件***第一层的相关内容。
本发明实施例的核心构思之一在于,创建记录有Flash文件中所有逻辑块与物理块的映射关系的地址映射块,在所述Flash文件***的整个物理块中循环处理数据,具体为,在更新文件的某块数据时,不对其物理块进行修改,而通过查找另外的空闲块,在该空闲块中写入更新文件,然后再依据该块数据的新的地址映射关系来生成新的地址映射块。并进一步地,在地址映射块中记录版本信息、写入完成标识和有效标识信息,用以监控掉电情况并进行复位后的数据恢复操作,从而使本发明能在掉电保护的基础上,以较低的***开销实现Flash的磨损均衡的功能。
参考图1,示出了本发明的一种Flash文件***的数据处理方法实施例1的流程图,所述Flash文件***包括地址映射块,所述地址映射块记录有Flash文件中所有逻辑块与物理块的映射关系,本实施例可以包括以下步骤:
步骤101、依据Flash文件的更新请求,在Flash文件***的物理块中查找第一空闲块;
步骤102、在所述第一空闲块中写入更新的Flash文件;
步骤103、在所述Flash文件***的物理块中继续查找第二空闲块;
步骤104、在所述第二空闲块中写入更新的地址映射块。
可以看出,本发明的逻辑块可用于保存Flash文件的特定数据,为实现磨损均衡的功能,逻辑块与Flash文件***的物理块存在动态的映射关系,优选的,所述逻辑块与物理块的映射关系可以通过逻辑块号与物理块号的映射表来表示。在实际中,根据Flash的大小,所述地址映射块可以为多个。
在本实施例中,所述空闲块可以依据所述地址映射块中记录的逻辑块与物理块的映射关系查找空闲块。
例如,维护一个查找起始的物理块号n,开机后,将n初始化为0,查找第一空闲块的过程为:
1)读出物理块号为n的逻辑块的第一个字节,假设为m;
2)如果m等于0xff,则确定该块为第一空闲块;
其中,0xff是现有技术中空闲块的状态标识。
3)如果m不等于0xff,则在地址映射块中查找逻辑块号m对应的物理块号,假设为1;
4)如果1不等于n,则确定该块为第一空闲块;否则,执行下一步;
5)将n加1;
6)如果n等于FLASH中物理块的数量,则n=0;
7)返回步骤1)。
在找到第一空闲块之后,保留n的值,下一次查找第二空闲块时则可以依据该n的值进行。
当然,以上查找空闲块的过程仅仅作为一种示例,在实际中,本领域技术人员采用任一种查找空闲块的方法都是可行的,例如,在预置空闲块队列中按顺序选取相应的空闲块等,本发明对此无需作出限制。
参考图2,示出了本发明的一种Flash文件***的数据处理方法实施例2的流程图,所述Flash文件***包括地址映射块,所述地址映射块记录有Flash文件中所有逻辑块与物理块的映射关系、版本信息、写入完成标识和有效标识信息,本实施例可以包括以下步骤:
步骤201、依据Flash文件的更新请求,在Flash文件***的物理块 中查找第一空闲块;
步骤202、在所述第一空闲块中写入更新的Flash文件;
步骤203、在所述Flash文件***的物理块中继续查找第二空闲块;
步骤204、在所述第二空闲块中写入更新的地址映射块。
具体地,本步骤可以包括以下子步骤:
子步骤2041、生成所述更新地址映射块的版本信息;
子步骤2042、写入所述更新Flash文件中相应的逻辑块与第一空闲块的映射关系;
子步骤2043、写入原始地址映射块中未更新的逻辑块与物理块的映射关系;
子步骤2044、对所述更新地址映射块标记写入完成标识;
子步骤2045、在所述更新地址映射块中记录有效标识,以及,在所述原始地址映射块中记录无效标识。
例如,假设地址映射块的大小为512B,则某个地址映射块记录的内容可以参考下表:
字节 |
内容 |
1 |
逻辑块号 |
2 |
当前地址映射块标识 |
3 |
版本信息 |
4 |
映射表项1 |
...... |
...... |
510 |
映射表项507 |
511 |
写入完成标识 |
512 |
有效标识信息 |
其中,当前地址映射块标识是为了将地址映射块与其它块,如***信息块等区分开来而设置的,在具有多个地址映射块的情况下,所述当前地址映射块标识还可以包括区分不同地址映射块的序号信息。所述映射表项为逻辑块号与物理块号的映射表,即记录所述逻辑块与物理块的映射关系表;所述写入完成标识可以由本领域技术人员根据实际需要或经验任意设置,例如,设置0x00为写入完成标识;所述有效标识信息也 可任意设置,例如,设置0xFF为有效标识,其它值为无效标识等,本发明对此不作限制。
以下以一个简单示例进一步说明本实施例。
假设要修改逻辑块ln中的数据,对应物理块为pn,数据处理过程为:
a)查找到物理块号为pm的空闲块;
b)将修改后的新数据写入pm;
c)查找到物理块号为p1的空闲块,在pl中写入更新的地址映射块Nmap。
更新的地址映射块Nmap包括以下内容:
c1)读取原始物理块pn的版本信息,依据该旧版本信息生成新版本信息,写入Nmap;
c2)将需要修改的映射项,即,将原来ln-pn的映射项,修改为ln-pm的映射项,写入Nmap;
c3)将原始地址映射块中其它的映射项写入Nmap;
假设ln-pn的映射项对应上表的映射表项1,如果当前仅对该映射表项1进行了修改,则还要将其它未作修改的映射表项2-映射表项507写入新的地址映射块中。
C4)将原始地址映射块的逻辑块号和当前地址映射块标识写入Nmap;
C5)将Nmap的写入完成标识置为0x00;
C6)将原始地址映射块的有效标识信息置为0x00,即无效标识。
参考图3,示出了本发明的一种Flash文件***的数据处理方法实施例3的流程图,所述Flash文件***包括地址映射块,所述地址映射块记录有Flash文件中所有逻辑块与物理块的映射关系、版本信息、写入完成标识和有效标识信息,本实施例可以包括以下步骤:
步骤301、依据Flash文件的更新请求,在Flash文件***的物理块中查找第一空闲块;
步骤302、在所述第一空闲块中写入更新的Flash文件;
步骤303、在所述Flash文件***的物理块中继续查找第二空闲块;
步骤304、在所述第二空闲块中写入更新的地址映射块。
优选的,本步骤可以包括以下子步骤:
子步骤3041、生成所述更新地址映射块的版本信息;
子步骤3042、写入所述更新Flash文件中相应的逻辑块与第一空闲块的映射关系;
子步骤3043、写入原始地址映射块中未更新的逻辑块与物理块的映射关系;
子步骤3044、对所述更新地址映射块标记写入完成标识;
子步骤3045、在所述更新地址映射块中记录有效标识,以及,在所述原始地址映射块中记录无效标识。
步骤305、依据当前具有有效标识的地址映射块的数量,判断是否发生意外掉电;
优选的,可以通过以下子步骤判断是否发生意外掉电:
子步骤3051、若当前仅有一个具有有效标识的地址映射块,则判断未发生意外掉电;
子步骤3052、若当前有两个具有有效标识的地址映射块,则判断发生了意外掉电,触发步骤306;
步骤306、在复位后搜索所述更新地址映射块的写入完成标识,若有,则执行步骤307;若没有,则执行步骤308;
步骤307、依据所述更新的地址映射块恢复新数据;
步骤308、依据所述原始地址映射块恢复旧数据,并擦除所述更新地址映射块。
以下以一个简单示例进一步说明本实施例复位后的操作。
应用本实施例,复位后将首先搜索整个FLASH文件***中所有的块,在所有的块中根据逻辑块号、地址映射块标识、有效标识信息来判断每个块是否为有效的地址映射块。在这种情况下,
a、如果搜索到1个有效的地址映射块则认为没有发生意外掉电;
b、如果搜索到2个有效的地址映射块则认为发生了意外掉电,则可以进行如下操作:
b1)如果新地址映射块的写入完成标识为0x00(表示写入完成),则 接受新地址映射块,将旧地址映射块写为无效;
b2)如果新地址映射块的写完成标识为其它(表示写入未完成),则接受旧地址映射块,擦除新地址映射块。
在这种情况下,对于搜索到其它数量的有效地址映射块可以认为尚未构建文件***。
需要说明的是,上述通过1个有效地址映射块判定没发生掉电,而通过2个有效地址判定发生掉电仅仅是一种示例,在实际中,根据地址映射块的数量,可能对应其它不同个数的情形,本发明对此不需要做出限定。
以下结合上述方法实施例2和3的简单示例,简单说明掉电保护的实现原理:
如果在实施例2的简单示例中的c4步骤完成之前意外掉电,复位搜索将搜索到1个地址映射块,此时将接受旧数据,即对旧数据进行恢复;如果在c4步骤完成之前意外掉电,复位搜索将搜索到2个地址映射块,由于新地址映射块尚未完成写入,此时仍将接受旧数据,即对旧数据进行恢复;如果在c6步骤完成之前意外掉电,复位搜索将搜索到2个地址映射块,此时新版本的地址映射块已经写入完成,将接受新数据,即对新数据进行恢复。
以下通过一个具体例子对本发明进一步说明。
参考图4所示的Flash文件***初始状态示意图,假设一个Flash文件***包括5个物理块,其初始状态为,第1块为地址映射块Map;第2块保存着文件1的数据,标记为File1;第3块保存着文件2的数据标记为File2;第4块和第5块为空闲块。
在未更新之前,初始的地址映射块Map记录File1的映射关系可以为,L1-P2,即逻辑块1与物理块2对应;记录File2的映射关系可以为,L2-P32,即逻辑块2与物理块3对应。
1、如果要更新修改File1,则第一步找到新的空闲块(即第4块),将File1的新数据NewFile1写入第4块;此时第2块上,File1的旧数据仍然在第2块。本步骤处理的示意图如图5所示。
可以理解的是,经过步骤1的处理,File1对应的逻辑块与物理块的映射关系发生了改变,即从原来的L1-P2,变成了现在的L1-P4。在这种情况下,则需要生成一个新的地址映射块来记录更新的映射关系。
2、再找一个空闲块(即第5块),写入更新的地址映射块NewMap;此时第1块上,旧的地址映射块Map依然存在。本步骤处理的示意图如图6所示。
3、公知的是,Flash存储器中“写入”是将对应单元由“1”变“0”,“擦除”是由“0”变为“1”。此时,新的文件NewFile1和新的映射关系NewMap都已经存在文件***中,那么旧的文件File1和旧的映射关系Map映射关系就擦除了。本步骤处理后的示意图如图7所示。
4、如果需要进一步更新File2,则可以依据上述过程查找到第一空闲块(第1块)写入NewFile2,查找到第二空闲块(第2块)写入NewMap,即处理后的示意图可以如图8所示,本发明对此不作赘述。
在上例的处理过程中,一旦发生掉电,复位之后将在整个物理空间中,搜索地址映射块。对于恢复数据处理的具体情形可以为:
(1)如果在第2步开始前,发生了意外掉电,由于此时Flash文件***中,新地址映射块尚未形成,只有图6中旧的数据File1(第2块)和地址映射块Map(第1块),所以***将恢复旧数据。
(2)如果在第2步结束前,发生了意外掉电,由于此时Flash中,新地址映射块已经开始创建了,但是尚未完成。地址映射块的修改过程中,哪些字节先写,哪些字节后写,是有一定的顺序的,该顺序保证了在第2步彻底结束前,新地址映射块都不会具备一个地址映射块的特征。所以,复位之后,还是只会搜索到旧地址映射块,还是会恢复旧数据。
(3)如果在第3步完成前发生了掉电,此时***中可能存在新旧两个File1,和新旧两个地址映射块。那么复位后,会搜索到两个地址映射块,此时通过比较地址映射块的版本(记录在地址映射块中)可以知道,哪个新,哪个旧。然后恢复新数据即可。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时 进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
上述实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。
参考图9,示出了本发明的一种Flash文件***的数据处理装置实施例的结构框图,所述Flash文件***包括地址映射块,所述地址映射块记录有Flash文件中所有逻辑块与物理块的映射关系,所述装置可以包括以下模块:
第一空块查找模块901,用于依据Flash文件的更新请求,在Flash文件***的物理块中查找第一空闲块;
第一写入模块902,用于在所述第一空闲块中写入更新的Flash文件;
第二空块查找模块903,用于在所述Flash文件***的物理块中继续查找第二空闲块;
第二写入模块904,用于在所述第二空闲块中写入更新的地址映射块。
优选的,所述地址映射块还记录有版本信息、写入完成标识和有效标识信息,所述第二写入模块可以包括以下子模块:
版本更新子模块,用于生成所述更新地址映射块的版本信息;
映射更新子模块,用于写入所述更新Flash文件中相应的逻辑块与第一空闲块的映射关系;
映射保留子模块,用于写入原始地址映射块中未更新的逻辑块与物理块的映射关系;
完成标识子模块,用于对所述更新地址映射块标记写入完成标识;
有效标识子模块,用于在所述更新地址映射块中记录有效标识,以及,在所述原始地址映射块中记录无效标识。
优选的,本实施例还可以包括:
掉电判断模块,用于依据当前具有有效标识的地址映射块的数量,判断是否发生意外掉电。
优选的,本实施例还可以包括:
复位搜索模块,用于在掉电复位后搜索所述更新地址映射块的写入完成标识,若有,则触发新数据恢复模块;若没有,则触发旧数据恢复模块;
新数据恢复模块,用于依据所述更新的地址映射块恢复新数据;
旧数据恢复模块,用于依据所述原始地址映射块恢复旧数据。
优选的,本实施例还可以包括:
擦除模块,用于在依据所述原始地址映射块恢复旧数据时,擦除所述更新地址映射块。
参考图10,示出了应用图9所示的优选实施例进行Flash文件***的数据处理的流程图,可以包括以下步骤:
步骤1001、第一空块查找模块依据Flash文件的更新请求,在Flash文件***的物理块中查找第一空闲块;
步骤1002、第一写入模块在所述第一空闲块中写入更新的Flash文件;
步骤1003、第二空块查找模块在所述Flash文件***的物理块中继续查找第二空闲块;
步骤1004、第二写入模块在所述第二空闲块中写入更新的地址映射块;
优选的,本步骤可以包括以下子步骤:
子步骤S1、版本更新子模块生成所述更新地址映射块的版本信息;
子步骤S2、映射更新子模块写入所述更新Flash文件中相应的逻辑块与第一空闲块的映射关系;
子步骤S3、映射保留子模块写入原始地址映射块中未更新的逻辑块与物理块的映射关系;
子步骤S4、完成标识子模块对所述更新地址映射块标记写入完成标识;
子步骤S5、有效标识子模块在所述更新地址映射块中记录有效标识,以及,在所述原始地址映射块中记录无效标识。
步骤1005、掉电判断模块依据当前具有有效标识的地址映射块的数 量,判断是否发生意外掉电;
优选的,可以通过以下子步骤判断是否发生意外掉电:
子步骤Q1、若当前仅有一个具有有效标识的地址映射块,则判断未发生意外掉电;
子步骤Q2、若当前有两个具有有效标识的地址映射块,则判断发生了意外掉电,触发复位搜索模块;
步骤1006、复位搜索模块在复位后搜索所述更新地址映射块的写入完成标识,若有,则执行步骤1007;若没有,则执行步骤1008;
步骤1007、新数据恢复模块依据所述更新的地址映射块恢复新数据;
步骤1008、旧数据恢复模块依据所述原始地址映射块恢复旧数据,并通过擦除模块擦除所述更新地址映射块。
随着嵌入式***越来越广泛的应用,嵌入式***中有大量的数据需要存储和管理。Flash存储器具有容量大、体积小、功耗小、成本低、掉电后数据不丢失、读访问速度高、抗震性好等一系列的优点,已经成为嵌入式***中广泛应用的存储器件。但是随着***复杂性的增加和存储器容量的加大,如何高效地存储和管理数据成为一个重要的课题。引入嵌入式Flash文件***,正是解决这个问题的好办法。由于嵌入式***中有不少地方需要事务处理,即连续多个写操作,要么同时失败,要么同时成功。考虑到嵌入式***的资源非常紧张,事务处理可以由Flash文件***来支持。这样做效率更高,应用更简单。应用本发明数据处理装置的事务处理过程为:在启动了一个事务之后,第一次写操作中的地址映射块修改过程只执行前述子步骤S1和S2;后续写操作中的地址映射块修改过程,只执行子步骤S2(在实际中,大多数情况下是这样,但如果新修改的数据块是事务中前面写操作已经修改过的,则需要重新执行前述子步骤S1和S2);结束事务的时候,再执行子步骤S1——S5;事务进行中,由文件***维护旧地址映射块和新地址映射块的相关信息。事物进行中,读操作返回最新的数据。由此,通过地址映射块则实现了多次写操作的同步。
对于装置实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本发明可用于众多通用或专用的计算***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、包括以上任何***或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上对本发明所提供的一种Flash文件***的数据处理方法、一种Flash文件***的数据处理装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。