[go: up one dir, main page]

CN101526920B - 写入数据的方法及装置 - Google Patents

写入数据的方法及装置 Download PDF

Info

Publication number
CN101526920B
CN101526920B CN2008102470519A CN200810247051A CN101526920B CN 101526920 B CN101526920 B CN 101526920B CN 2008102470519 A CN2008102470519 A CN 2008102470519A CN 200810247051 A CN200810247051 A CN 200810247051A CN 101526920 B CN101526920 B CN 101526920B
Authority
CN
China
Prior art keywords
storage block
data
block
random
empty storage
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.)
Expired - Fee Related
Application number
CN2008102470519A
Other languages
English (en)
Other versions
CN101526920A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Beijing Feitian Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Feitian Technologies Co Ltd filed Critical Beijing Feitian Technologies Co Ltd
Priority to CN2008102470519A priority Critical patent/CN101526920B/zh
Publication of CN101526920A publication Critical patent/CN101526920A/zh
Application granted granted Critical
Publication of CN101526920B publication Critical patent/CN101526920B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种写入数据方法及装置,涉及数据存储领域,解决了现有技术中存储器中某些存储块容易出现受损较严重的问题。在本发明中接收到写入新数据的指令;定位需要修改的数据所在的数据存储块;从所有的空存储块中随机选出一个空存储块;将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入所述随机选出的空存储块中;将定位到的数据存储块擦除为空存储块。本发明的实施例主要应用在向存储器执行各种操作时的场景。

Description

写入数据的方法及装置
技术领域
本发明涉及数据存储领域,尤其涉及一种写入数据的方法及装置。
背景技术
闪存属于存储器类型的一种,因为其具有可移动性、及保存在闪存上的数据即便是在断电情况下仍不会丢失的优点而得到迅速的发展。在闪存中,写Flash操作只能把Flash中数据从“1”变到“0”(Bit);擦除操作可以把“0”变为“1”,但是擦除操作只能针对整个“存储块”为单位进行的。例如:一个存储块的大小一般为256字节到1024字节。
用户在需要修改存储器中某个存储块的数据时,一般是在空存储块中写入需要修改的数据。在现有技术中,通常采用按照一定的顺序在一些空存储块中找出一个空存储块的方法,然后再将修改后的数据写入到该空存储块中并擦除修改前的数据存储块里的数据。但是每一个存储块可以被写入和擦除的次数都是有限的,特别是当用户频繁的修改某些数据或者当空存储块个数不多时,很容易出现对序号排在顺序较前的空存储块频繁地执行写入或者擦除操作的情况,久而久之就会使这些空存储块的受损程度增加,使用寿命降低,甚至可能因此无法再次使用该存储块,导致整个存储器的失效。
发明内容
本发明的实施例提供一种写入数据的方法及装置。以便提高该存储器中存储块能够使用的次数。
为达到上述目的,本发明的实施例采用如下技术方案:
一种向Flash存储器写入数据的方法,包括:
接收到写入新数据的指令;
定位需要修改的数据所在的数据存储块;
从所有的空存储块中随机选出一个空存储块;判断所述随机选出的空数据存储块是否为有记录的空存储块,其中,所述有记录的空存储块为空数据区的所有字节不都是0xFF的空存储块;
如果是,则将所述有记录的空存储块擦除为空存储块,然后将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入擦除为空存储块的所述有记录的空存储块中。
如果否,则直接将所述需要修改的数据与新数据结合生成更新数据,将所述更新数据写入所述随机选出的空存储块中;
将定位到的数据存储块擦除为空存储块。
一种向Flash存储器写入数据的装置,包括:
接收模块,用于接收写入新数据的指令;
定位模块,用于定位需要修改的数据所在的数据存储块;
选出模块,用于从所有的空存储块中随机选出一个空存储块;
第一判断模块,用于判断所述随机选出的空数据存储块是否为有记录的空存储块,其中,所述有记录的空存储块为空数据区的所有字节不都是0xFF的空存储块;
第一清除模块,用于当第一判断模块判断结果为是时,将所述有记录的空存储块擦除为空存储块;
写入模块,用于将所述需要修改的数据与新数据结合生成更新数据,在第一判断模块的判断结果为否时,将所述更新数据直接写入所述随机选出的空存储块中或在第一判断模块的判断结果为是时,将所述更新数据写入由第一清除模块擦除为空的存储块;
擦除模块,用于将定位到的数据存储块擦除为空存储块。
本发明提供的写入数据的方法及装置具有如下有点或有益效果:通过采用在空存储块中随机选择空存储块的技术方案,解决了现有技术中因为是按顺序进行选择空存储块所造成的容易出现对序号排在顺序较前的空存储块频繁地执行写入或者擦除操作的技术问题,进而取得了平衡存储器中各个存储块受损程度,增加存储块使用次数的有益效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1写入数据的方法的流程图;
图2为本发明实施例2写入数据的装置的框图;
图3为本发明实施例3写入数据的方法的流程图;
图4为本发明实施例4写入数据的方法的框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
本实施例公开一种写入数据的方法,如图1所示,该方法包括如下步骤:
101,接收到上层(如计算机操作系统)发来的向存储块中写入新数据的指令。
102,在存储器的所有数据存储块中查找出需要修改的数据所在的数据存储块。
103,在存储器所有的空存储块中随机的选出一个空存储块,并将该空存储块作为选出的空存储块。
104,将数据中需要修改部分进行修改,并将修改后的新数据与数据相结合成为更新数据,并将该更新数据写入上述选出的空存储块中。
105,将101步骤中定位到的数据存储块里的数据擦除,使该数据存储块成为一个空存储块。
本实施例提供的写入数据的方法,通过采用将要写入的数据写入在随机选出的空存储块中的技术方案,取得了可实现均匀的对各个存储块执行写入操作的有益效果。进一步的,又因为每个存储块被执行的写入操作的次数可是均匀的数值,所以克服了某些个别的存储块因为被执行的写入操作的次数过多,导致的受损程度较严重,甚至无法再次使用的技术问题,同时也提高了存储块可以使用的次数。
实施例2
本实施例公开一种写入数据的装置,如图2所示,该装置包括:接收模块21,定位模块22,选出模块23,写入模块24,擦除模块25。
接收模块21用于接收写入新数据的指令;定位模块22用于定位需要修改的数据所在的数据存储块;选出模块23用于从所有的空存储块中随机选出一个空存储块;写入模块24用于将所述数据与新数据结合后为更新数据,并将所述更新数据写入所述随机选出的空存储块中;擦除模块25用于将定位到的数据存储块擦除为空存储块。
本实施例提供的写入数据的装置便于写入数据的方法的实现,同时也可提高例如:闪存等,存储块容易受损的存储器的使用寿命。
实施例3
本实施例结合对存储块中的数据进行修改时的场景,具体描述写入数据的方法,如图3所示,该方法包括如下步骤:
为了阐述方便,假设在本实施例中闪存存储区的物理地址为从0x0000000到0x00007800,设每个存储块为0x100个字节,则共有0x78个存储块。相应地,各存储块的物理块号为0x00到0x77。在每个存储块的首字节用来标记该存储块逻辑块号,文件可以看做是多个存储块的集合并且文件中的存储块是根据各个存储块的逻辑块号联结起来的。
根据存储块逻辑块号的不同,在本实施例中存储块分为了两种类型:
空存储块,指逻辑块号是0xFF的存储块。空数据区指空存储块中首字节(即逻辑块号)以外的字节所组成的区域,则如果空数据区的所有字节都是0xFF,该空存储块随时可以写入数据;否则,该空存储块为不能直接写入数据的空存储块,需对该空存储块进行擦除操作,即使该空存储块所有字节变为0xFF,则空存储块就成为随时可以写入数据的空存储块。特别地,把不能直接写入数据的空存储块称为“有记录的空存储块”。
数据存储块,指逻辑块号在0x01到0x78范围内的存储块。数据区数据指数据存储块中首字节(即逻辑块号)以外的字节所存储的数据。数据区数据被认为是有效的文件数据。
301,在存储器通电后,统计存储器中空存储块的总数,并生成一个不大于该总数的随机数。
在本实施例中具体为:在内存开辟一个变量N=0,设置指针P指向闪存存储区物理首地址,即P=0x00000000,指针P从0x00000000开始,到0x00007800结束,P的步长是0x100,即P=P+0x100,则P总是指向存储块逻辑块号。判断P所指向的存储块逻辑块号是否为0xFF。如果是0xFF,使N=N+1,当P=0x00007800时,N的值就是空存储块的总数。根据得到的空存储块的总数N生成一个随机数M。随机数的M的范围是1<=M<=N。M可以是通过相关的一个函数f(M)产生的,也可以单纯的选出1<=M<=N之间的整数。这两种方法都可以用于生成本实施例中的随机数。
302,判断空存储块的总数是否与生成的随机数相同,如果空存储快的总数与生成的随机数相同,则执行步骤303;如果空存储块的总数与生成的随机数不同,则执行步骤309。
在本实施例中具体为:判断M是否等于N,如果M等于N则执行步骤303;如果M不等于N则执行步骤309。
当存储器中空存储块的个数很少时,根据空存储块总数生成的随机数,与空存储块总数相等的可能性就会变大。在本实施例中,利用该可能性,通过采用判断空存储块的总数是否与随机数相等的方案,取得可了解到空存储块目前总数状况的技术效果。而且在本实施例的此过程中,计算机生成的随机数就相当于用户设置的一个预设数值,该预设数值相当于一个门限,可了解到当前空存储块总数是否处于很少的状况,以便采取相应的措施。
303,统计存储器中数据存储块的总数并随机生成一个不大于该数据存储块总数的随机数;同时根据301步骤中统计出的空存储块的总数,随机生成一个不大于该空存储块总数的随机数。
在本实施例中具体为:申请两个内存变量A和B。用A记录在存储器中查找到的数据存储块的总数,用B记录在存储器中查找到的空存储块的总数(在本实施例中使B=N既可),并根据A的值生成一个随机数a,a的范围是1<=a<=A;根据B的值生成一个随机数b,b的范围是1<=b<=B。
304,根据数据存储块总数生成的随机数在数据存储块中选出一个数据存储块;同时根据空存储块总数生成的随机数在空存储块中选出一个目标空存储块。
在本实施例中具体为:在内存开辟一个局部变量N4=0,设置指针T指向闪存存储区物理首地址,即T=0x00000000,指针T从0x00000000开始,到0x00007800结束,指针T的步长是0x100,即T=T+0x100,则指针T总是指向存储块逻辑块号。判断指针T当前所指向的存储块逻辑块号是否在0x01至0x78范围内。如果是,则N4=N4+1。当N4=a的时候,指针T当前所指向的数据存储块即为根据随机数a所选出的数据存储块n4,并选定该数据存储块n4。
同时,在内存开辟一个局部变量N3=0,设置指针S指向闪存存储区物理首地址,即S=0x00000000,指针S从0x00000000开始,到0x00007800结束,指针S的步长是0x100,即S=S+0x100,则指针S总是指向存储块逻辑块号。判断指针S当前所指向的存储块逻辑块号是否为0xFF。如果是0xFF,则N3=N3+1。当N3=b的时候,指针S所对应的空存储块即为根据随机数b所选出的空存储块n3,并选定该空存储块n3,即为目标空存储块n3。
本实施例303,304步骤中关于随机选出的空存储块n3的过程也可以采用下述方法实现:
本方法主要通过建立空存储块列表来实现随机查找一个空存储块的目的。
3031,遍历存储器中所有的存储块,查找到目前存储器中所有空存储块。
3041,建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表,从所述列表中随机选出一个空存储块。
在本实施例中,具体方法可为:设置指针P指向闪存存储器中物理地址最小的存储块的首地址。那么P=P+i*(0x100)就表示指向第i+1个存储块的首地址(因为每个存储块的长度为0x100字节,所以指针P总是指向每个存储块首地址)。i的值从0到0x77,共0x78个存储块,则可以通过i的值来找到一个存储块的首地址。
在内存中开辟一个数组freeblock[78]用来记录空存储块的i的值。让i的值从0遍历到0x77,判断i值所对应的存储块是否为空存储块,如果是空存储块,则将i的值记录到freeblock中。比如当前时刻,空存储块的个数为5个,对应的i值分别是0x2,0x12,0x33,0x40,0x59,那么freeblock[0]=0x2,freeblock[1]=0x12,freeblock[2]=0x33,freeblock[3]=0x 40,freeblock[4]=0x 59,产生一个1~5之间的随机数。比如这个随机数是2,那么就可以通过找freeblock数组第2个值或者第5-2个值(即找freeblock[2-1]或者找freeblock[5-2],5是空存储块的个数),从而得到一个空存储块的i值。也可以根据i值,i*0x100就是这个空存储块的首地址。所以可以在数组freeblock中直接记录空存储块的首地址,然后从中随机选出一个空存储块。
305,判断所述随机选出的空存储块是否为有记录的空存储块,如果判断的结果为是,则执行步骤306;否则,直接执行步骤307。
在本实施例中具体为:判断空存储块n3是否为有记录的空存储块。
306,擦除该有记录的空存储块中存储的数据,使该有记录的空存储块为空存储块。
307,将选出的数据存储块里的数据写入到选出的空存储块中,然后擦除选出的数据存储块里的数据。
在本实施例中具体为:将数据存储块n4中存储的数据全部读入到内存中,然后将逻辑块号(即首字节)以外的数据写入到通过305步骤随机选出的空存储块n3中,当该数据全部写完后,再将数据存储块n4的逻辑块号写入空存储块n3中,同时擦除数据存储块n4中存储的数据。即将空存储块n3变成数据存储块n3,将数据存储块n4变成空存储块n4。
本实施例提供的方案因为考虑到了有些数据存储块可能一旦被写入了长期有效的数据,就很少被执行写入操作的情况,所以在存储器通电后,采用了可以将随机选择的数据存储块里的数据转移到随机选择的空存储块中的技术方案,那么即便是数据存储块被写入长期有效的数据,仍旧可以将该数据存储块变成空存储块,使其参与到可被执行写入数据操作的场景中,取得了可以使存储块被执行写入操作的次数得到均衡的有益效果。
308,设置计数器并使该计数器的初始计数值为零,同时等待上层(如:计算机操作系统)发出写入新数据的指令。
在本实施例中具体为:在内存中申请一个变量J,用来记录修改存储器的次数,并设置J的初始值为0,然后等待上层发出的需要修改数据的指令。
每当对存储器中的存储块执行一次写入操作时,计数器则在初始值上累计加一,以便记录存储器被执行过的写入操作的次数。
309,接收到上层发来的写入新数据的指令并查找到需要修改的数据所在的数据存储块。
在本实施例中具体为:若需要修改的数据所在的数据存储块x逻辑块号为x,设置指针P指向闪存存储区物理首地址,即P=0x00000000,指针P从0x00000000开始,到0x00007800结束,P的步长是0x100,即P=P+0x100,则P总是指向存储块逻辑块号。判断P当前所指向的存储块逻辑块号是否为X。如果是,则该数据存储块为需要修改的数据所在的数据存储块x。如果不是,则P=P+0x100继续查找。
在本实施例中,也可以通过物理块号来查找到需要修改的数据所在的数据存储块,假如该需要修改得数据存储块的物理块号为Y,则令一个指针P从0x00000000开始,到0x00007800结束,P的步长是0x100,即使P=Y*0x100,P所对应的存储块即为需要修改得数据存储块。
310,统计存储器中空存储块的总数,并生成一个不大于该空存储块总数范围内的随机数。
在本实施例中具体为:在内存开辟一个变量N 2=0,设置指针P指向闪存存储区物理首地址,即P=0x00000000,指针P从0x00000000开始,到0x00007800结束,P的步长是0x100,即P=P+0x100,则P总是指向存储块逻辑块号。判断P所指向的存储块逻辑块号是否为0xFF,如果是0xFF,则使N2=N2+1。当P=0x00007800时,N2的值就是空存储块的总数。根据得到的空存储块的总数N2生成一个随机数w。随机数w的范围是1<=w<=N2。w可以是通过相关的一个函数f(w)产生的,也可以单纯的选出1<=w<=N2之间的整数。这两种方法都可以用于生成本实施例中的随机数。
311,在存储器中查找空存储块,对查找到的每一个空存储块进行计数,当计数的值与随机数相等时,选定当前查找到的空存储块,并将该空存储块作为随机选出的空存储块。
在本实施例中具体为:在内存开辟一个局部变量N5=0,设置指针Y指向闪存存储区物理首地址,即Y=0x00000000,指针Y从0x00000000开始,到0x00007800结束,指针Y的步长是0x100,即Y=Y+0x100,则指针S总是指向存储块逻辑块号。判断指针Y当前所指向的存储块逻辑块号是否为0xFF。如果是0xFF,则N5=N5+1。当N5=w的时候,指针Y所对应的空存储块即为根据随机数w所选出的空存储块n5,并选定该空存储块n5。
本实施例310,311步骤中关于随机选出的空存储块n5的过程也可以采用通过建立空存储块列表来实现随机查找一个空存储块的方法。具体的操作方法与步骤3031和3041的方法相同,在这里不在进行赘述。
312,判断随机选出的空存储块是否为有记录的空存储块,如果是,则执行步骤313;如果否,则直接执行步骤314。
313,擦除该有记录的空存储块中存储的数据,使该有记录的空存储块成为空存储块。
314,将309步骤中查找到的数据存储块中存储的数据读入内存中,保持逻辑块号不变,同时在内存中将数据区中需要修改的数据修改完,然后先将该修改完数据与数据区数据相结合生成的更新数据(不含逻辑块号)写入通过312步骤随机选出的空存储块中,再将逻辑块号写入到该空存储块中。
在本实施例中,采用了先将更新数据写入所述空存储块,后将逻辑块号写入所述空存储块的技术方案,取得了避免在写入过程中,因为发生掉电所导致写入数据不全,使该空存储块处于“有记录的空存储块”状态的有益效果,同时也使该有记录的空存储块不会错误的成为数据存储块。
315,擦除309步骤中查找到的数据存储块中存储的数据,使该数据存储块成为空存储块。
314和315步骤在本实施例中具体为:将数据存储块x的数据读入内存中,保持逻辑块号不变的同时,在内存中将数据区中需要修改的数据修改完,先将修改后数据与数据区数据结合生成的更新数据全部写入到通过步骤311查找到的空存储块n5中,再将数据存储块x逻辑块号写入到该空存储块n5中(即把空存储块n5变成数据存储块n5),同时擦除数据存储块x中存储的数据,使数据存储块x成为空存储块(即使该数据存储块的所有字节变为0xFF)。
316,对所设置的计数器的计数值上加一。
在本实施例中具体为:使J=J+1。
317,判断计数器的计数值是否达到预定次数,如果判断的结果为达到预定次数,则执行步骤318;如果判断的结果为未达到预定次数,则本次操作结束。
在本实施例中具体为:设置预设次数为30,判断J值是否等于30,如果J值等于30,则执行步骤318;否则,执行步骤324。
318,统计存储器中数据存储块的总数并随机生成一个不大于该数据存储块总数的随机数;同时统计存储器中空存储块的总数并随机生成一个不大于该空存储块总数的随机数。
在本实施例中具体方法与303步骤中的具体实施方式相同。
319,根据数据存储块总数生成的随机数在数据存储块中选出一个数据存储块;同时根据空存储块总数生成的随机数在空存储块中选出一个目标空存储块。
在本实施例中具体方法与304步骤中的具体实施方式相同。
320,判断该随机选出的空存储块是否为有记录的空存储块,如果是,则执行步骤321;如果否,则直接执行步骤322。
在本实施例中具体方法与305步骤中的具体实施方式相同。
321,擦除该有记录的空存储块中存储的数据,使该有记录的空存储块为空存储块。
在本实施例中具体方法与306步骤中的具体实施方式相同。
322,将选出的数据存储块里的数据写入到选出的空存储块中,然后擦除选出的数据存储块里的数据,使该数据存储块成为空存储块。
在本实施例中具体方法与307步骤中的具体实施方式相同。
当计数器的值到达预定次数时,说明存储器被执行的写入操作的次数已经达到了预设的次数,此时就代表了目前存储器中存在的空储块因被执行了预定次数的写入操作而受到了一定程度上的损伤。为了降低目前存在的空存储块受损程度,本实施例采用将随机选出的数据存储块中的数据转移到随机选出的空存储块中的技术方案,在降低了目前空存储块受损程度的同时也取得了可均衡各个存储块被执行写入操作次数的有益效果。
323,将计数器的计数值清零。
在本实施例中具体为:使J=0。
324,结束流程。
本实施例提供的方案,通过采用将需要修改的数据写入随机选出的空存储块的技术方案,克服了现有技术中,因为是按顺序选出空存储块而导致的容易出现对序号排在顺序较前的空存储块频繁地执行写入操作的情况,取得了可使对存储器中各个存储块均衡的执行写入操作的技术效果,提高了存储块可使用的次数,也相当于延长存储器可使用的寿命。而且在写入数据的过程中先写数据后写入逻辑块号,因而具有良好的防掉电功能。
实施例4
本实施例具体描述了一种写入数据的装置,如图4所示,该装置包括:第二判断模块401,第二随机交换模块402,接收模块403,定位模块404,选出模块405,第一判断模块408,第一清除模块409,写入模块406,擦除模块407,累计模块410,第三判断模块411,第三随机交换模块412。
第二判断模块401用于在存储器通电后,判断当前空存储块总数是否小于预设数值;第二随机交换模块402用于当前空存储块总数小于预设数值时,将随机选出的数据存储块里的数据写入随机选出的目标空存储块中,并将所述随机选出的数据存储块擦除为空存储块;接收模块403用于接收写入新数据的指令;定位模块404用于定位需要修改的数据所在的数据存储块;选出模块405用于从所有的空存储块中随机选出一个空存储块;第一判断模块408用于判断所述随机选出的数据存储块是否为有记录的空存储块;第一清除模块409用于当判断模块判断是时,将所述有记录的空存储块擦除为空存储块;写入模块406用于将所述数据与新数据结合为更新数据,将所述更新数据写入所述随机选出的空存储块中;擦除模块407用于擦除定位到的数据存储块里的数据;累计模块410用于将每次对存储块执行的写入操作的次数累计到写入操作的总次数中;第三判断模块411用于判断所述写入操作的总次数是否大于预设次数;第三随机交换模块412用于当写入操作的总次数大于预设次数时,将随机选出的数据存储块里的数据写入随机选出的目标空存储块中,并将所述随机选出的数据存储块擦除为空存储块,同时将写入操作的总次数归零。
在本实施例中,第二随机交换模块402包括:第一选出单元4021,第二选出单元4022,第二判断单元4025,第二清除单元4026,第二写入单元4023,第二擦除单元4024。
第一选出单元4021用于从所有的数据存储块中随机选出一个数据存储块;第二选出单元4022用于从所有的空存储块中随机选出一个目标空存储块;第二判断单元4025用于判断所述目标空存储块是否为有记录的空存储块;第二清除单元4026用于当第二判断单元判断是时,将有记录的空存储块擦除为空存储块;第二写入单元4023用于将所述数据存储块里的数据写入所述目标空存储块中;第二擦除单元4024用于将随机选出的数据存储块擦除为空存储块。
其中,第一选出单元4021包括:第一统计子单元40210,第一生成子单元40211,第一定位子单元40212。
第一统计子单元40210用于统计数据存储块的个数;第一生成子单元40211用于生成一个不大于所有数据存储块总数的随机数;第一定位子单元40212,用于利用所述随机数定位一个数据存储块。
特别的,本实施例的装置中第一选出单元4021可由第二查找子单元来替换;相应地,第二选出单元4022可由第二建立子单元;相应地,第二写入单元4023可由第二选出子单元来替换。
第二查找子单元用于遍历所有的存储块查找所有空存储块;第二建立子单元用于建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;第二选出子单元用于从所述列表中随机选出一个目标空存储块。
在本实施例中,该第二选出单元4022包括:第二统计子单元40221,第二生成子单元40222,第二定位子单元40223。
第二统计子单元40221用于统计空存储块的个数;第二生成子单元40222用于生成一个不大于所有空存储块总数的随机数;第二定位子单元40223用于利用所述随机数定位一个目标空存储块。
在本实施例中,选出模块405包括:统计单元4051,生成单元4052,定位单元4053。
统计单元4051用于统计空存储块的个数;生成单元4052用于生成一个不大于所有空存储块总数的随机数;定位单元4053用于利用所述随机数定位一个空存储块。
特别的,本实施例装置中的选出模块405的统计单元4051,生成单元4052,定位单元4053还可以用查找单元,建立单元和选出单元来代替。其中,查找单元用于遍历所有的存储块查找到所有空存储块;建立单元用于建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;选出单元用于从所述列表中随机选出一个空存储块。
另外本实施例装置中的定位模块404定位的数据存储块由逻辑块号和数据区数据组成,则所述需要修改的数据为数据区数据。那么相应的,写入模块406先将数据区数据与新数据结合写入所述随机选出的空存储块中,再将所述逻辑块号写入所述随机选出的空存储块中。
在本实施例中的写入模块406包括:读取单元4061,结合单元4062,写入单元4063。
读取单元4061用于将所述数据读入到内存中;结合单元4062用于在内存中将所述数据区数据与新数据结合后生成更新数据;写入单元4063用于将所述更新数据与逻辑块号写入所述随机选出的空存储块中。
本实施例中的第三随机交换模块412包括:第三选出单元4120,第四选出单元4121,第三判断单元4125,第三清除单元4126,第三写入单元4122,第三擦除单元4123,第三归零单元4124。
第三选出单元4120用于从所有的数据存储块中随机选出一个数据存储块;第四选出单元4121用于从所有的空存储块中随机选出一个目标空存储块;第三判断单元4125用于判断所述目标空存储块是否为有记录的空存储块;第三清除单元4126用于当第二判断单元判断是时,将有记录的空存储块擦除为空存储块;第三写入单元4122用于将所述数据存储块里的数据写入所述目标空存储块中;第三擦除单元4123用于将所述随机选出的数据存储块擦除为空存储块;第三归零单元4124用于将写入操作的总次数归零。
本实施例装置中的第三选出单元4120包括:第三统计子单元41200用于统计数据存储块的个数;第三生成子单元41201用于生成一个不大于所有数据存储块总数的随机数;第三定位子单元41202用于利用所述随机数定位一个数据存储块。
本实施例装置中的第四选出单元4121包括:第四统计子单元41210,第四生成子单元41211,第四定位子单元41212。
第四统计子单元41210,用于统计空存储块的个数;第四生成子单元41211,用于生成一个不大于所有空存储块总数的随机数;第四定位子单元41212,用于利用所述随机数定位一个目标空存储块。
特别的,本实施例装置中的第四选出单元4121还可以由第四查找子单元、第四建立子单元、第四选出子单元组成,其中第四查找子单元,用于遍历所有的存储块查找所有空存储块;第四建立子单元,用于建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;第四选出子单元,用于从所述列表中随机选出一个目标空存储块。
本发明实施例主要用在各种存储器中,例如:闪存等以便实现提高存储块可以使用的次数,同时也可以延长存储器的使用寿命。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若干指令用以使得一台含有存储器的终端执行本发明各个实施例的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (25)

1.一种向Flash存储器写入数据的方法,其特征在于,包括:
接收到写入新数据的指令;
定位需要修改的数据所在的数据存储块;
从所有的空存储块中随机选出一个空存储块;判断所述随机选出的空存储块是否为有记录的空存储块,其中,所述有记录的空存储块为空数据区的所有字节不都是0xFF的空存储块;
如果是,则将所述有记录的空存储块擦除为空存储块,然后将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入擦除为空存储块的所述有记录的空存储块中;
如果否,则直接将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入所述随机选出的空存储块中;
将定位到的数据存储块擦除为空存储块。
2.根据权利要求1所述的写入数据的方法,其特征在于,该方法还包括:
在存储器通电后,统计空存储块的总数,并生成一个不大于所述总数的随机数,判断当前空存储块总数是否与所述随机数相同;
如果是,则将随机选出的数据存储块里的数据写入随机选出的目标空存储块中;将所述随机选出的数据存储块擦除为空存储块;等待接收写入新数据的指令;
如果否,则等待接收写入新数据的指令。
3.根据权利要求1所述的写入数据的方法,其特征在于,所述数据存储块的数据由逻辑块号和数据区数据组成,所述将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入所述随机选出的空存储块中包括:
将所述数据存储块的数据读入内存中;
在内存中将所述数据中的数据区数据与新数据结合为更新数据;
将所述更新数据与逻辑块号写入所述随机选出的空存储块中。
4.根据权利要求3所述的写入数据的方法,其特征在于,所述将所述更新数据与逻辑块号写入所述随机选出的空存储块中为:先将更新数据写入所述随机选出的空存储块中,再将逻辑块号写入所述随机选出的空存储块中。
5.根据权利要求3所述的写入数据的方法,其特征在于,所述从所有的空存储块中随机选出一个空存储块包括:
生成一个不大于所有空存储块总数的随机数;利用所述随机数选出一个空存储块;或者
遍历所有的存储块查找到所有空存储块;建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;从列表中随机选出一个空存储块。
6.根据权利要求1所述的写入数据的方法,其特征在于,将定位到的数据
存储块擦除为空存储块之后,该方法还包括:
将每次对存储块执行的写入操作的次数累计到写入操作的总次数中;
判断所述写入操作的总次数是否大于预设次数;
如果是,则将随机选出的数据存储块里的数据写入随机选出的目标空存储块中;将所述随机选出的数据存储块擦除为空存储块;将写入操作的总次数归零;
如果否,则结束本次操作。
7.根据权利要求2或6所述的写入数据的方法,其特征在于,所述将随机选出的数据存储块里的数据写入随机选出的目标空存储块中包括:
从所有的数据存储块中随机选出一个数据存储块;
从所有的空存储块中随机选出一个目标空存储块;
将所述随机选出的数据存储块里的数据写入所述目标空存储块中。
8.根据权利要求7所述的写入数据的方法,其特征在于,所述从所有的数据存储块中随机选出一个数据存储块包括:
生成一个不大于所有数据存储块总数的随机数,利用所述不大于所有数据存储块总数的随机数定位一个数据存储块。
9.根据权利要求7所述的写入数据的方法,其特征在于,所述从所有的空存储块中随机选出一个目标空存储块包括:
生成一个不大于所有空存储块总数的随机数,利用所述不大于所有空存储块总数的随机数选出一个目标空存储块;或者
遍历所有的存储块查找所有空存储块,建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表,从列表中随机选出一个目标空存储块。
10.根据权利要求9所述的写入数据的方法,其特征在于,在将随机选出的数据存储块里的数据写入随机选出的目标空存储块中之前,该方法还包括:
判断所述随机选出的目标空存储块是否为有记录的空存储块;
如果是,则将所述有记录的空存储块擦除为空存储块;
如果否,则直接利用所述随机选出的目标空存储块。
11.一种向Flash存储器写入数据的装置,其特征在于,包括:
接收模块,用于接收写入新数据的指令;
定位模块,用于定位需要修改的数据所在的数据存储块;
选出模块,用于从所有的空存储块中随机选出一个空存储块;
第一判断模块,用于判断所述随机选出的空数据存储块是否为有记录的空存储块,其中,所述有记录的空存储块为空数据区的所有字节不都是0xFF的空存储块;
第一清除模块,用于当第一判断模块判断结果为是时,将所述有记录的空存储块擦除为空存储块;
写入模块,用于将所述需要修改的数据与新数据结合为更新数据,在第一判断模块的判断结果为否时,将所述更新数据直接写入所述随机选出的空存储块中或在第一判断模块的判断结果为是时,将所述更新数据写入由第一清除模块擦除为空的存储块;
擦除模块,用于将定位到的数据存储块擦除为空存储块。
12.根据权利要求11所述的写入数据的装置,其特征在于,所述定位模块定位的数据存储块由逻辑块号和数据区数据组成,所述写入模块先将数据区数据与新数据结合为更新数据,将所述更新数据与逻辑块号写入所述随机选出的空存储块中。
13.根据权利要求12所述的写入数据的装置,其特征在于,所述写入模块包括:
读取单元,用于将所述数据区数据读入到内存中;
结合单元,用于在内存中将所述数据区数据与新数据结合后生成更新数据;
写入单元,用于将所述更新数据与逻辑块号写入所述随机选出的空存储块中;其中所述写入单元先将更新数据写入所述随机选出的空存储块中,再将逻辑块号写入所述随机选出的空存储块中。
14.根据权利要求12所述的写入数据的装置,其特征在于,该装置还包括:
第二判断模块,用于在存储器通电后,判断当前空存储块总数是否小于预设数值;
第二随机交换模块,用于当前空存储块总数小于预设数值时,将随机选出的数据存储块里的数据写入随机选出的目标空存储块中,将所述随机选出的数据存储块擦除为空存储块。
15.根据权利要求14所述的写入数据的装置,其特征在于,所述第二随机交换模块包括:
第一选出单元,用于从所有的数据存储块中随机选出一个数据存储块;
第二选出单元,用于从所有的空存储块中随机选出一个目标空存储块;
第二判断单元,用于判断所述目标空存储块是否为有记录的空存储块;
第二清除单元,用于当第二判断单元判断是时,将有记录的空存储块擦除为空存储块;
第二写入单元,用于将所述随机选出的数据存储块里的数据写入所述目标空存储块中;
第二擦除单元,用于将随机选出的数据存储块擦除为空存储块。
16.根据权利要求15所述的写入数据的装置,其特征在于,所述第一选出单元包括:
第一生成子单元,用于生成一个不大于所有数据存储块总数的随机数;
第一定位子单元,用于利用所述随机数定位一个数据存储块。
17.根据权利要求15所述的写入数据的装置,其特征在于,所述第二选出单元包括:
第二生成子单元,用于生成一个不大于所有空存储块总数的随机数;
第二定位子单元,用于利用所述随机数选出一个目标空存储块。
18.根据权利要求12所述的写入数据的装置,其特征在于,所述选出模块包括:
生成单元,用于生成一个不大于所有空存储块总数的随机数;
定位单元,用于利用所述随机数定位一个空存储块。
19.根据权利要求12所述的写入数据的装置,其特征在于,该装置还包括:
累计模块,用于将每次对存储块执行的写入操作的次数累计到写入操作的总次数中;
第三判断模块,用于判断所述写入操作的总次数是否大于预设次数;
第三随机交换模块,用于当写入操作的总次数大于预设次数时,将随机选出的数据存储块里的数据写入随机选出的目标空存储块中,并将所述随机选出的数据存储块擦除为空存储块,同时将写入操作的总次数归零。
20.根据权利要求19所述的写入数据的装置,其特征在于,所述第三随机交换模块包括:
第三选出单元,用于从所有的数据存储块中随机选出一个数据存储块;
第四选出单元,用于从所有的空存储块中随机选出一个目标空存储块;
第三判断单元,用于判断所述目标空存储块是否为有记录的空存储块;
第三清除单元,用于当第三判断单元判断是时,将有记录的空存储块擦除为空存储块;
第三写入单元,用于将所述数据存储块里的数据写入所述目标空存储块中;
第三擦除单元,用于将所述随机选出的数据存储块擦除为空存储块;
第三归零单元,用于将写入操作的总次数归零。
21.根据权利要求20所述的写入数据的装置,其特征在于,所述第三选出单元包括:
第三生成子单元,用于生成一个不大于所有数据存储块总数的随机数;
第三定位子单元,用于利用所述随机数定位一个数据存储块。
22.根据权利要求20所述的写入数据的装置,其特征在于,所述第四选出单元包括:
第四生成子单元,用于生成一个不大于所有空存储块总数的随机数;
第四定位子单元,用于利用所述随机数选出一个目标空存储块。
23.根据权利要求20所述的写入数据的装置,其特征在于,所述第四选出单元包括:
第四查找子单元,用于遍历所有的存储块查找所有空存储块;
第四建立子单元,用于建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;
第四选出子单元,用于从列表中随机选出一个目标空存储块。
24.根据权利要求15所述的写入数据的装置,其特征在于,所述第二选出单元包括:
第二查找子单元,用于遍历所有的存储块查找所有空存储块;
第二建立子单元,用于建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;
第二选出子单元,用于从列表中随机选出一个目标空存储块。
25.根据权利要求12所述的写入数据的装置,其特征在于,所述选出模块包括:
查找单元,用于遍历所有的存储块查找到所有空存储块;
建立单元,用于建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;
选出单元,用于从列表中随机选出一个空存储块。
CN2008102470519A 2008-12-31 2008-12-31 写入数据的方法及装置 Expired - Fee Related CN101526920B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008102470519A CN101526920B (zh) 2008-12-31 2008-12-31 写入数据的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008102470519A CN101526920B (zh) 2008-12-31 2008-12-31 写入数据的方法及装置

Publications (2)

Publication Number Publication Date
CN101526920A CN101526920A (zh) 2009-09-09
CN101526920B true CN101526920B (zh) 2011-04-27

Family

ID=41094790

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008102470519A Expired - Fee Related CN101526920B (zh) 2008-12-31 2008-12-31 写入数据的方法及装置

Country Status (1)

Country Link
CN (1) CN101526920B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104657678B (zh) * 2013-11-19 2018-01-09 北京兆易创新科技股份有限公司 应答保护单调计数器、读取方法及计数方法
CN107665090B (zh) * 2016-07-27 2021-09-03 北京忆恒创源科技有限公司 实现全局磨损均衡的方法
CN111649786B (zh) * 2020-06-03 2022-04-08 东莞深证通信息技术有限公司 数据累计方法、装置、终端设备及存储介质
CN112231244B (zh) * 2020-12-21 2021-04-20 深圳杰睿联科技有限公司 应用于SoftSIM的SIM卡文件擦写系统、方法和可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6442659B1 (en) * 1998-02-17 2002-08-27 Emc Corporation Raid-type storage system and technique
CN1658171A (zh) * 2003-12-19 2005-08-24 雷克萨媒体公司 通过控制频繁受访问扇区对非易失性存储器的更快写操作
CN100424654C (zh) * 2005-11-25 2008-10-08 杭州中天微系统有限公司 一种矩阵数据存取方法及其矩阵数据存储装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6442659B1 (en) * 1998-02-17 2002-08-27 Emc Corporation Raid-type storage system and technique
CN1658171A (zh) * 2003-12-19 2005-08-24 雷克萨媒体公司 通过控制频繁受访问扇区对非易失性存储器的更快写操作
CN100424654C (zh) * 2005-11-25 2008-10-08 杭州中天微系统有限公司 一种矩阵数据存取方法及其矩阵数据存储装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JP特开2003-44344A 2003.02.14
JP特开平8-305614A 1996.11.22

Also Published As

Publication number Publication date
CN101526920A (zh) 2009-09-09

Similar Documents

Publication Publication Date Title
CN102819496B (zh) 闪存ftl的地址转换方法
CN101458658B (zh) 用于闪存的数据存储方法及装置
CN101097781B (zh) 确定数据有效性的方法和设备
CN101354681A (zh) 存储器系统、非易失性存储器的磨损均衡方法及装置
CN103164490B (zh) 一种不固定长度数据的高效存储实现方法和装置
CN103325417A (zh) 非易失性存储器件、非易失性存储系统、及其编程方法
US9075707B2 (en) Data writing method and data storage device
CN106448737A (zh) 读取闪存数据的方法、装置以及固态驱动器
CN101526920B (zh) 写入数据的方法及装置
CN102722455B (zh) 一种闪存设备中数据存储的方法及装置
CN102253901B (zh) 一种基于相变内存的读写区分数据存储替换方法
CN103279424A (zh) 一种Nand Flash的坏列管理装置和方法
CN109582593A (zh) 一种基于计算的ftl地址映射方法及数据读、写方法
CN101452422B (zh) 一种芯片的数据读写方法、相应装置和系统
US20130304971A1 (en) Control device, storage device, and data writing method
CN101901169A (zh) 扫描装置及方法
CN104484128A (zh) 基于一读一写存储器的多读多写存储器及其实现方法
CN103455284A (zh) 一种读写数据的方法及装置
CN104484129A (zh) 一读一写存储器、多读多写存储器及其读写方法
CN102521146A (zh) 一种flash存储器块细分的数据寻址存储方法
CN102426601B (zh) 数据删除方法和装置
CN103680610A (zh) 差分存储NAND Flash存储器写操作的方法及装置
CN203311409U (zh) 一种Nand Flash的坏列管理装置
CN105955669A (zh) 一种提升固态硬盘写性能的方法
US20090240868A1 (en) Management method, management apparatus, and controller for memory data access

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
C56 Change in the name or address of the patentee

Owner name: FEITIAN CHENGXIN TECHNOLOGY CO., LTD.

Free format text: FORMER NAME: BEIJING FEITIAN CHENGXIN SCIENCE + TECHNOLOGY CO. LTD.

CP03 Change of name, title or address

Address after: 100085 Beijing city Haidian District Xueqing Road No. 9 Ebizal building B block 17 layer

Patentee after: Feitian Technologies Co.,Ltd.

Address before: 100083, Haidian District, Xueyuan Road, Beijing No. 40 research, 7A building, 5 floor

Patentee before: FEITIAN TECHNOLOGIES Co.,Ltd.

CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110427