CN101206617B - 闪存的数据存储方法 - Google Patents
闪存的数据存储方法 Download PDFInfo
- Publication number
- CN101206617B CN101206617B CN2006101678671A CN200610167867A CN101206617B CN 101206617 B CN101206617 B CN 101206617B CN 2006101678671 A CN2006101678671 A CN 2006101678671A CN 200610167867 A CN200610167867 A CN 200610167867A CN 101206617 B CN101206617 B CN 101206617B
- Authority
- CN
- China
- Prior art keywords
- data
- swap block
- write
- block
- swap
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
本发明公开了一种闪存的数据存储方法,该方法包括以下步骤:设置至少一个交换块,并为每个交换块设置相应的结构体;将数据写入交换块,并对该交换块的结构体赋值;根据所述至少一个交换块的结构体的值进行数据搬迁;将每个结构体的值复位。通过本发明的方法,在将数据写入交换块之后,并不立即进行数据搬迁,而是待本次写入操作的所有数据均已写入适当交换块之后再根据交换块的结构体统一执行数据搬迁。因此,本发明的方法降低了数据搬迁频率,从而提高了数据存储速度。同时,由于减少了闪存的擦写次数,使得闪存的使用寿命得以延长。
Description
技术领域
本发明涉及一种数据存储方法,尤其涉及一种闪存的数据存储方法。
背景技术
目前闪存技术高速发展,但其基本读写方式却未改变,即,以页为单位写入,以块为单位擦除,而且必须经擦除之后才能写入数据。因为闪存的这个特性,一般是以块为单位进行闪存的数据存储。而操作系统的读写一般是以扇区为单位进行的,因此,操作系统可能只对块的一小部分写入数据,而剩下部分的数据写入需要由底层软件来执行。这就需要闪存内部具有至少一个交换块来进行数据交换。
基于上述提到的闪存的特性,如果操作系统写入多个较小数据且其地址不连续,会导致闪存产生频繁的数据搬迁(即,将数据复制到交换块中的动作)。
此外,对于具有链式结构的文件系统,文件的链与其具体内容并非放在同一个位置,而是按照一定的协议放在磁盘的不同位置。于是在操作系统对一个文件执行复制或写入时,需要在不同位置进行操作才能完成。
例如,假设操作系统有两个文件需要写入,则对于每个文件,操作系统都会写入以下三个区域:链表区、目录区和数据区。以常用的FAT文件系统为例,三个区域在磁盘中的位置关系如图1所示。操作系统一般按照以下顺序写入:数据区、目录区、链表区。当操作系统写完一个文件以后,再重复上述顺序写下一个文件。
当操作系统要写入数据时,底层软件取出一个交换块并将数据写入此交换块,然后,将待写入数据的块的剩余区域从该块复制到交换块中,之后,跳转到操作系统要求的地址进行下一次写入。下面我们 将举例说明传统的闪存数据存储操作。
假设一片闪存具有10个块,每个块有256个扇区。则我们可以建立如图2所示的对照表。其中,逻辑第0块对应物理第0块,逻辑第1块对应物理第1块,依此类推。
传统的闪存数据存储方法只使用一个交换块,例如使用第9块作为交换块。当操作系统向逻辑第3块写数据时,底层软件将数据写到第9块,之后,将第3块中的原有数据搬到第9块并在对照表上交换两个块,然后将第3块作为交换块。此时对照表变为如图3所示,物理第9块变为逻辑第3块,而物理第3块则成为交换块。
现在,假设操作系统要写入两个文件,其中链表区在逻辑第0块,目录区在逻辑第1块,数据区在逻辑第2至6块。作为一个示例,假设操作系统将完成以下任务:
(1)写入第一个文件的数据,写入逻辑第2块,写100个扇区。
(2)写入第一个文件的目录,写入逻辑第1块,写1个扇区。
(3)写入第一个文件的链表,写入逻辑第0块,写10个扇区。
(4)写入第二个文件的数据,因为第一个文件的数据没有占满一个块,因此仍写入逻辑第2块,写100个扇区。
(5)写入第二个文件的目录,写入逻辑第1块,写1个扇区。
(6)写入第二个文件的链表,写入逻辑第0块,写10个扇区。
根据传统的闪存数据储存方法,上述写入两个文件的操作按照如下步骤进行:
(a)操作系统写第一个文件,首先写逻辑第2块。底层软件将数据写入交换块(物理第9块)。
(b)操作系统写逻辑第1块。底层软件先把原逻辑第2块的原有数据搬迁到交换块,然后在对照表上互换两个块。因此对照表变为如图4a所示。然后,底层软件将接收的数据写入新的交换块,即物理第2块。
(c)操作系统写逻辑第0块。底层软件先把原逻辑第1块的原有数据搬迁到交换块,然后在对照表上互换两个块。因此对照表变为如图4b所示。然后,底层软件将接收的数据写入新的交换块,即物理第 1块。
(d)操作系统开始写第二个文件,首先写逻辑第2块,底层软件先将原逻辑第0块的原有数据搬迁到交换块,然后在对照表上互换两个块。因此对照表变为如图4c所示。然后,底层软件将接收的数据写入新的交换块,即物理第0块。
(e)操作系统写逻辑第1块。底层软件先把原逻辑第2块的原有数据搬迁到交换块,然后在对照表上互换两个块。因此对照表变为如图4d所示。然后,底层软件将接收的数据写入新的交换块,即物理第9块。
(f)操作系统写逻辑第0块。底层软件先把原逻辑第1块的原有数据搬迁到交换块,然后在对照表上互换两个块。因此对照表变为如图4e所示。然后,底层软件将接收的数据写入新的交换块,即物理第2块。
(g)操作系统完成文件写入。这时,底层软件需要对剩余的数据执行搬迁,即把逻辑第0块的剩余数据搬到交换块,并互换两个块在对照表的位置。这时,对照表变为如图4f所示。从而完成了写入两个文件的操作。
从以上所举的传统的闪存数据存储的示例可以看出,在对闪存进行较小数据的写入操作时,需要频繁地操作数据区和FAT区,造成了大量无谓的数据拷贝操作,从而增加了闪存的擦写次数,既影响速度,也降低了闪存使用寿命。
发明内容
鉴于现有的闪存数据存储方法的上述缺陷,本发明的目的在于通过算法的优化,减少因为操作系统的读写不规律而导致的闪存性能下降和使用寿命的缩短。
为实现上述目的,本发明提供了一种闪存的数据存储方法,所述方法包括:(1)为所述闪存设置至少一个交换块,并为每个交换块设置相应的结构体;(2)将数据写入交换块,并对该交换块的结构体赋值;(3)根据所述交换块的结构体的值进行数据搬迁;(4)将每个所述结构体的值复位。
优选地,当一次写入操作包含多个数据写入动作时,根据本发明的闪存数据存储方法中的写入数据并对结构体赋值的步骤包括:(2-1)将第一数据写入第一交换块,对所述第一交换块的结构体赋值;(2-2)检查每个具有已赋值结构体的交换块,根据其结构体的值判断应将所述多个数据中的另一数据写入新交换块还是写入一个具有已赋值结构体的交换块;(2-3)如果判断应将所述另一数据写入新交换块,则将所述另一数据写入新交换块,并对所述新交换块的结构体进行赋值,否则,将所述另一数据写入所述具有已赋值结构体的交换块,并对该交换块的结构体重新赋值;(2-4)重复步骤(2-1)至(2-3),直至完成所述多个数据写入动作。
根据本发明的方法,在将数据写入交换块之后,并不立即进行数据搬迁,而是继续进行下一个数据写入动作,待本次写入操作的所有数据均已写入适当交换块之后再根据交换块的结构体统一执行数据搬迁。而传统的做法是每次将数据写入交换块之后便立即进行数据搬迁。
因此,根据本发明的方法,能够通过为每个交换块所设置的结构体,记住交换块与待写入数据的块的对应关系。同样,由于结构体,使得能够在进行数据写入之前,迅速判断是否需要进行数据搬迁和重新取得交换块。在写入的多个数据地址不连续的情况下,通过本发明的方法能够减少大量的数据搬迁,从而节省了处理时间,提高了速度。同时,由于减少了闪存的擦写次数,使得闪存的使用寿命得以延长。
附图说明
图1是示出了链式结构文件系统在磁盘中的存储方式的示意图;
图2是示出了一个示例性闪存结构的对照表;
图3是根据现有技术、对具有图2所示结构的闪存进行写入一个数据操作后的对照表;
图4a至图4f是根据现有技术、对具有图2所示结构的闪存进行写入两个文件的操作过程的对照表;
图5是示出了根据本发明的闪存的数据存储方法的流程图;
图6是示出了根据本发明的执行多个数据写入动作的流程图;
图7是示出了根据本发明一个实施例写入两个文件之后的对照表。
具体实施方式
下面结合附图,对本发明的方法进行详细地描述。
参照图5,其示出了根据本发明的闪存的数据存储方法的处理流程。首先,为闪存设置至少一个交换块,每个交换块具有相应的结构体来记录其信息(步骤501)。根据本发明的方法,当操作系统写数据时,首先将数据写入交换块,并对该交换块所对应的结构体赋值(步骤502)。然后,根据交换块的结构体的值进行数据搬迁(步骤503),并将结构体的值复位。
当一次写入操作包括多个数据写入动作时,根据本发明的方法能够显著提高数据存储速度。在这种情况下,上述的步骤502可以细分为以下子步骤:首先,将一个数据写入一个交换块,并对该交换块的结构体赋值(步骤5021)。在写入下一数据之前,首先检查每个具有已赋值结构体的交换块(即,已经写入了数据的交换块),根据该交换块的结构体值判断是将新数据写入新的交换块还是写入该之前已写入数据的交换块(步骤5022),如果是前者,则将数据写入新的交换块并对该交换块的结构体进行赋值(步骤5023);如果是后者,则将数据写入已写入了数据的交换块,并对该交换块的结构体重新赋值(步骤5024)。如此重复以上操作,直至所有数据均已写入。
作为一个实施例,交换块的结构体具有以下数据结构:
Struct{
OldBlockAddress;
NewBlockAddress;
ActSector;
LogicAddress;
}
其中,OldBlockAddress表示待写入数据的块的物理地址, NewBlockAddress表示交换块的物理地址,ActSector表示当前块中哪个扇区正在被操作系统访问,如果操作系统正在访问其他块,则此变量表示上次系统访问过的扇区的下一个扇区。LogicAddress表示ActSector所对应的逻辑扇区地址。
仍以上面描述的情况为例,即,对具有10个块、每个块具有256个扇区的闪存进行数据存储操作,该闪存的文件对照表如图2所示。假设操作系统要写入两个文件,其中链表区在逻辑第0块,目录区在逻辑第1块,数据区在逻辑第2至6块。操作系统具体将完成的任务在上面已经详细描述,此处不再赘述。
与现有闪存的数据存储方式不同,根据本发明的一个实施例的闪存数据存储方法采用三个块作为交换块,例如,将逻辑第7、8和9块分别作为交换块0、1和2。
根据本发明的这一实施例,写入两个文件的操作按照如下步骤进行:
(a’)操作系统写逻辑第2块。底层软件把数据写入交换块0(物理第7块),并如下设置交换块0的结构体的值:
Swap0.OldBlockAddress=2;
Swap0.NewBlockAddress=7;
Swap0.ActSector=100;
Swap0.LogicAddress=612;//逻辑0块的扇区数+逻辑1块的扇区数+ActSector。
(b’)操作系统写逻辑第1块。底层软件首先检查交换块0的结构体的值,通过LogicAddress表示的已写入了数据的扇区逻辑地址计算出其物理地址,并将该扇区物理地址与本次的写入命令中的扇区物理地址相比较。底层软件发现上述两个扇区地址不连续,从而判断出本次的数据将写入不同于之前写入动作所操作的块中。底层软件重新取出一个交换块1(物理第8块),将数据写入交换块1并如下设置对应的结构体的值:
Swap1.OldBlockAddress=1;
Swap1.NewBlockAddress=8;
Swap1.ActSector=1;
Swap1.LogicAddress=257;//逻辑0块的扇区数+ActSector。
(c’)操作系统写逻辑第0块。与步骤(b’)类似,底层软件首先检查交换块0的结构体。底层软件发现待写入数据的扇区地址与交换块0的已写入了数据的扇区地址不连续,因而检查交换块1的结构体。同样,底层软件发现待写入数据的扇区地址与交换块1的已写入了数据的扇区地址也不连续,因此判断应将数据写入新的交换块。底层软件重新取出一个交换块2(物理第9块),并将数据写入交换块2并如下设置对应的结构体值:
Swap2.OldBlockAddress=0;
Swap2.NewBlockAddress=9;
Swap2.ActSector=10;
Swap2.LogicAddress=10;//ActSector地址。
(d’)操作系统开始写第二个文件,重新写逻辑第2块。类似地,底层软件检查交换块0的结构体,发现待写入数据的扇区地址与交换块0的结构体所记录的已写入了数据的扇区地址连续。这时,底层软件不再重新取得交换块,而是直接把数据写入交换块0,并将对应的结构体的值如下修改:
Swap0.OldBlockAddress=2;
Swap0.NewBlockAddress=7;
Swap0.ActSector=200;
Swap0.LogicAddress=712;//逻辑0块的扇区数+逻辑第1块的扇区数+ActSector。
(e’)操作系统写逻辑第1块。同样,底层软件发现待写入数据的扇区地址与交换块1的结构体所记录的已写入了数据的扇区地址连续,于是直接把数据写入交换块1,并将对应的结构体的值如下修改:
Swap1.OldBlockAddress=1;
Swap1.NewBlockAddress=8;
Swap1.ActSector=2;
Swap1.LogicAddress=258;//逻辑第0块的扇区数+ActSector。
(f’)操作系统写逻辑第0块。底层软件发现待写入数据的扇区地址与交换块2的结构体所记录的已写入了数据的扇区地址连续,因而直接把数据写入交换块2,并修改对应的结构体的值如下:
Swap2.OldBlockAddress=0;
Swap2.NewBlockAddress=9;
Swap2.ActSector=20;
Swap2.LogicAddress=20;//ActSector。
(g’)操作系统完成两个文件的写入。底层软件通过交换块0、1和2的结构体值,进行剩余数据的搬迁。具体而言,对于交换块0,其结构体中OldBlockAddress=2且NewBlockAddress=7,因此可知针对该交换块的数据搬迁的源块是逻辑第2块,目标块是逻辑第7块(即交换块0),也就是说,将逻辑第2块原有数据搬迁到逻辑第7块。类似地,底层软件根据交换块1和2的结构体值,将逻辑第1块的原有数据搬迁到逻辑第8块(交换块1),将逻辑第0块的原有数据搬迁到逻辑第9块(交换块2)。然后,在对照表上互换对应的块,并将各交换块的结构体的值复位。此时,完成了写入两个文件的操作的对照表如图7所示。
以上描述的是本发明的优选实施方式,本领域的技术人员可以根据本发明的教导,进行各种修改、增加和替换。
Claims (3)
1.一种闪存的数据存储方法,其特征在于,所述方法包括:
(1)为所述闪存设置至少三个交换块,并为每个交换块设置相应的结构体,其中,所述每个交换块的结构体记录相应的交换块与待写入数据的块的对应关系,其中,所述结构体包括表示待写入数据的块的物理地址的数据位、表示交换块的物理地址的数据位、表示当前块中哪个扇区正在被操作系统访问的数据位,以及表示正在被操作系统访问的扇区所对应的逻辑扇区地址的数据位,其中,所述待写入数据的块的物理地址代表源块地址,所述交换块的物理地址代表目标块地址;
(2)将数据写入交换块,并对所写入数据的交换块的结构体赋值;
(3)基于所述待写入数据的块的物理地址代表的所述源块地址以及所述交换块的物理地址代表的所述目标块地址,将所述源块地址中的原有数据复制到所述目标块地址中;
(4)将每个所述结构体的值复位。
2.如权利要求1所述的闪存的数据存储方法,其特征在于,当一次写入操作包含多个数据写入动作时,所述步骤(2)包括:
(2-1)将第一数据写入第一交换块,对所述第一交换块的结构体赋值;
(2-2)检查每个具有已赋值结构体的交换块,根据其结构体的值判断应将所述多个数据中的另一数据写入新交换块还是写入一个具有已赋值结构体的交换块;
(2-3)如果判断应将所述另一数据写入新交换块,则将所述另一数据写入新交换块,并对所述新交换块的结构体进行赋值,否则,将所述另一数据写入所述具有已赋值结构体的交换块,并对该交换块的结构体重新赋值;
(2-4)重复步骤(2-1)至(2-3),直至完成所述多个数据写入动作。
3.如权利要求2所述的闪存的数据存储方法,其特征在于,所述判断步骤(2-2)进一步包括:
(2-2-1)对一个具有已赋值结构体的交换块进行检查,通过其结构体中的表示所对应的逻辑扇区地址的数据位的值计算出已写入了数据的扇区物理地址;
(2-2-2)判断待写入的所述另一数据的扇区地址与所述已写入了数据的扇区物理地址是否连续;
(2-2-3)如果连续,则所述另一数据应写入所述具有已赋值结构体的交换块,否则,重复步骤(2-2-1)至(2-2-3),直至找到所述另一数据应写入的、具有已赋值结构体的交换块,或者完成对所有具有已赋值结构体的交换块的检查。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2006101678671A CN101206617B (zh) | 2006-12-20 | 2006-12-20 | 闪存的数据存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2006101678671A CN101206617B (zh) | 2006-12-20 | 2006-12-20 | 闪存的数据存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101206617A CN101206617A (zh) | 2008-06-25 |
CN101206617B true CN101206617B (zh) | 2011-11-09 |
Family
ID=39566842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006101678671A Active CN101206617B (zh) | 2006-12-20 | 2006-12-20 | 闪存的数据存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101206617B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324899B (zh) * | 2008-08-05 | 2010-06-02 | 北京海尔集成电路设计有限公司 | 一种快速写nand型flash的方法 |
CN102520879B (zh) * | 2011-11-30 | 2015-07-08 | 广东威创视讯科技股份有限公司 | 基于优先级的文件信息存储方法、装置及系统 |
CN104461754B (zh) * | 2014-12-10 | 2018-06-19 | 福州瑞芯微电子股份有限公司 | 一种监控eMMC的方法和装置 |
-
2006
- 2006-12-20 CN CN2006101678671A patent/CN101206617B/zh active Active
Non-Patent Citations (1)
Title |
---|
JP特开2003-316659A 2003.11.07 |
Also Published As
Publication number | Publication date |
---|---|
CN101206617A (zh) | 2008-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8250286B2 (en) | Block management method, and storage system and controller using the same | |
JP4773342B2 (ja) | 不揮発性記憶装置及びデータ書込み方法 | |
CN101923448B (zh) | 一种nand闪存的转换层读写方法 | |
CN101777026B (zh) | 一种存储管理方法、硬盘及存储系统 | |
KR101663667B1 (ko) | 플래시 메모리의 주소 매핑에 의한 데이터 관리 방법 및 장치 | |
US8417872B2 (en) | Write and merge methods in memory card systems for reducing the number of page copies | |
US20080120488A1 (en) | Apparatus and method of managing nonvolatile memory | |
TW202009713A (zh) | 基於人工智慧應用程式的資料儲存 | |
KR20100079654A (ko) | 실시간 시스템을 위한 로그 블록 연관성 분산 방법 및 이를수행하는 플래시 메모리 장치 | |
CN104298465A (zh) | 固态储存装置中的区块分组方法 | |
WO2011030290A1 (en) | Data management in solid-state storage devices and tiered storage systems | |
JP2008009874A (ja) | メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法 | |
CN107102819A (zh) | 向固态硬盘写入数据的方法及设备 | |
CN101556555B (zh) | 用于闪存的区块管理方法、其控制器与储存系统 | |
CN112035061A (zh) | 固态硬盘资源分配方法、装置和存储介质 | |
CN102096561A (zh) | 分层数据存储处理方法、装置以及存储设备 | |
CN101727403A (zh) | 数据存储系统、设备及方法 | |
CN109697170A (zh) | 存取闪存模块的方法及相关的闪存控制器与电子装置 | |
CN101206617B (zh) | 闪存的数据存储方法 | |
CN111338562A (zh) | 数据存储装置与数据处理方法 | |
CN114442946A (zh) | 物理块管理方法和固态硬盘 | |
CN101882111A (zh) | 用于闪存的数据存取方法、储存系统与控制器 | |
CN105260261B (zh) | 一种邮件恢复方法 | |
CN116126239B (zh) | 一种提高zns固态硬盘nor flash写入性能的方法 | |
CN106569908A (zh) | 资料备份系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |