允许覆盖的闪存均匀磨损循环队列技术的制作方法

文档序号:6459922阅读:307来源:国知局
专利名称:允许覆盖的闪存均匀磨损循环队列技术的制作方法
技术领域
本发明涉及闪存技术领域,具体地说是一种允许覆盖的闪存均匀磨损 循环队列技术。
技术背景在科学研究过程中,常常会随机或者定期的将一批采集到的数据记录 到某一个存储设备之中,等到了一定的期限之后,科研人员将所有已经记 录的数据通过软件进行转存,然后进行分析和研究。因此设计一个多次存 储多次导出的数据存储系统,对于现代科学研究者来说是非常必要的。正常情况下,设计者们习惯于记录数据直接从闪存的开始位置开始记 录,这样导致了每次记录都是从闪存开始的位置开始记录,从而也就导致 闪存开始几块的数据频繁的被记入数据或者擦除,这样会过早损坏闪存, 不利于长时间的使用。同时闪存的存储空间会有所限制,这样限制条件下 往往可以覆盖最早的一批数据。 发明内容本发明的目的是设计一种为了针对背景技术的不足的允许覆盖的闪存 均匀磨损循环队列技术。本发明允许覆盖的闪存均匀磨损循环队列技术,包括设置一个记录 点或称之为写指针和一个读点或称之为读指针,通过对记录点和读点的处 理,既可以达到对闪存数据的均匀处理,达到均匀磨损,也可以实现因为 空间不够而需要对最早的数据进行覆盖。由于记录点或者读点可能会在NorFlash上记满,通过在NorFlash上 顺序记录这些关键数据, 一旦NorFlash被记满,从擦除NorFlash空间,从头开始记录,从而达到均匀磨损,因此记录的位置和上次记录点、读点 的査找根据对半来查找。在不考虑覆盖的时候,或者不允许覆盖的时候,通过对记录点、读点的控制,让记录点按照NandFlash空间顺序记录,达到均匀磨损,而擦除 是指向一个新的数据块,就擦除一块,这样也达到均匀磨损。关于覆盖的处理,分析出现覆盖的时候,读点和记录点的移动规律, 由于覆盖的最早的一批数据,从而得出了记录点必须指向读点的前面,同 时不能再次超过读点的规律。按照均匀磨损的规律,需要计算新的记录点和读点,不是通过格式化 NandFlash空间的办法处理记录点、读点,而达到让记录点和读点的值相同, 进行空间回收。为了正确区分覆盖和非覆盖,通过标志读点或记录点的办法来达到覆 盖和非覆盖的区分。本发明允许覆盖的闪存均匀磨损循环队列技术的优点是由于Flash 的特征是擦除和记录的次数有限,如果按照一般的设计办法,每次都在全 部擦除之后,在起始位置开始进行编写,容易导致局部地方擦除过多而减 少器件的使用寿命,起始位置总是被记录,最后末尾没怎么记录。在我们 之前的产品中,设计了基于图1的结构的软件算法,很少考虑擦除中的Flash的使用寿命问题。因此,本发明基于我们产品的结构,通过循环队列技术,将整个Flash空间看作一个队列,从使用开始到最终寿终正寝,均按照循环队列的办法进行记录、擦除、空间回收,同时还考虑到用户的特殊要求,无论空间是否充裕,是否允许覆盖,都可以采取均匀磨损的操作的办法达到目的。


图l为硬件体系结构示意图。图2为本发明均匀磨损数据记录顺序图。图3为覆盖的部分空间图。图4 a、 b、 c为记录点和读点存在的位置关系图。a为记录点二读点b为记录点〉读点c为记录点〈读点 图5为记录点和读点存在的位置关系图。a为刚出现覆盖时的处理b为覆盖过程中的处理具体实施方式
由于记录点和读点是非常关键的数据,在设计的过程中将记录点和读 点记入到NorFlash之中,而将获取的数据记入到NandFlash之中,因为 NorFlash的可靠性高于NandFlash,它可以确保数据记录的正确性,因此 用于记录关键的记录点和读点是合适的。在数据记录和擦除过程中,严格按照这样的顺序进行处理,那么闪存 的寿命可以提高。本发明中,设置一个记录点(也称之为写指针)来告诉系统每次记录 一批数据的起始物理位置,之所以设置记录点是因为记录数据是分批记录 的;并且设置一个读点(也称之为读指针)来告诉系统每次导出一批数据 的起始物理位置,保证读取的数据没有错误数据,同样设置读点是因为用 户导出数据也是一块一块的往外导的。下述均匀磨损和覆盖技术都是通过 记录点/读点控制而进行的。本发明中,针对均匀磨损技术,通过计算记录点、读点的处理,既可 以让存储的数据不丢失,同时也可以通过记录点、读点达到对闪存数据的 均匀处理,从而达到均匀磨损。当清空存储空间的时候,不需要重新在 NandFlash的起始位置开始记录,而是对齐记录点和读点,让这两个点在同 一个位置,具体在具体实施中有论述。本发明中,如果出现空间不够,就可能需要对最早存储的数据进行覆 盖,同样通过记录点和读点达到这样的覆盖的目的。而且在记录点和读点 进行适当的标记,从而让程序知道程序是否有覆盖。基于图1的结构对数据存储进行控制,在这个结构中,CPU既可以访问 NandFlash,也可以访问NorFlash,数据记录基于这种结构进行记录的。1. NorFlash的均匀处理和覆盖技术前面提到,发明中设置一个记录点(也称之为写指针)来告诉系统每 次记录一批数据的起始物理位置。为了便于导出数据,发明中也设置一个 读点(也称之为读指针)来告诉系统每次数据导出的时候,读NandFlash 的起始物理位置。关于记录点和读点的宽度是根据NandFlash的单元大小 来确定的。如果NandFlash有不超过2G (231,考虑NandFlash覆盖标志位, 后面有对覆盖的专门论述),则记录点和读点占用32比特的整型数据,否 则占用64个比特的数据。为了正确的区分,需要做一个标志,这个标志就 记录在记录点或者读点上面,为了不改变记录点和读点指向的位置,将记 录点和读点最高位置"1"。通过这样一个标志来正常区分覆盖和非覆盖。如果在记入记录点和读点的过程中,由于NorFlash空间有限,导致了 空间记录己满,按照如图2的循环队列顺序,逐步形成一个循环队列。在 空间满载的时候,为了便于处理,需要重新从第一个单元开始记录。这时, 首先必须将NorFlash空间擦除,使得所有单元都变成全"1",再记入记录 点/读点。这样按照顺序记录的数据记在前面,前部分空间就不是全"1", 而后部分空间全"l",从而也就成为区分空间有没有数据的一个依据,这 样便于对半査找。2. 没有覆盖时NandFlash空间计算与记录点/读点大小的关系 关于记录点和读点,必须记住一个基本规律,必须有数据记入了才能读。同时读点指向的起始空间没有读完,则记录点指向的区域不能再次超 过读点指向的区域,否则就会出现数据被覆盖而丢失数据,关于覆盖后面再继续讨论。因此,从队列角度来说,在循环队列里面,记录点永远要跑在读点的前面,但不能再次超过了读点。依据这一规则,出现了图4的三 种可能性。下面假设读点为i 咖,记录点为i c^,可读空间大小为i ^/ze, 可记录空间大小为及Wze , NandFlash的空间大小为似o^/ze。在这里,^fe/ze 和是按照循环队列方法。如图4(a)所示为读点和记录点的值相同,那么它们指向的是NandFlash 同一个单元,在没有覆盖之前,由于记录点没有跑在读点之前,因此读点 读不到数据,也就意味着NandFlash不存在数据可以导出,但是记录数据 的时候可以写入整个NandFlash的空间。围绕着这个思路,如图4 (b)所示为记录点大于读点的情况,由于记 录点必须跑在前面,但是不能再次超过读点,因此NandFlash上存在可读 的数据,大小为记录点与读点之差,可记录空间为除去这个可读之外的所 有空间,艮P:7 血'ze = 7 c/ — if咖如图4 (c)所示为记录点小于读点的情况,由于记录点必须跑在前面, 但是不能再次超过读点,因此这种情况下,很显然数据记录点已经走过了 NandFlash的最高地址,又重新从0地址开始了。 NandFlash上可记录的空间大小为读点与记录点之差,可读空间为除去这个可记录之外空间的所有 区域,即3.没有覆盖情况下NandFlash的均匀磨损处理 3. l数据记录/导出的描述在没有数据覆盖的情况下,实现对NandFlash的均匀磨损,那么每次 记入的空间要么没有数据,要么里面的数据已经完全被导出来才能记录。如何判断某一个空间是否为空呢,主要是通过记录点和读点的关系来控制。 通过记录点的定义可知,实现均匀磨损,实际上就是需要对记录点按照循 环队列进行移动。正常情况下,如果是记录NandFlash,则读点不会改变,直接按照队列 顺序记入读点,擦除一块,然后向NandFlash记录数据,直到该块数据记 满,紧接着就是对下一个数据块进行擦除,再继续记录。在这个过程中主 要关注的是有没有出现新的无效块,如何跳过无效块等问题,熟悉 NandFlash编程的都会清楚,这里就不罗嗦了 。写完之后将记录点记入即可。如果是导出NandFlash数据,则读点会被更改,也按照队列的顺序一 块块导出NandFlash数据,在导出NandFlash数据过程中,同样是如何跳 过永久无效块,选取有效块的有效数据。导出之后记入新的读点。如果收回NandFlash的存储空间,关于NandFlash空间的收回, 一般 就是将NandFlash直接格式化,然后直接从起始位置开始执行新的存储和 擦除。这样必然导致起始位置被擦除的次数远远大于终止位置被擦除的次 数。从而导致起始位置过早损坏。然而, 一般NandFlash无效块率达到一 定的比例,就必然被抛弃。前面已经提到过,当读点和记录点相同,这个时候NandFlash不存在 可以导出的数据,但可以写入整个NandFlash空间大小的数据,记录的时 候,可以继续往里面记录。有时候,即使NandFlash里面存在部分数据,但是用户认为没有用了, 需要收回NandFlash空间,依照上面的分析,这个时候只需要将读点和记 录点赋予同一个值就可以了。但是基于均匀磨损考虑,希望沿着循环队列, 从NandFlash现有的位置开始进行记录,因此回收空间操作仅仅修改读点 值,记录点的值赋予给读点即可。然后从记录点指向NandFlash现有的位 置继续进行记录,擦除等磨损操作。3. 2记录点/读点的计算关于记录点的计算不是简简单单的加和减,不是说,现在有多少数据,直接将现在记录点加上数据量就行。因为NandFlash可能出现无效块的可 能,而这个无效块是无法预计,随时可能产生的。在没有覆盖情况下,记 录的时候读点不变,而记录点必须等到数据记录完毕,通过程序找到下一 次可以记入数据的起始位置。同样,在导出数据的时候,读点的计算不是简简单单的加和减,不是 说,现在需要多少数据,直接将现在读点加上需求量就行。因为NandFlash 可能出现无效块的可能,而这个无效块是无法预计,随时可能产生的。而 且如果需求量超过NandFlash现有量,不一定就可以导出那么多量的数据 出来。由于读点跑过记录点前面,导出的时候记录点不变,而读点必须等 到数据导出完毕,通过程序找到下一次可以读数据的起始位置。4. NandFlash满载覆盖的均匀磨损处理如果有新的数据记入而NandFlash空间不够的情况下,需要擦除最早 被记入的数据,这就是覆盖。在这个阶段需要对NandFlash进行一些特殊 的处理。同样,必须要等到数据记入完毕之后,才能记入记录点,这是因 为数据记录过程中,也会出现一些随机无效块,这都是无法预计的。如果 导出,则每次导出数据完毕之后,考虑会出现一些随机无效块,也需要记 入读点。关于覆盖的判断,主要依据上述的i^/"来判断,如果i^fee比 NandFlash的一个擦除操作占有的块空间还小,那么就出现了覆盖。 4.1 NandFlash覆盖时记录点/读点的计算当空间不够,可以覆盖最早的数据的时候,记录点和读点如图5所示。 当记录点再次超过读点的时候,那么这个时候就会有数据被覆盖的,因此 相应的读点指向的区域就不会有效,需要将读点往前移动。怎么移动呢? 由于NandFlash每次擦除都是一个块的数据,因此需要讲读点移到下一个 数据块的起始位置。图5 (a)是刚出现覆盖的时候,记录点指向读点1所在的块,因此需要擦除该块。于是读点又指向下一块的起始位置即读点2。 在覆盖过程中的时候,每次旧的覆盖区域填满数据之后,记录点就指向了 新的区域,如图5 (b)所示,而此时读点1就必须移到下一块,即读点2。 同样,假设读点为^伞,记录点为Wc/ ,可读空间大小为及血^ ,可记 录空间大小为及"&, NandFlash的空间大小为M^y/M。图5的情况和图4(C)是类似的,因此有 7 cs/ze = / 命—i cp 7 c /ze = Maxs/M —(及伞—Wc/ )然而,比较图4 (a)和图5 (b),均是7 伞=化^,但图4 (a)是非覆 盖情形,图5 (b)是覆盖情形,为了正确地区分,需要标志出覆盖和非覆 盖。这个标志就记录在记录点或者读点上面,为了不改变记录点和读点指 向的位置,将记录点和读点最高位置"1"。通过这样一个标志来正常区分 覆盖和非覆盖。4. 2覆盖时数据的记录/导出上文讨论过非覆盖时的数据记录/导出。在数据覆盖的情况下,依据上 面的计算,记录数据的时候,按照循环队列进行移动。覆盖时记录数据每 记录一块区域,就要将读点指向新的数据块,因为读点必须保证数据可读。 而记录点则等所有数据记录完毕之后再存入。如果是导出NandFlash数据,仅仅按照除掉覆盖标志后进行计算,其 它正常处理。覆盖情况下,如果收回所有NandFlash的存储空间,前面已经提到过, 非覆盖情况下,仅仅修改读点的值,记录点的值赋给读点即可。然后从记 录点指向NandFlash现有的位置继续进行记录和擦除等磨损操作。这里, 由于存在覆盖标志,需要将覆盖标志去掉。
权利要求
1. 一种允许覆盖的闪存均匀磨损循环队列技术,其特征在于设置一个记录点或称之为写指针和一个读点或称之为读指针,通过对记录点和读点的处理,既可以达到对闪存数据的均匀处理,达到均匀磨损,也可以实现因为空间不够而需要对最早的数据进行覆盖。
2、 根据权利要求1所述的允许覆盖的闪存均匀磨损循环队列技术,其 特征在于由于记录点或者读点可能会在NorFlash上记满,通过在NorFlash 上顺序记录这些关键数据, 一旦NorFlash被记满,从擦除NorFlash空间, 从头开始记录,从而达到均匀磨损,因此记录的位置和上次记录点、读点 的查找根据对半来査找。
3、 根据权利要求1所述的允许覆盖的闪存均匀磨损循环队列技术,其 特征在于在不考虑覆盖的时候,或者不允许覆盖的时候,通过对记录点、 读点的控制,让记录点按照NandFlash空间顺序记录,达到均匀磨损,而 擦除是指向一个新的数据块,就擦除一块,这样也达到均匀磨损。
4、 根据权利要求1所述的允许覆盖的闪存均匀磨损循环队列技术,其 特征在于关于覆盖的处理,分析出现覆盖的时候,读点和记录点的移动 规律,由于覆盖的最早的一批数据,从而得出了记录点必须指向读点的前 面,同时不能再次超过读点的规律。
5、 根据权利要求3所述的允许覆盖的闪存均匀磨损循环队列技术,其 特征在于按照均匀磨损的规律,需要计算新的记录点和读点,不是通过 擦除NandFlash空间的办法处理记录点、读点,而是达到让记录点和读点 的值相同,进行空间回收。
6、 根据权利要求5所述的允许覆盖的闪存均匀磨损循环队列技术,其 特征在于为了正确区分覆盖和非覆盖,通过标志读点或记录点的办法来 达到覆盖和非覆盖的区分。
全文摘要
本发明允许覆盖的闪存均匀磨损循环队列技术,包括设置一个记录点或称之为写指针和一个读点或称之为读指针,通过对记录点和读点的处理,既可以达到对闪存数据的均匀处理,达到均匀磨损,也可以实现因为空间不够而需要对最早的数据进行覆盖。优点是通过循环队列技术,将整个Flash空间看作一个队列,从使用开始到最终寿终正寝,均按照循环队列的办法进行记录、擦除、空间回收,同时还考虑到用户的特殊要求,无论空间是否充裕,是否允许覆盖,都可以采取均匀磨损的操作的办法达到目的。
文档编号G06F12/02GK101266573SQ200810047508
公开日2008年9月17日 申请日期2008年4月29日 优先权日2008年4月29日
发明者袁行船 申请人:中国船舶重工集团公司第七〇九研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1