确定Flash存储器的存储区中最后写入位置的方法与流程

文档序号:15736758发布日期:2018-10-23 21:36阅读:300来源:国知局

本发明涉及Flash存储器技术领域,更具体地说,涉及一种确定Flash存储器的存储区中最后写入位置的方法。



背景技术:

Flash存储器是一种常用的大容量数据存储芯片,内部空间以扇区为存储单位,以字节为写入单位。其中,数据擦除不能单字节来进行,擦写次数有限,过于频繁的擦写会造成其使用寿命降低。此外,Flash中无数据索引结构。常规的Flash存储器写入方法是写满一个扇区再擦除重写,按这种方式,长期频繁存储大量数据对存储器会造成较大磨损,减少使用寿命。

现有技术中,还可能采用一个专门的扇区空间维护一个索引数据结构,但是这样不但会消耗有限的空间资源,而且这个扇区也同样需要经受频繁的擦写,造成局部磨损严重。

因此,在存储区域内有效地保存一定量的数据记录,而同时兼顾Flash存储器使用寿命、数据存取方便的考量,是本领域技术人员关注的目标。



技术实现要素:

本发明的目的之一在于提供一种确定存储区中最后写入位置的方法,其能够促进对Flash存储器的高效读写,有助于克服现有技术中的缺陷。

为实现上述目的,本发明提供一种技术方案如下:

一种确定Flash存储器的存储区中最后写入位置的方法,包括:a)、设置存储区的第一位置和第二位置,将存储区规划为多个搜索区段;b)、分别采用不同遍历方法依次检查各搜索区段内至少一个位置的可写入状态,以确定最后写入位置。

优选地,遍历方法包括:顺序遍历;倒序遍历;以及,二分法遍历。

优选地,步骤b)具体包括:b1)、检查第一位置的可写入状态,若第一位置为可写入状态,则在第一搜索区段查找最后写入位置;其中,第一搜索区段位于存储区的起始位置与第一位置之间;b2)、检查第二位置的可写入状态,若第二位置为不可写入状态,则在第二搜索区段查找最后写入位置;其中,第二搜索区段位于存储区的第二位置与终止位置之间;以及b3)、在第三搜索区段查找最后写入位置;其中,第三搜索区段位于第一位置与第二位置之间。

本发明另一目的在于提供一种高效地写入数据的方法。

为实现上述目的,本发明提供一种技术方案如下:

一种在Flash存储器写入新数据的方法,包括:步骤一、在Flash存储器中规划多个存储区;步骤二、将多个存储区其中之一确定为当前操作的存储区;步骤三、利用如上所述确定存储区中最后写入位置的方法在当前操作的存储区中查找最后写入位置;以及步骤四、基于确定当前操作的存储区的最后写入位置,在不同的存储区之间循环地写入新数据。

本发明又一目的在于提供一种在存储区中高效地查找数据项的方法,其能够促进降低对Flash存储器的磨损。

为实现上述目的,本发明还提供一种技术方案如下:

一种在Flash存储器的存储区中查找数据项的方法,包括:a)、设置存储区的第一位置和第二位置,将存储区规划为多个搜索区段;b)、分别采用不同遍历方法依次在各搜索区段内进行查找,以确定数据项是否存储于该搜索区段内。

本发明还公开一种从Flash存储器的存储区中删除数据的方法,包括:a)、根据如上所述确定存储区中最后写入位置的方法确定存储区的最后写入位置;b)、自最后写入位置起,基于存储区中各存储位置对应的存储先后顺序关系在存储区中查找待删除数据中的第一待删除数据项,以确定第一删除位置;其中,第一待删除数据项为待删除数据所包含的至少一个待删除数据项中的任一个;以及c)、基于至少一个待删除数据项的条目,为在存储先后顺序关系上处于第一删除位置之前和/或之后的各待删除数据项分别添加删除标记。

本发明各实施例分别提供在存储器/存储区中写入数据的方法、查找数据项的方法、以及删除数据的方法,这些方法不仅能够促进对数据的高效存储、定位,或查找、修改及删除操作,还能够有助于延长Flash存储器使用寿命。

附图说明

图1示出根据本发明一实施例的利用二分法在当前操作的存储区中查找最后写入位置的流程示意图。

图2示出根据本发明一实施例的在Flash存储器的存储区中查找数据项的方法的流程示意图。

图3示出根据本发明一实施例的Flash存储器的存储区中的存储位置示意图。

具体实施方式

在以下描述中提出具体细节,以便提供对本发明的透彻理解。然而,本领域的技术人员将清楚地知道,即使没有这些具体细节也可实施本发明的实施例。在本发明中,可进行具体的数字引用,例如“第一元件”、“第二装置”等。但是,具体数字引用不应当被理解为必须服从于其字面顺序,而是应被理解为“第一元件”与“第二元件”不同。

本发明所提出的具体细节只是示范性的,具体细节可以变化,但仍然落入本发明的精神和范围之内。术语“耦合”定义为表示直接连接到组件或者经由另一个组件而间接连接到组件。

以下通过参照附图来描述适于实现本发明的方法、系统和装置的优选实施例。虽然各实施例是针对元件的单个组合来描述,但是应理解,本发明包括所公开元件的所有可能组合。因此,如果一个实施例包括元件A、B和C,而第二实施例包括元件B和D,则本发明也应被认为包括A、B、C或D的其他剩余组合,即使没有明确公开。

需要说明的是,根据本发明各实施例,存储器可以包括一个或多个存储区,各存储区可以具有相同或不同的存储容量,可以在其中任一个存储区上应用本发明所提供的写入数据的方法。本发明中的术语“位置”能够理解为物理位置,映射位置,以及,逻辑位置。

本发明第一实施例提供一种确定Flash存储器的存储区中最后写入位置的方法,其包括如下各步骤。

步骤一、设置存储区的第一位置和第二位置,进而将存储器规划为多个搜索区段。

步骤二、分别采用不同遍历方法依次检查各搜索区段内至少一个位置的可写入状态,以确定最后写入位置。

作为示例,在步骤一,将存储区的起始位置与第一位置之间确定为第一搜索区段,将存储区的第二位置与终止位置之间确定为第二搜索区段,将第一位置与第二位置之间确定为第三搜索区段。作为一种更优选的实施例,第一位置位于存储区的25%处(起始位置与第一位置之间的存储容量占全部存储容量的25%),第二位置位于存储区的75%处(起始位置与第二位置之间的存储容量占全部存储容量的75%)。

作为示例,在步骤二的第一阶段,首先检查第一位置的可写入状态,若其为可写入状态(最后写入位置位于第一位置之前),这意味着第一搜索区段未写满,则在第一搜索区段查找最后写入位置;若其为不可写入状态,这意味着第一搜索区段已写满,则进行第二阶段的检查。

在步骤二的第二阶段,检查第二位置的可写入状态,若第二位置为不可写入状态(第二位置之前已写满,最后写入位置应在第二位置之后),这表示第二搜索区段可能未写满,则在第二搜索区段查找最后写入位置;若第二位置为可写入状态(最后写入位置在第二位置之前),这表示第三搜索区段可能未写满,则进行第三阶段的检查。

在步骤二的第三阶段,在第三搜索区段内查找最后写入位置。

作为对上述第一实施例的一种改进,在上述步骤二中,在第一、第二搜索区段内采用顺序遍历方法或倒序遍历方法来查找最后位置,而在第三搜索区段内采用二分法遍历方法来查找。这种二分法与顺序(倒序)遍历相结合的查找方法能够避免二分法的局限性,同时促进对Flash存储器(及其中的存储区)的高效读写。

本发明第二实施例提供一种在Flash存储器中写入数据的方法,其包括如下各步骤。

步骤一、在Flash存储器中规划多个存储区,例如,第一、第二存储区。

步骤二、将多个存储区其中之一确定为当前操作的存储区。

具体地,在实施过程中,存储区可以包括标志1和标志2。标志1能够用来指示当前操作的存储区,标志2能够用来指明该存储区是否存满。可以默认第一存储区为当前操作的存储区,第二存储区作为备用的存储区。

如果第一存储区的标志1指示其为当前操作的存储区,而标志2指示其未存满,则数据需要写入第一存储区,第一存储区仍为当前操作的存储区;如果标志2指示第一存储区已存满,则数据需要写入第二存储区,应将第二存储区置为当前操作的存储区。类似地,若第二存储区的标志1指示其为当前操作的存储区,而标志2指示其未存满,则数据写入第二存储区(仍作为当前操作的存储区);若标志2指示第二存储区已存满,则数据应写入第一存储区(将第一存储区变更为当前操作的存储区)。在第一、第二存储区均已存满时,可选择擦除第一存储区,并将其重设为当前操作的存储区,以备写入新数据。

步骤三、利用上述第一实施例提供的确定最后写入位置的方法在当前操作的存储区中查找最后写入位置。

步骤四、基于确定当前操作的存储区的最后写入位置,在不同的存储区之间循环地写入新数据。

根据本发明另一改进实施例,在步骤三中利用二分法在当前操作的存储区中查找最后写入位置,可以按如以下多个子步骤来执行,如图1所示。

步骤S10、检查当前操作的存储区(在下文中,若非特别指出,存储区将理解为当前操作的存储区)中第一位置的可写入状态;若为可写入状态(例如,状态标记为空白、或可写入),则在存储区的起始位置与第一位置之间查找存储区的最后写入位置,进而前进至步骤S140(为简单起见,在附图中未示出)。

其中,取Flash存储器容量为8M作为一个示例,第一位置初始地设置于第一存储区段内,第一存储区段为该存储区的22.5%-27.5%之间的部分;例如,第一位置位于存储区的25%处。

因为Flash存储器的存储区中的数据是按循环的方式存入,若第一位置为可写入状态,则意味着存储区的最后写入位置位于存储区的起始位置与第一位置之间(以下将这一段存储区域标记为第一搜索区段),如图3所示。这时,在第一搜索区段中进行查找以获得存储区的最后写入位置。一旦获得最后写入位置,则可进入步骤四来写入新数据。

其中,在第一搜索区段中查找最后写入位置可以按如下具体方式来实现:在第一搜索区段中逐个位置地进行遍历,直到确定Flash存储器的最后写入位置。

步骤S11、检查存储区中第二位置的可写入状态;若为不可写入状态,则在存储区的第二位置与终止位置之间查找最后写入位置。

其中,第二位置初始地设置于第二存储区段内,取Flash存储器容量为8M作为示例,第二存储区段为存储区的72.5%-77.5%之间的部分;例如,第二位置位于存储区的75%处。

具体地,在步骤S10中若确定第一位置为不可写入状态,这表示,最后写入位置位于第一位置之后,这又包括两者情况,即:最后写入位置位于存储区的第二位置与终止位置之间(以下将这一段存储区域标记为第二搜索区段),或者,最后写入位置位于存储区的第一位置与第二位置之间。

在该步骤S11中,确定最后写入位置是否位于第二搜索区段内。具体地,因为Flash存储器中的数据是按循环的方式存入,若第二位置为不可写入状态,则表示最后写入位置位于第二搜索区段内。这时,可以例如通过遍历的方式在第二搜索区段查找到存储区的最后写入位置,随后,从紧邻于最后写入位置的下一个位置处开始写入新数据。相反,若第二位置为可写入状态,则表示最后写入位置位于第一位置与第二位置之间,这时,为最终确定最后写入位置,将进行以下步骤S12。

步骤S12、检查在第一位置与第二位置之间的第三位置是否为最后写入位置。

具体地,第三位置优选为第一位置与第二位置之间的中间位置。作为示例,将第一位置的序号与第二位置的序号求取平均值、或求取数学中间值,作为该平均值或中间值取整后,作为第三位置的序号。

在这里,取中间位置来加速对最后写入位置的查找,这种思想来源于数学中的二分法查找,其在查找效率上明显优于遍历查找方式。

在步骤S12中,若第三位置为最后写入位置,则可进入步骤四来写入新数据;否则,进行以下步骤S130-S131(S132)。

步骤S130、确定第三位置是否为可写入状态。

该步骤承接于在步骤S12中确定第三位置不是最后写入位置,这时,根据数学二分法查找的思想,将启动迭代过程。以下步骤S131(S132)重置迭代所用的参数,S131与S132为二选一执行的步骤。

具体地,若第三位置为可写入状态,这表示最后写入位置位于第三搜索区段内(第一位置与第三位置之间),如图3所示,这时选择执行步骤S131,以第三位置作为第二位置,以备在第三搜索区段内进行二分法查找。

相反,若第三位置为不可写入状态,这表示最后写入位置位于第四搜索区段内(第三位置与第四位置之间),如图3所示,这时选择执行步骤S132,以第三位置作为第一位置,以备在第四搜索区段内进行二分法查找。

在步骤S131(S132)之后,执行迭代步骤(可以执行任意多次):重复执行步骤S12、S130-S131(S132),直到确定第三位置为最后写入位置。迭代步骤在附图1中仅以折返箭头(指向步骤S12入口处)示出。

根据本发明另一改进实施例,在步骤四中,在当前操作的存储区的最后写入位置的下一个位置起写入新数据。

具体来说,若最后写入位置不是当前操作的存储区的终止位置,则下一个位置为在当前操作的存储区中在位置上紧邻于最后写入位置的下一个位置;若最后写入位置为当前操作的存储区的终止位置,下一个位置为:空白的存储区的第一个位置;或,另一个存储区的最后写入位置的下一个位置;或,另一个存储区的第一个位置。

此外,在步骤四中,在写入新数据时,若新数据的写入部分抵达当前操作的存储区的终止位置,则将新数据的尚未写入部分自以下位置处写入:空白的存储区的第一个位置;或,另一个存储区的最后写入位置的下一个位置;或,另一个存储区的第一个位置。

可以理解,为实现Flash存储器的循环存储模式,若新数据的写入部分抵达当前操作的存储区(例如第一存储区)的终止位置而新数据尚未写完,则将新数据的尚未写入部分自另一存储区(第二存储区)的起始位置处写入。

找到适合写入位置(最后写入位置的下一个位置)后,除了新数据之外,可一并写入校验位。写完数据后,再读出数据与原数据进行比较;如果一致,表示写入成功。成功后,在数据记录后边置上写入成功标志。而如果不一致,表示写入失败,这时,可以在当前写入位置的下一个位置处重新写入数据。

根据上述第一实施例,通过实现对数据的有序存储,能够降低对Flash存储器的读写频率,从而不仅能够方便地存取数据,还能够降低对Flash存储器的磨损。

本发明第三实施例提供一种在Flash存储器的存储区中查找一个特定的数据项的方法,其包括以下各步骤。

步骤一、设置存储区的第一位置与第二位置,将存储区规划为多个搜索区段。

步骤二、分别采用不同遍历方法依次在各搜索区段内进行查找,以确定待查找数据项是否存储于该搜索区段内。其中,遍历方法包括顺序遍历,倒序遍历以及二分法遍历。

作为上述第三实施例的一种改进实现方式,以下提供一种更具体的实施步骤。如图2所示。

步骤S20、在存储区的起始位置与第一位置之间查找该特定数据项。

具体地,若在第一搜索区段(如图3所示)中找到该数据项,则结束方法。在查找过程中,可以采用遍历的方法来进行。

步骤S21、在存储区的第二位置与终止位置之间查找该特定数据项。

具体地,若在第二搜索区段(如图3所示)中找到该数据项,则结束方法。此外,可以理解,步骤S20、S21可以按照相反的顺序来执行,或者,并行执行,均不影响本发明的技术效果,从而应落入本发明的保护范围。

步骤S22、检查在第一位置与第二位置之间的第三位置是否存储有数据项。

具体地,若发现第三位置存储了该特定数据项,查找结束。若否,则根据二分法查找的思想,将进行迭代查找,以加速整个查找过程。

优选地,第三位置为第一位置与第二位置之间的中间位置,中间位置的序号可按序号(第一位置、第二位置的序号)平均值或中间值取整的方式来求得。

步骤S230、分别确定数据项的存储标记与第一位置、第二位置及第三位置各自所存储的存储标记之间的先后关系。

如上所述,因为Flash存储器中的数据是按循环的方式存入,每个存储位置处存储的数据项中可以进一步包含一个存储标记,其能够表明该数据项存入Flash存储器的先后顺序关系、或存入的时间,或体现为一种存入完成标记。从而,通过将第一、第二存储位置所包含的存储标记分别与所查找的特定数据项的存储标记作对比,能够更快速地确定该特定数据项在Flash存储器内的具体位置。

根据步骤S230所确定的先后关系,选择以下步骤S231、S232其中之一来执行。

在该特定数据项的存储标记在第一位置所包含的存储标记之后、并在第三位置所包含的存储标记之前的情况下(以下记为第一关系),选择执行步骤S231:以第三位置作为第二位置。第一关系能够表明,按照各位置数据项存入的先后顺序关系,特定数据项位于第一位置与第三位置之间,这时,将在第三搜索区段(如图3所示)中执行二分法查找。

而在该特定数据项的存储标记在第二位置所包含的存储标记之前、并在第三位置所包含的存储标记之后的情况下(以下记为第二关系),选择执行步骤S232:以第三位置作为第二位置。第二关系表明,特定数据项位于第三位置与第二位置之间,这时,将在第四搜索区段(如图3所示)中执行二分法查找。

迭代步骤(图2中以指向步骤22入口处的折返箭头示出)中将重复执行步骤S22、S230-S231(S232),直到最终确定第三位置存储有待查找的特定数据项。

根据该第二实施例,能够在Flash存储器中快速定位或查找到特定数据项,还有助于降低对Flash存储器的读写频率,从而延长Flash存储器的寿命。

本发明第四实施例提供一种从Flash存储器的存储区中删除数据的方法(附图未示出),该方法包括以下各步骤。

步骤S40、确定存储区的最后写入位置。

其中,为确定最后写入位置,可以直接采用上述第一实施例中提供的方法。

步骤S41、自最后写入位置起,基于存储区中各存储位置对应的存储先后顺序关系在存储区中查找待删除数据中的第一待删除数据项,以确定第一删除位置。

其中,第一待删除数据项为待删除数据所包含的至少一个待删除数据项中的任一个。

步骤S42、基于至少一个待删除数据项的条目,为在存储先后顺序关系上处于第一删除位置先和/或后的各待删除数据项分别添加删除标记。

根据第四实施例,由于存储区中的数据项存入具有存储先后顺序关系,基于待删除数据的条目,从第一删除位置起在该顺序上向前、或向后(或同时地向前向后),能够快速地确定其他待删除数据项的位置,随后进行删除动作(为各待删除数据项分别添加删除标记)。

在后续的步骤中,以Flash存储器中的扇区为单位,在扇区中的各数据项都被添加删除标记后,能够对整个扇区执行擦除操作。

上述说明仅针对于本发明的优选实施例,并不在于限制本发明的保护范围。本领域技术人员可能作出各种变形设计,而不脱离本发明的思想及附随的权利要求。

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