一种Flash中数据存储的管理方法与流程

文档序号:26101314发布日期:2021-07-30 18:12阅读:272来源:国知局
一种Flash中数据存储的管理方法与流程

本申请实施例涉及信息处理领域,尤指一种flash中数据存储的管理方法。



背景技术:

目前提升gnss芯片启动速度的一种有效方法是在芯片工作时存储星历,启动时直接读取星历。由于免去了接收星历的时间,芯片得以快速启动。使用这种技术往往需要在gnss芯片的flash中建立文件系统保存数据。

由于flash存在擦写寿命,因此不能对flash进行无限次擦写。基于该特性,在flash中要写入多种信息时,通过建立存储系统实现耗损均衡算法来平衡flash中各个扇区(sector)的擦写次数,以使flash寿命最大化。除此以外,gnss芯片使用的存储系统往往还需要具备占用系统资源少、初始化速度快、垃圾回收速度快、稳定可靠的特性。

目前支持耗损均衡的存储方案,包括如下两种:

第一种方法为冷热数据迁移方法,该方法通过记录下闪存中每个sector擦除次数,如果不同sector擦写次数产生失衡时,则交换擦写次数多的sector和擦写次数少的sector的数据,实现不同sector之间的写入平衡;

第二种方法为随机垃圾回收(garbagecollection,gc)方法。在jffs2文件系统中,当空闲空间低于一定比例时触发垃圾回收。基于使用随机数的方法以较大概率回收过期数据占比大的sector,以较小概率回收过期数据占比小的sector,以极低概率回收无过期数据的sector。通过这种随机的方法保证使用率较低的信息占用的空间也能被释放有机会用于保存频繁修改的信息

由于上述方案存在着占用资源较多或初始化速度较慢的问题,无法满足gnss芯片使用的存储系统的性能需要,因此,亟需提供一种新的存储方案。



技术实现要素:

为了解决上述任一技术问题,本申请实施例提供了一种flash中数据存储的管理方法。

为了达到本申请实施例目的,本申请实施例提供了一种flash中数据存储的管理方法,在flash空间中数据由从低地址到高地址循环顺序写入;其中每条信息的头数据记录有索引号;所述方法包括:

在执行初始化操作时,确定地址搜索的起始位置;

以所述起始位置为搜索起点,分别向地址比所述起始位置高的方向进行搜索和向地址比所述起始位置低的方向进行搜索,查找每条信息的头数据;

对查找到的头数据,判断头数据是否被擦除;

如果头数据未被擦除,则对内存中所述信息的索引号与所述信息的存储地址的对应关系进行管理,并继续进行搜索,直到每个搜索方向搜索到的头数据均被擦除为止。

一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上文所述的方法。

一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上文所述的方法。

上述技术方案中的一个技术方案具有如下优点或有益效果:

在执行初始化操作时,确定地址搜索的起始位置,以所述起始位置为搜索起点,分别向地址比所述起始位置高的方向进行搜索和向地址比所述起始位置低的方向进行搜索,查找每条信息的头数据,对查找到的头数据,判断头数据是否被擦除,如果头数据未被擦除,则对内存中所述信息的索引号与所述信息的存储地址的对应关系进行管理,并继续进行搜索,直到每个搜索方向搜索到的头数据均被擦除为止,实现对所有有效信息的快速搜索,达到快速初始化的目的。

本申请实施例的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请实施例而了解。本申请实施例的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。

附图说明

附图用来提供对本申请实施例技术方案的进一步理解,并且构成说明书的一部分,与本申请实施例的实施例一起用于解释本申请实施例的技术方案,并不构成对本申请实施例技术方案的限制。

图1为本申请实施例提供的flash中数据存储的管理方法的流程图;

图2为本申请实施例提供的flash存储系统中数据初始化的方法流程图;

图3为本申请实施例提供的flash存储系统中数据初始化的方法流程图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请实施例的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请实施例中的实施例及实施例中的特征可以相互任意组合。

在实现本申请过程中,对相关技术进行了技术分析,发现相关技术至少存在如下问题,包括:

相关技术中的冷热数据迁移方法由于算法较复杂以及需要记录各sector擦除次数,因此,该方法的应用需要消耗较多内存;

jffs2(journallingflashfilesystemversion2)文件系统因为有一定随机性,无法准确地控制各sector的擦除次数差值,稳定可靠性有待提高;另外,jffs2文件系统在初始化操作所存在着启动较慢的缺点。

基于上述分析,本申请实施例提供如下解决方案,包括:

图1为本申请实施例提供的flash中数据存储的管理方法的流程图。如图1所示,在该方法中,在flash空间中数据由从低地址到高地址循环顺序写入;其中每条信息的头数据记录有索引号;所述方法包括:

步骤101、在执行初始化操作时,确定地址搜索的起始位置;

步骤102、以所述起始位置为搜索起点,分别向地址比所述起始位置高的方向进行搜索和向地址比所述起始位置低的方向进行搜索,查找每条信息的头数据;

步骤103、对查找到的头数据,判断头数据是否被擦除;

步骤104、如果头数据未被擦除,则对内存中所述信息的索引号与所述信息的存储地址的对应关系进行管理,并继续进行搜索,直到每个搜索方向搜索到的头数据均被擦除为止。

本申请实施例提供的方法,在执行初始化操作时,确定地址搜索的起始位置,以所述起始位置为搜索起点,分别向地址比所述起始位置高的方向进行搜索和向地址比所述起始位置低的方向进行搜索,查找每条信息的头数据,对查找到的头数据,判断头数据是否被擦除,如果头数据未被擦除,则对内存中所述信息的索引号与所述信息的存储地址的对应关系进行管理,并继续进行搜索,直到每个搜索方向搜索到的头数据均被擦除为止,实现对所有有效信息的快速搜索,达到快速初始化的目的。

下面对本申请实施例提供的方法进行说明:

在一个示例性实施例中,所述flash包括至少两个存储区域,每个存储区域中的第一个扇区存储有初始化信息;

所述确定地址搜索的起始位置,包括:

确定每个初始化信息的存储位置,将每个初始化信息的存储位置均作为地址搜索的起始位置。

例如,将存储空间等分为两个半区,每个半区起始位置只能存放系统保留的信息(index0),index0被用于存储系统运行信息以及用于系统的初始化的数据。在系统第一次初始化时,flash为空,系统的起始地址作为索引号index0的存储位置。即,在第一次初始化时,在起始位置写入index0。由于index0只会出现在第一个sector位置和flash空间1/2位置后第一个sector,利用此特性校验存储空间是否合法。

对于非第一次初始化的flash,以index0的地址作为搜索的起始位置,有效保证有针对性的搜索,避免因搜索空白空间而造成初始化时间过长。

在一个示例性实施例中,每条信息的头数据记录还记录有本条信息的长度以及上一条信息的长度;

所述信息的头数据的存储位置是通过如下方式得到的,包括:

在向地址比所述起始位置高的方向搜索时,利用头数据中记录的本条信息的长度,确定下一条信息的头数据的存储位置;

在向地址比所述起始位置低的方向搜索时,利用头数据中记录的上一条信息的长度,确定上一条信息的头数据的存储位置。

头数据中的本条信息长度构成指向高地址方向的链表,上一条信息长度构成指向低地址方向的链表,实现双链接的查询,借助头数据中记录的本条信息的长度和上一条信息的长度,能够快速查找到头数据的存储位置,缩短初始化时间。

在一个示例性实施例中,每条信息的头数据还记录有版本号,且每条信息的版本号根据该条信息的写入次数确定;

所述对内存中所述信息的索引号与所述信息的存储地址的对应关系进行管理,包括:

判断所述信息的头数据的版本号是否为最高版本,以及,判断信息的头和页尾的校验数据是否正确;

如果信息的头数据的版本号为最高版本且信息的头和页尾的校验数据均正确,则在内存中建立所述信息的索引号与flash中所述信息的存储地址的对应关系。

例如,在对某一索引号的信息进行写入时,每次写入数据的版本号为上一次该index的版本号增加1。例如,索引号为5的信息中头数据记录的版本号为3,如果当前对该索引号5的信息进行写入,则索引号为5的信息中头数据该版本号更新为4。

在内存中每个信息对应一个描述符,每个描述符均记录有该信息的索引号,其中,同一条信息在内存中的索引号和在flash中的索引号相同,实现基于索引号对信息的存取。

在每次搜索到的头数据header后,读取头数据中的索引号与版本号。如果为该信息的版本号为最新版本,且该条信息的头数据与页尾数据footer校验均正确,则表示该条信息为有效数据,在内存中该信息的索引号对应的描述符中更新该条目的flash物理地址。反之,如果该信息的版本号不是最新版本,或者,该条信息的头数据与页尾数据中有至少一个校验错误,则表示该条信息不是有效数据,不允许在内存中该信息的索引号对应的描述符中更新该条目的flash物理地址。

基于上述流程进行初始化操作,可以准确地完成有效数据的记录。

在一个示例性实施例中,通过如下方式确定信息的头数据是否为最高版本,包括:

将所述信息的头数据记录的版本号与内存中该索引号对应的版本号进行比对,得到比对结果;

如果比对结果为不一致且数据记录中的版本号高于内存中该索引号对应的版本,则确定所述信息的头数据的版本号为最新版本。

在内存中,每条信息的描述符可以记录索引号,还可以记录该信息的版本号。在对flash初始化时,可以借助内存中该条信息的描述符中的版本号,对该条信息的版本号进行判断,实现对有效数据的筛选。

在一个示例性实施例中,所述方法还包括:

在内存中建立所述信息的索引号与flash中所述信息的存储地址的对应关系时,还在内存中建立所述信息的索引号与所述信息的信息长度的对应关系。

通过在内存中该条信息的描述符中记录信息长度,使得在读取该条信息时,利用内存中存储的存储地址和信息长度,可以直接执行读取操作;反之,如果内存中未记录该信息长度,则在读取该信息时,需要先从flash中该条信息的头数据中获取该条数据的长度,这样会增加对flash的读操作,增加对信息的读取时间。

通过上述对比可知,将该条信息的信息长度存储到内存中,可以缩短内存对信息的读取时间,提高数据读取效率。

在一个示例性实施例中,在向地址比所述起始位置高的方向搜索时,如果某一信息的头数据被擦除,则根据所述被擦除的头数据确定上一次写入结束位置;

在向地址比所述起始位置低的方向搜索时,如果另一信息的头数据被擦除,则根据所述被擦除的头数据确定擦除操作的起始地址。

在向地址比所述起始位置高的方向搜索时,如果头数据中的每一个字节全为0xff,意味着此处被擦除过,检查该头数据后面的数据,如果也为0xff,则可认为此处为上次写入完成之后的位置,此次初始化完成后从此处继续写入新数据。

在向地址比所述起始位置低的方向搜索时,如果头数据中的每一个字节全为0xff,意味着此处被擦除过,则该条信息的下一个信息为flash中存储的最旧的未擦除数据,垃圾回收时从该位置检查数据并擦除。

在一个示例性实施例中,所述方法还包括:

在完成flash的初始化操作后,确定上一次写入结束位置对应的扇区;

在上一次写入结束位置对应的扇区的下一个扇区执行写入数据操作。

通过确定上一次写入结束位置对应的扇区,进而确定本次写入数据操作所使用的扇区为该扇区的下一个扇区,实现每次写入均以新扇区开始,方便根据写入时间对扇区进行管理。

在一个示例性实施例中,在检测到flash存储空间中剩余空间的大小达到预设的空间阈值后,如果对flash执行第一次擦除,从flash的存储区域的起始位置对应的扇区开始执行数据擦除操作;如果对flash的擦除次数不是第一次,则从上次擦除的扇区的下一个扇区开始执行数据擦除操作。

由于每次写入数据均是以新的一个扇区开始,因此,在执行数据擦除时能够以扇区为单位进行擦除。

例如,如果第m次写入的数据的起始位置为第a个扇区,且第a个扇区还存储有第m-1次写入的数据,如果要删除第m-1次的数据,则第a个扇区的数据将被全部擦除,影响了第m次写入的数据;而使用本申请提供的方案,则第m次次写入的数据的起始位置为第a+1个扇区,如果要删除第m-1次的数据,则第a个扇区的数据将被全部擦除,不会影响第m次写入的数据,其中m为大于等于2的整数,a为大于等于1的整数。

在第一次擦除时,擦除最早写入过数据的扇区,即以index0所在的扇区为擦除操作的起始位置;以后每次擦除的扇区为上次擦除的扇区的下一个扇区。

在一个示例性实施例中,每次擦除操作能擦除的扇区的个数是根据用户能够容忍的最大写入时间确定的。

该最大写入时间是指用户写入有效信息这一操作消耗的总时间,包括flash写入信息的时间及写入操作附带引发的垃圾回收操作的时间之和。

由于数据擦除操作会影响外部对flash的写入时间,因此,可以根据flash的最大写入时间确定每次擦除的扇区的个数,可以设置擦除的扇区的个数小于等于3个。

在一个示例性实施例中,在对待擦除的扇区执行擦除操作之前,确定待擦除的扇区中的有效数据,其中所述有效数据为版本号为最高版本的数据;

对所述有效数据进行备份,并在备份完成后再对待擦除的扇区执行擦除操作。

如待擦除的数据为有效数据,将其拷贝到待写入位置再擦除,以保证flash中存储的数据的完整性。

在一个示例性实施例中,在初始化操作时,检测flash中是否有扇区在执行擦除操作后并未完成擦除操作;

如果有扇区未完成擦除操作,则确定未完成擦除操作的扇区;

对未完成擦除操作的扇区重新执行擦除操作。

很多flash存在如下问题:在执行擦除操作时,如果正在擦除某个扇区时发生掉电,在再次上电时可能会发现与擦除掉电的扇区属于同一bank的其他扇区中的个别数据发生不同形式的改变,导致数据被破坏,影响读取数据的准确性甚至因为校验不通过导致无法初始化系统。

基于上述情况,本申请实施例提供通过重新擦除该扇区可使受影响的其他扇区中的数据恢复正确。

在一个示例性实施例中,在对所选中的扇区执行擦除操作时,在flash中记录需擦除的扇区,并在扇区完成擦除后,对完成擦除的扇区的进行记录;

所述确定未完成擦除操作的扇区,包括:

根据需擦除的扇区和完成擦除操作的扇区,确定未完成擦除操作的扇区。

在flash中维护一个擦除日志表,在垃圾回收的过程中,遇到要擦除的扇区时,在日志表中记录待擦除的扇区地址,擦除之后再次记录地址。系统初始化时,检测擦除日志表,如发现待擦除扇区没有擦除完成的记录,则重新擦除该扇区,可使得系统中的数据具有掉电安全性。

下面对本申请实施例提供的方法进行说明:

本申请实施例以应用到导航星历存储系统为例进行说明,该星历存储具有如下特点:1.导航卫星数有限,因此星历的条目总数有限;2.单个卫星的星历数据量小。

本申请实施例提供一种基于索引号(index)的存取系统,同时具有耗损均衡、初始化速度快、占用系统资源少等特点的。

在该存取系统中,每条信息对应1个索引号。在flash中,写入时间相邻的两条信息在空间上也紧密相邻。每条信息前存放一个描述符保存本条信息的索引号、版本号和校验的信息;以及本条信息和上一条信息的长度,即实现了一个双链表连接相邻信息。在内存中,为每条信息建立另一个描述符,保存索引号、信息长度及其在flash中的位置。通过这种存储方案,可以在系统上电时利用双链表实现所有有效信息的快速搜索,完成快速初始化;并在运行时快速访问内容。

该flash的存储空间等分为两个半区,每个半区起始位置只能存放系统保留的信息(index0),index0被用于存储系统运行信息以及用于系统的初始化。系统在第一次初始化(flash为空)时,在系统的起始地址写入index0。

图2为本申请实施例提供的flash存储系统中数据初始化的方法流程图。如图2所示,所述方法包括:

步骤201、确定合法的index0;

对于空flash,在起始位置写入index0。由于index0只会出现在第一个sector位置和flash空间1/2位置后第一个sector,利用此特性校验非易失存储器(non-volatilememory,nvm)存储空间是否合法。

步骤202、利用index头中的双链表向高地址搜索;

以index0的地址为基准,利用每个条目的header中保存的本条信息的长度信息向高地址方向搜索。

步骤203、判断index头中数据是否被擦除;

如果header中的每一个字节全为0xff,表示所述index头中数据被擦除则执行步骤204;反之,所述index头中数据未被擦除,则执行步骤205;

步骤204、对index头中的数据进行校验并根据校验结果更新内存描述符,并继续执行步骤202,直到搜索到的index头中数据被擦除为止;

每次搜索到的下一个地址处都保存有一个条目的header,检查header中的索引号与版本。如果为一个条目的最新版本,且该条目的header与footer校验均正确,则在内存的描述符中更新该条目的flash物理地址。

步骤205、终止向高地址方向搜索,记录当前位置为下次写入位置;

如果header中的每一个字节全为0xff,检查该header后面的数据,如果也为0xff,则可认为此处为上次写入完成之后的位置,此次初始化完成后从此处继续写入新数据。

步骤206、利用header中保存的上一条目长度向低地址方向搜索;

步骤207、判断index头中数据是否被擦除;

如果header中的每一个字节全为0xff,表示所述index头中数据被擦除则执行步骤208;反之,所述index头中数据未被擦除,则执行步骤209;

步骤208、对index头中的数据进行校验并根据校验结果更新内存描述符,并继续执行步骤207,直到搜索到的index头中数据被擦除为止;

步骤209、记录最旧的未擦除数据的位置,其中垃圾回收从该位置检查数据并擦除。

本申请实施例提供的方法,能够实现对flash中有效数据的搜索,达到快速初始化的目的。

图3为本申请实施例提供的flash存储系统中数据初始化的方法流程图。如图3所示,所述方法包括:

步骤301、判断待写入为位置是否为存储半区的起始位置;

存储半区的起始位置对应存储有index0对应的数据,不允许用户主动写入index0的数据。

如果是存储半区的起始位置,则执行步骤302;

如果不是存储半区的起始位置,则执行步骤303;

步骤302、写入index0的数据,并在写入完成后,执行步骤303;

步骤303、写入待写入index的数据;

步骤304、判断数据写入后剩余空间是否小于或等于总存储空间的一半;

如果剩余空间是否小于或等于总存储空间的一半,则执行步骤305至步骤307;否则,流程结束。

步骤305、判断最旧数据是否过期;

如果最旧数据已过期,则执行步骤306;

如果最旧数据未过期,则执行步骤307;

步骤306、擦除过期数据,并在擦除后执行步骤304;

步骤307、备份该最旧数据,并在备份完成后,执行步骤306。

本申请实施例方法,在初始化完成后,先写入新数据,再备份待擦除的旧数据,再执行擦除操作;需要在半区起始位置新写入数据时,先备份index0,再写入新数据,实现对flash中数据的写入管理。

综上所述,本申请提供的方案具有以下优点:

1.满足最坏时间可确定的垃圾回收策略,保障最坏情况不超过300ms的写延迟;

2.初始化时间短,4mb容量的存储系统初始化时间仅不超过30ms,从而保障接收机快速的首次定位时间;

3.支持耗损均衡的写策略,保障flash足够长的寿命;

4.针对部分norflash擦除过程掉电导致数据紊乱,可进行掉电事件记录并在下次上电时及时恢复数据,使系统具有高可靠性。

本申请实施例提供一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上文任一项中所述的方法。

本申请实施例提供一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上文任一项中所述的方法。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些组件或所有组件可以被实施为由处理器,如数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

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