写入数据的方法及装置的制作方法

文档序号:6472168阅读:154来源:国知局
专利名称:写入数据的方法及装置的制作方法
技术领域
本发明涉及数据存储领域,尤其涉及一种写入数据的方法及装置。
背景技术
闪存属于存储器类型的一种,因为其具有可移动性、及保存在闪存上的数
据即便是在断电情况下仍不会丢失的优点而得到迅速的发展。在闪存中,写Flash 操作只能把Flash中数据从T变到"0" (Bit);擦除操作可以把"0"变为"1", 但是擦除操作只能针对整个"存储块"为单位进行的。例如 一个存储块的大 小一般为256字节到1024字节。
用户在需要修改存储器中某个存储块的数据时, 一般是在空存储块中写入 需要修改的数据。在现有技术中,通常采用按照一定的顺序在一些空存储块中 找出 一个空存储块的方法,然后再将修改后的数据写入到该空存储块中并擦除 修改前的数据存储块里的数据。但是每一个存储块可以被写入和擦除的次数都 是有限的,特别是当用户频繁的修改某些数据或者当空存储块个数不多时,很 容易出现对序号排在顺序较前的空存储块频繁地执行写入或者擦除操作的情 况,久而久之就会使这些空存储块的受损程度增加,使用寿命降低,甚至可能 因此无法再次使用该存储块,导致整个存储器的失效。

发明内容
本发明的实施例提供一种写入数据的方法及装置。以便提高该存储器中存 储块能够使用的次数。
为达到上述目的,本发明的实施例采用如下技术方案 一种写入^t据的方法,包括 接收到写入新数据的指令; 定位需要修改的数据所在的数据存储块; 从所有的空存储块中随机选出 一个空存储块;
将所述需要修改的数据与新数据结合生成更新数据,将所述更新数据写入所述随机选出的空存储块中; 将定位到的数据存储块擦除为空存储块。 一种写入数据的装置,包括 接收模块,用于接收写入新数据的指令; 定位模块,用于定位需要修改的数据所在的数据存储块; 选出模块,用于从所有的空存储块中随机选出一个空存储块; 写入模块,用于将所述需要修改的数据与新数椐结合生成更新数据,将所 述更新数据写入所述随机选出的空存储块中; 擦除模块,用于将定位到的数据存储块擦除为空存储块。 本发明提供的写入数据的方法及装置具有如下有点或有益效果通过采用 在空存储块中随机选择空存储块的技术方案,解决了现有技术中因为是按顺序 进行选择空存储块所造成的容易出现对序号排在顺序较前的空存储块频繁地执 行写入或者擦除操作的技术问题,进而取得了平衡存储器中各个存储块受损程 度,增加存储块使用次数的有益效果。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付
出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。 图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所示,该方法包括如下步骤
为了阐述方^f更,假i殳在本实施例中闪存存储区的物理地址为从0x0000000 到0x00007800,设每个存储块为0x100个字节,则共有0x78个存储块。相应地, 各存储块的物理块号为0x00到0x77。在每个存储块的首字节用来标记该存储块 逻辑块号,文件可以看做是多个存储块的集合并且文件中的存储块是根据各个 存储块的逻辑块号联结起来的。
根据存储块逻辑块号的不同,在本实施例中存储块分为了两种类型
空存储块,指逻辑块号是0xFF的存储块。空数据区指空存储块中首字节(即 逻辑块号)以外的字节所组成的区域,则如果空数据区的所有字节都是OxFF, 该空存储块随时可以写入数据;否则,该空存储块为不能直接写入数据的空存 储块,需对该空存储块进行擦除操作,即使该空存储块所有字节变为0xFF, 则空存储块就成为随时可以写入数据的空存储块。特别地,把不能直接写入数 据的空存储块称为"有记录的空存储块"。
数据存储块,指逻辑块号在0x01到0x78范围内的存储块。数据区数据指 数据存储块中首字节(即逻辑块号)以外的字节所存储的数据。数据区数据被 认为是有效的文件数据。
301,在存储器通电后,统计存储器中空存储块的总数,并生成一个不大于该总数的随机数。
在本实施例中具体为在内存开辟一个变量N-O,设置指针P指向闪存存 储区物理首地址,即P二0x00000000,指针P从0x00000000开始,到0x00007800 结束,P的步长是0x100,即P-P+0x100,则P总是指向存储块逻辑块号。判断 P所指向的存储块逻辑块号是否为OxFF。如果是OxFF,使N=N+1,当 P=0x00007800时,N的值就是空存储块的总数。根据得到的空存储块的总数N 生成一个随机数M。随积Jt的M的范围是K-lVK-N。 M可以是通过相关的一 个函数f(M)产生的,也可以单纯的选出K-NK-N之间的整数。这两种方法 都可以用于生成本实施例中的随^L数。
302,判断空存储块的总数是否与生成的随机数相同,如果空存储块的总数 与生成的随机数相同,则执行步骤303;如果空存储块的总数与生成的随机数不 同,则执行步骤308。
在本实施例中具体为判断M是否等于N,如果M等于N则执行步骤303; 如果M不等于N则执行步骤308。
当存储器中空存储块的个数很少时,根据空存储块总数生成的随机数,与 空存储块总数相等的可能性就会变大。在本实施例中,利用该可能性,通过采 用判断空存储块的总数是否与随机数相等的方案,取得了可了解到空存储块目 前总数状况的技术效果。而且在本实施例的此过程中,计算机生成的随机数就 相当于用户设置的一个预设数值,该预设数值相当于一个门限,可了解到当前 空存储块总数是否处于很少的状况,以便釆取相应的措施。
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,指4十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-Ox00000000,指针S从0x00000000开始,到0x00007800结束, 指针S的步长是0x100,即S-S+0x100,则指针S总是指向存储块逻辑块号。 判断指针S当前所指向的存储块逻辑块号是否为OxFF。如果是OxFF,则 N3=N3+1。当N3-b的时候,指针S所对应的空存储块即为根据随机数b所选 出的空存储块n3,并选定该空存储块n3,即为目标空存储块n3。
本实施例303, 304步骤中关于随机选出的空存储块n3的过程也可以釆用 下述方法实现
本方法主要通过建立空存储块列表来实现随机查找一个空存储块的目的。 3031,遍历存储器中所有的存储块,查找到目前存储器中所有空存储块。 3041,建立一个包含有查找到的所有空存储块的地址列表或所有空存储块
的物理块号列表,从所述列表中随机选出一个空存储块。
在本实施例中,具体方法可为设置指针P指向闪存存储器中物理地址最
小的存储块的首地址。那么P-P+i"0xl00)就表示指向第i+l个存储块的首地址 (因为每个存储块的长度为0x100字节,所以指针P总是指向每个存储块首地
址)。i的值从0到0x77,共0x78个存储块,则可以通过i的值来找到一个存储
块的首地址。
在内存中开辟一个数组freeblock[78]用来记录空存储块的i的值。让i的值 从0遍历到0x77,判断i值所对应的存储块是否为空存储块,如果是空存储块, 则将i的值记录到freeblock中。比如当前时刻,空存储块的个数为5个,对应 的i值分别是0x2, 0x12, 0x33, 0x40, 0x59,那么freeblock
=0x2, freeblock[l]=0x12, freeblock[2]= 0x33, freeblock[3]= Ox 40, freeblock[4]= Ox 59,产生一个1 5 之间的随机数。比如这个随机数是2,那么就可以通过找freeblock数组第2个 值或者第5-2个值(即找freeblock[2-l]或者找freeblock[5-2],5是空存储块的个 数),从而得到一个空存储块的i值。也可以根据i值,i"xlOO就是这个空存储 块的首地址。所以可以在数组freeblock中直接记录空存储块的首地址,然后从 中随机选出一个空存储块。
305, 判断所述随机选出的空存储块是否为有记录的空存储块,如果判断的 结果为是,则执行步骤306;否则,直接执行步骤307。
在本实施例中具体为判断空存储块n3是否为有记录的空存储块。
306, 擦除该有记录的空存储块中存储的数据,使该有记录的空存储块为空 存储块。
307,将选出的数据存储块里的数据写入到选出的空存储块中,然后擦除选 出的数据存储块里的数据。
在本实施例中具体为将数据存储块n4中存储的数据全部读入到内存中, 然后将逻辑块号(即首字节)以外的数据写入到通过305步骤随机选出的空存 储块n3中,当该数据全部写完后,再将数据存储块n4的逻辑块号写入空存储 块n3中,同时擦除数据存储块n4中存储的数据。即将空存储块n3变成数据存 储块n3,将数椐存储块n4变成空存储块n4。
本实施例提供的方案因为考虑到了有些数据存储块可能一旦被写入了长期 有效的数据,就很少被执行写入操作的情况,所以在存储器通电后,采用了可 以将随机选择的数据存储块里的数据转移到随机选择的空存储块中的技术方 案,那么即便是数据存储块被写入长期有效的数据,仍旧可以将该数据存储块 变成空存储块,使其参与到可被执行写入数据操作的场景中,取得了可以使存 储块被执行写入操作的次数得到均衡的有益效果。
308,设置计数器并使该计数器的初始计数值为零,同时等待上层(如计 算机操作系统)发出写入新数据的指令。
在本实施例中具体为在内存中申请一个变量J,用来记录修改存储器的次 数,并设置J的初始值为O,然后等待上层发出的需要修改数据的指令。每当对存储器中的存储块执行一次写入操作时,计数器则在初始值上累计 加一,以便记录存储器被执行过的写入操作的次数。
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^x100, P所对应的存储块即为需要修改得数据存储块。
310, 统计存储器中空存储块的总数,并生成一个不大于该空存储块总数范 围内的随才几#:。
在本实施例中具体为在内存开辟一个变量N 2= 0,设置指针P指向闪存存 卡者区物理首地址,即P-0xOO0O0O00,指针P从0x00000000开始,到0x00007800 结束,P的步长是0x100,即P-P+0x100,则P总是指向存储块逻辑块号。判断 P所指向的存储块逻辑块号是否为0xFF,如果是0xFF,则使N2-N2+l。当 P=0x00007800时,N2的值就是空存储块的总数。根据得到的空存储块的总数 N2生成一个随机数w。随机数w的范围是1<= w<=N2。 w可以是通过相关的一 个函数f(w)产生的,也可以单纯的选出K-w〈二N2之间的整数。这两种方法 都可以用于生成本实施例中的随才几数。
311,在存储器中查找空存储块,对查找到的每一个空存储块进行计数,当 计数的值与随机数相等时,选定当前查找到的空存储块,并将该空存储块作为 随机选出的空存储块。
在本实施例中具体为在内存开辟一个局部变量N5二0,设置指针Y指向闪存存储区物理首地址,即Y二0x00000000,指针Y从0x00000000开始,到 0x00007800结束,指针Y的步长是0x100,即Y=Y+0xl00,则指针S总是指向 存储块逻辑块号。判断指针Y当前所指向的存储块逻辑块号是否为0xFF。如果 是OxFF ,则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成为空存储块(即使该数据存储块的所有字节变为OxFF)。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 用于将所述数据与新数据结合为更新数据,将所述更新l史据写入所述随机选出 的空存储块中;擦除模块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,用于统计空存储块的个数;第四生成子单元412H, 用于生成一个不大于所有空存储块总数的随机数;第四定位子单元41212,用于 利用所述随机数定位一个目标空存储块。
特别的,本实施例装置中的第四选出单元4121还可以由第四查找子单元、 第四建立子单元、第四选出子单元组成,其中第四查找子单元,用于遍历所有 的存储块查找所有空存储块;第四建立子单元,用于建立一个包含有查找到的 所有空存储块的地址列表或所有空存储块的物理块号列表;第四选出子单元, 用于从所述列表中随机选出一个目标空存储块。
本发明实施例主要应用在各种存储器中,例如闪存等以便实现提高存储
块可以使用的次数,同时也可以延长存储器的使用寿命。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发 明可借助软件加必需的通用硬件的方式来实现,当然也可以通过硬件,但很多 情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或 者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软 件产品存储在可读取的存储介质中,如计算机的软盘,硬盘或光盘等,包括若 干指令用以使得一 台含有存储器的终端执行本发明各个实施例的方法。
以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于 此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到 的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围 应以权利要求的保护范围为准。
权利要求
1、一种写入数据的方法,其特征在于,包括接收到写入新数据的指令;定位需要修改的数据所在的数据存储块;从所有的空存储块中随机选出一个空存储块;将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入所述随机选出的空存储块中;将定位到的数据存储块擦除为空存储块。
2、 根据权利要求1所述的写入数据的方法,其特征在于,该方法还包括 在存储器通电后,判断当前空存储块总数是否小于预设数值;如果是,则将随机选出的数据存储块里的数据写入随机选出的目标空存储 块中;将所述随机选出的数据存储块擦除为空存储块;等待接收写入新数据的 指令;如果否,则等待接收写入新数据的指令。
3、 根据权利要求l所述的写入数据的方法,其特征在于,所述数据存储块 的数据由逻辑块号和数据区数据组成,则所述将所述需要修改的数据与新数据 结合为更新数据,将所述更新数据写入所述随机选出的空存储块中包括将所述数据存储块的数据读入内存中;在内存中将所述数据中的数据区数据与新数据结合为更新数据; 将所述更新数据与逻辑块号写入空存储块中。
4、 根据权利要求3所述的写入数据的方法,其特征在于,所述将所述更新 数据与逻辑块号写入空存储块中为先将更新数据写入空存储块中,再将逻辑 块号写入空存储块中。
5、 根据权利要求3所述的写入数据的方法,其特征在于,所述从所有的空 存储块中随机选出 一个空存储块包括生成一个不大于所有空存储块总数的随机数;利用所述随机数选出一个空 存储块;或者遍历所有的存储块查找到所有空存储块;建立一个包含有查找到的所有空存储块的地址列表或所有空存储块的物理块号列表;从所述列表中选出一个空 存储块。
6、 根据权利要求5所述的写入数据的方法,其特征在于,在将所述更新数 据写入所述随机选出的空存储块中之前,该方法还包括判断所述随机选出的空存储块是否为有记录的空存储块; 如果是,则将所述有记录的空存储块擦除为空存储块; 如果否,则直接利用所述随机选出的空存储块。
7、 根据权利要求1所述的写入数据的方法,其特征在于,在将所述更新数 据写入所述随机选出的空存储块中之前,该方法还包括判断所述随机选出的空数据存储块是否为有记录的空存储块;如果是,则将所述有记录的空存储块擦除为空存储块;如果否,则直接执行将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入所述随机选出的空存储块中。
8、 根据权利要求1所述的写入数据的方法,其特征在于,将定位到的数据 存储块擦除为空存储块之后,该方法还包括 将每次对存储块执行的写入操作的次数累计到写入操作的总次数中;判断所述写入操作的总次数是否大于预设次数;如果是,则将随机选出的数据存储块里的数据写入随机选出的目标空存储 块中;将所述随机选出的数据存储块擦除为空存储块;将写入操作的总次数归 零;如果否,则结束本次操作。
9、 根据权利要求2或8所述的写入数据的方法,其特征在于,所述将随机 选出的数据存储块里的数据写入随机选出的目标空存储块中包括从所有的数据存储块中随机选出 一个数据存储块; 从所有的空存储块中随机选出 一个目标空存储块; 将所述数据存储块里的数据写入所述目标空存储块中。
10、 根据权利要求9所述的写入数据的方法,其特征在于,所述从所有的 数据存储块中随机选出 一个数据存储块包括生成一个不大于所有数据存储块总数的随机数,利用所述随机数定位一个 数据存储块。
11、 根据权利要求9所述的写入数据的方法,其特征在于,所述从所有的 空存储块中随机选出 一个目标空存储块包括生成一个不大于所有空存储块总数的随机数,利用所述随机数选出一个目 标空存储块;或者遍历所有的存储块查找所有空存储块,建立一个包含有查找到的所有空存 储块的地址列表或所有空存储块的物理块号列表,从列表中随机选出一个目标 空存储块。
12、 根据权利要求11所述的写入数据的方法,其特征在于,在将所述更新 数据写入所述随机选出的空存储块中之前,该方法还包括判断所述随机选出的目标空存储块是否为有记录的空存储块; 如果是,则将所述有记录的空存储块擦除为空存储块; 如果否,则直接利用所述随机选出的目标空存储块。
13、 一种写入数据的装置,其特征在于,包括 接收模块,用于接收写入新数据的指令;定位模块,用于定位需要修改的数据所在的数据存储块;选出模块,用于从所有的空存储块中随机选出一个空存储块;写入模块,用于将所述需要修改的数据与新数据结合为更新数据,将所述 更新数据写入所述随机选出的空存储块中;擦除模块,用于将定位到的数据存储块擦除为空存储块。
14、 根据权利要求13所述的写入数据的装置,其特征在于,所述定位模块 定位的数据存储块由逻辑块号和数据区数据组成,则所述写入模块先将数据区 数椐与新数据结合为更新数据,将所述更新数据与逻辑块号写入所迷随机选出 的空存储块中。
15、 4艮据权利要求14所述的写入数据的装置,其特征在于,所述写入模块 包括读取单元,用于将所述数据读入到内存中;结合单元,用于在内存中将所述数据区数据与新数据结合后生成更新数据; 写入单元,用于将所述更新数据与逻辑块号写入所述随机选出的空存储块中。所述写入单元先将更新数据写入空存储块中,再将逻辑块号写入空存储块中。
16、 根据权利要求14所述的写入数据的装置,其特征在于,该装置还包括 第二判断模块,用于在存储器通电后,判断当前空存储块总数是否小于预设数值;第二随机交换模块,用于当前空存储块总数小于预设数值时,将随机选出 的数据存储块里的数据写入随机选出的目标空存储块中,将所述随机选出的数 据存储块擦除为空存储块。
17、 根据权利要求16所述的写入数据的装置,其特征在于,所述第二随机 交换模块包括第 一选出单元,用于从所有的数据存储块中随机选出 一个数据存储块; 第二选出单元,用于从所有的空存储块中随机选出 一个目标空存储块; 第二判断单元,用于判断所述目标空存储块是否为有记录的空存储块; 第二清除单元,用于当第二判断单元判断是时,将有记录的空存储块擦除 为空存储块;第二写入单元,用于将所述数据存储块里的数据写入所述目标空存储块中; 第二擦除单元,用于将随机选出的数据存储块擦除为空存储块。
18、 根据权利要求17所述的写入数据的装置,其特征在于,所述第一选出 单元包括第一生成子单元,用于生成一个不大于所有数据存储块总数的随机数; 第一定位子单元,用于利用所述随机数定位一个数据存储块。
19、 根据权利要求17所述的写入数据的装置,其特征在于,所述第二选出 单元包括第二生成子单元,用于生成一个不大于所有空存储块总数的随机数; 第二定位子单元,用于利用所述随机数选出一个目标空存储块;或者第二查找子单元,用于遍历所有的存储块查找所有空存储块; 第二建立子单元,用于建立一个包含有查找到的所有空存储块的地址列表 或所有空存储块的物理块号列表;第二选出子单元,用于从所述列表中随机选出 一个目标空存储块。
20、 根据权利要求14所述的写入数据的装置,其特征在于,所述选出模块 包括生成单元,用于生成一个不大于所有空存储块总数的随机数; 定位单元,用于利用所述随机数定位一个空存储块;或者 查找单元,用于遍历所有的存储块查找到所有空存储块; 建立单元,用于建立一个包含有查找到的所有空存储块的地址列表或所有 空存储块的物理块号列表;选出单元,用于从所述列表中随机选出一个空存储块。
21、 根据权利要求13所述的写入数据的装置,其特征在于,该装置还包括 第一判断模块,用于判断所述随机选出的空数据存储块是否为有记录的空存储块;第一清除模块,用于当判断模块判断是时,将所述有记录的空存储块擦除 为空存储块。
22、 根椐权利要求14所述的写入数据的装置,其特征在于,该装置还包括 累计模块,用于将每次对存储块执行的写入操作的次数累计到写入操作的总次数中;第三判断模块,用于判断所述写入操作的总次数是否大于预设次数; 第三随机交换模块,用于当写入操作的总次数大于预设次数时,将随机选 出的数据存储块里的数据写入随机选出的目标空存储块中,并将所述随机选出 的数据存储块擦除为空存储块,同时将写入操作的总次数归零。
23、 根据权利要求22所述的写入数据的装置,其特征在于,所述第三随机 交换模块包括第三选出单元,用于从所有的数据存储块中随机选出 一个数据存储块; 第四选出单元,用于从所有的空存储块中随机选出 一个目标空存储块;第三判断单元,用于判断所述目标空存储块是否为有记录的空存储块; 第三清除单元,用于当第二判断单元判断是时,将有记录的空存储块擦除 为空存储块;第三写入单元,用于将所述数据存储块里的数据写入所述目标空存储块中; 第三擦除单元,用于将所述随机选出的数据存储块擦除为空存储块; 第三归零单元,用于将写入操作的总次数归零。
24、 根据权利要求23所述的写入数据的装置,其特征在于,所述第三选出 单元包括第三生成子单元,用于生成一个不大于所有数据存储块总数的随机数; 第三定位子单元,用于利用所述随机数定位一个数据存储块。
25、 根据权利要求23所述的写入数据的装置,其特征在于,所述第四选出 单元包括第四生成子单元,用于生成一个不大于所有空存储块总数的随机数; 第四定位子单元,用于利用所述随机数选出一个目标空存储块;或者 第四查找子单元,用于遍历所有的存储块查找所有空存^ft块; 第四建立子单元,用于建立一个包含有查找到的所有空存储块的地址列表 或所有空存储块的物理块号列表;第四选出子单元,用于从所述列表中随机选出一个目标空存储块。
全文摘要
本发明实施例公开了一种写入数据方法及装置,涉及数据存储领域,解决了现有技术中存储器中某些存储块容易出现受损较严重的问题。在本发明中接收到写入新数据的指令;定位需要修改的数据所在的数据存储块;从所有的空存储块中随机选出一个空存储块;将所述需要修改的数据与新数据结合为更新数据,将所述更新数据写入所述随机选出的空存储块中;将定位到的数据存储块擦除为空存储块。本发明的实施例主要应用在向存储器执行各种操作时的场景。
文档编号G06F12/02GK101526920SQ20081024705
公开日2009年9月9日 申请日期2008年12月31日 优先权日2008年12月31日
发明者于华章, 舟 陆 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1