闪存的空块回收方法及装置制造方法

文档序号:6542852阅读:160来源:国知局
闪存的空块回收方法及装置制造方法
【专利摘要】本发明公开了一种闪存的空块回收方法及装置,本发明实施例实时检测闪存是否处于空闲状态;在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块数量是否低于第一预设空块数量;在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收;进行完空块回收的算法区中缓存块的有效数据均被转存,且所述缓存块被回收成空块。相较于现有技术,本发明实施例在闪存的空闲时间回收算法区的空块,使得算法区能时刻保持足够的空块量以供写入数据,而不需要在接收到写命令时,为了能继续在写满的算法区中写入数据而不得不将算法区中的数据进行转存,因此,本发明实施例提高了闪存的写性能。
【专利说明】闪存的空块回收方法及装置
【技术领域】
[0001]本发明涉及数据存储领域,尤其涉及闪存的空块回收方法及装置。
【背景技术】
[0002]闪存的物理块通常被划分成算法区和数据区,算法区负责新数据的写入,数据区负责接收并存储算法区转存过来的数据,数据区通常不进行新数据的写入。
[0003]现有技术中,当算法区中的数据存储量达到算法区数据存储量的存储阈值(即存满)时,即当算法区没有空块或者空页可以写入新数据时,此时,闪存如果接收到新数据的写入命令,则需要先把算法区中的数据转存到数据区并回收空块或者空页才能进行新数据的写入。也就是说,闪存在接收到新数据的写入命令时,如果算法区没有空块或者空页可以写入新数据,则闪存对该写入命令的响应速度会非常慢。因此,如何在算法区没有空块或者空页时,提高闪存的新数据写入速度已经成为一个亟待解决的问题。
[0004]上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。

【发明内容】

[0005]本发明的主要目的在于闪存的空块回收方法及装置,旨在通过在闪存的空闲时间回收空块以提高闪存的写性能。
[0006]为实现上述目的,本发明提供的闪存的空块回收方法,包括以下步骤:
[0007]实时检测闪存是否处于空闲状态;
[0008]在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块数量是否
低于第一预设空块数量;
[0009]在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,则对所述算法区进行空块回收。
[0010]优选地,所述实时检测闪存是否处于空闲状态的步骤包括:
[0011]实时检测所述闪存是否有需要执行的命令;
[0012]在所述闪存没有需要执行的命令时,计算空闲时间;
[0013]在计算得到的空闲时间大于预设时间阈值时,则检测出所述闪存处于空闲状态。
[0014]优选地,所述在闪存处于空闲状态时的步骤还包括:
[0015]判断所述闪存中数据区的空块队列的空块数量是否低于第二预设空块数量;
[0016]在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述数据区进行空块回收。
[0017]优选地,所述在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,则对所述算法区进行空块回收的步骤包括:
[0018]在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,在所述算法区的物理块中设置第一目标块,所述第一目标块为进行空块回收的对象;[0019]将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块;
[0020]对完成所述有效数据转存后的所述第一目标块进行擦除,并将擦除后的所述第一目标块插入所述算法区的所述空块队列中。
[0021]优选地,所述在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述数据区进行空块回收的步骤包括:
[0022]在所述数据区的空块队列中的空块数量低于所述第二预设空块数量时,计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块;
[0023]获取所述有效页的数量低于预设有效阈值的物理块的磨损值;
[0024]根据所述磨损值在所述有效页的数量低于预设有效阈值的物理块中设置第二目标块,所述第二目标块为进行空块回收的对象;
[0025]将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上;
[0026]对完成所述有效数据转存后的所述第二目标块进行擦除,并将擦除后的所述第二目标块插入所述数据区的所述空块队列中。
[0027]本发明进一步提供的闪存的空块回收装置,所述装置包括:
[0028]检测模块,用于实时检测闪存是否处于空闲状态;
[0029]第一判断模块,用于在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块数量是否低于第一预设空块数量;
[0030]算法区回收模块,用于在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收。
[0031 ] 优选地,所述检测模块包括:
[0032]检测单元,用于实时检测所述闪存是否有需要执行的命令;
[0033]计算单元,用于在所述闪存没有需要执行的命令时,计算空闲时间;
[0034]分析单元,用于预设时间阈值在计算得到的空闲时间大于预设时间阈值时,则检测出所述闪存处于空闲状态。
[0035]优选地,所述装置包括:
[0036]第二判断模块,用于判断所述闪存中数据区的空块队列的空块数量是否低于第二预设空块数量;
[0037]数据区回收模块,用于在所述数据区的空块队列中的空块数量低于所述第二预设空块数量时,则对所述闪存的数据区进行空块回收。
[0038]优选地,所述算法区回收模块还包括:
[0039]第一设置单元,用于在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,在所述算法区的物理块中设置第一目标块,所述第一目标块为进行空块回收的对象;
[0040]第一转存单元,用于将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块上;
[0041]第一插入单元,用于对完成所述有效数据转存后的所述第一目标块进行擦除,并将擦除后的所述第一目标块插入所述算法区的所述空块队列中。
[0042]优选地,所述数据区回收模块还包括:[0043]获取物理块单元,用于在所述数据区的空块队列中的空块数量低于所述第二预设空块数量时,计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块;
[0044]获取磨损值单元,用于获取所述有效页的数量低于预设有效阈值的物理块的磨损值;
[0045]第二设置单元,用于根据所述磨损值在所述有效页的数量低于预设有效阈值的物理块中设置第二目标块,所述第二目标块为进行空块回收的对象;
[0046]第二转存单元,用于将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上;
[0047]第二插入单元,用于对完成所述有效数据转存后的所述第二目标块进行擦除,并将擦除后的所述第二目标块插入所述数据区的所述空块队列中。
[0048]本发明实施例实时检测闪存是否处于空闲状态;在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块数量是否低于第一预设空块数量;在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收;相较于现有技术,本发明实施例在闪存的空闲时间回收所述算法区的空块,使得算法区能时刻保持足够的剩余存储量以供写入数据,而不需要在接收到写命令时,为了能继续在写满的算法区中写入数据而必须先将算法区中的数据进行转存,因此,本发明实施例提高了闪存的写性能。
【专利附图】

【附图说明】
[0049]图1为本发明闪存的空块回收方法第一实施例的流程示意图;
[0050]图2为本发明闪存的空块回收方法第二实施例的流程示意图;
[0051]图3为图2闪存的空块回收方法中所述在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述数据区进行空块回收的步骤的具体流程示意图;
[0052]图4为本发明闪存的空块回收方法第三实施例的流程示意图;
[0053]图5为本发明闪存的空块回收装置第一实施例的功能模块示意图;
[0054]图6为图5闪存的空块回收装置中检测模块的功能单元示意图
[0055]图7为本发明闪存的空块回收装置第二实施例的功能模块示意图;
[0056]图8为图7闪存的空块回收装置中数据区回收模块的功能单元示意图;
[0057]图9为本发明闪存的空块回收装置第三实施例的功能模块示意图。
[0058]本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
【具体实施方式】
[0059]应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0060]本领域技术人员可以理解,本发明闪存的空块回收方法及装置的下述实施例中,所述闪存中的物理块已至少被分为两个分区,分别为算法区和数据区,所述算法区负责新数据的写入,所述数据区负责接收并存储所述算法区搬移过来的数据,所述数据区不直接进行新数据的写入,上述至少具有所述算法区和所述数据区的闪存是现有的产品,本发明实施例对所述闪存的具体的分区方法不进行一一赘述。[0061]本发明提供一种闪存的空块回收方法,参照图1,为所述方法的第一实施例,该闪存的空块回收方法包括以下步骤:
[0062]步骤Sll,实时检测闪存是否处于空闲状态;
[0063]装置对闪存是否处于空闲状态进行实时检测,例如,装置可以是对所述闪存是否接收到需要执行的命令进行实时检测,若在预设时长内(如3分钟内),装置没有检测到所述闪存有需要执行的命令,则识别所述闪存处于空闲状态,若在预设时长内装置检测到了所述闪存有需要执行的命令,则识别所述闪存不处于空闲状态。
[0064]当装置检测到闪存处于空闲状态时,则执行步骤S12,当装置检测到闪存不处于空闲状态时,则装置停止进行实时检测的任务,所述闪存响应接收到的命令并执行相应任务。
[0065]步骤S12,在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块
数量是否低于第一预设空块数量;
[0066]步骤S13,在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收。
[0067]在所述闪存处于空闲状态时,装置需要判断所述闪存的算法区是否需要进行空块回收,判断的依据是所述算法区的空块队列的空块数量是否低于第一预设空块数量。所述第一预设空块数量是所述算法区空块数量的较优值,即当所述算法区中空块数量大于或者等于所述第一预设空块数量时,所述算法区有足够的数据空间容纳新数据的写入且新数据的写入速度快、效率高,装置根据所述算法区中空块数量的历史数据设置所述第一预设空块数量,或者装置基于用户侧用户触发的设置指令设置所述第一预设空块数量。
[0068]在装置判断得到所述算法区的空块队列中的空块数量大于或者等于所述第一预设空块数量时,终止执行或者返回重复所述实时检测闪存是否处于空闲状态的步骤。在装置判断得到所述算法区的空块队列中的空块数量小于所述第一预设空块数量时,装置识别所述算法区需要进行空块回收以使得其空块数量达到所述第一预设空块数量,此时,装置随机选取物理块或者按照预设规则选取物理块作为需要被回收成空块的物理块,或者根据用户触发的选择指令选取物理块作为需要被回收成空块的物理块,将所述需要回收成空块的物理块上的有效数据转存至其他物理块上,然后将所述目标物理块进行擦除,并将擦除后的物理块插入所述算法区的所述空块队列中。
[0069]在本实施例一优选实施例中,在所述对所述数据区进行空块回收的步骤之后或者在所述对所述数据区进行空块回收的步骤之后,包括:更新闪存转换层的地址映射表。
[0070]本实施例实时检测闪存是否处于空闲状态;在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列中的空块数量是否低于第一预设空块数量;在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收;相较于现有技术,本发明实施例在闪存的空闲时间回收各分区的空块,使得算法区能时刻保持足够的剩余存储量以供写入数据,而不需要在接收到写命令时,为了能继续在写满的算法区中写入数据而将算法区中的数据进行转存,因此,本发明实施例提高了闪存的写性能。
[0071]请再次参照图1,如图1所示,本发明闪存的空块回收方法中,步骤S11,实时检测闪存是否处于空闲状态的步骤包括:
[0072]实时检测所述闪存是否有需要执行的命令;
[0073]在所述闪存没有需要执行的命令时,计算空闲时间;[0074]预设时间阈值在计算得到的空闲时间大于预设时间阈值时,则检测出所述闪存处于空闲状态。
[0075]装置实时检测所述闪存是否有需要执行的命令,在所述闪存有需要执行的命令时,装置则终止执行或者重复所述实时检测所述闪存是否有需要执行的命令的步骤,而闪存则响应该命令且执行该命令;在所述闪存没有需要执行的命令时,装置开始计算空闲时间,所述空闲时间是指在所述闪存没有需要执行的命令状态持续的时间,所述空闲时间的计算方法可以是直接通过计时的方法计算得到所述空闲时间,也可以是计算空闲周期的循环次数,将所述循环次数乘以完成一次所述空闲周期需要的时间即得所述空闲时间,还可以是直接将计算得到的所述循环次数作为所述空闲时间。例如,装置在所述闪存没有需要执行的命令时,每隔一个空闲周期(即I毫秒)记录一次循环次数,即每经过一个I毫秒,所述循环次数增加数目“1”,若计算得到所述循环次数为300次,那么所述空闲时间为3秒。或者,装置在所述闪存没有需要执行的命令时,反复执行所述实时检测闪存是否处于空闲状态的步骤,若装置设定执行一次所述实时检测闪存是否处于空闲状态的步骤为一个空闲周期,装置执行了 100次所述实时检测闪存是否处于空闲状态的步骤,则计算得到所述循环次数为100次,将所述循环次数作为所述空闲时间,即所述空闲时间为100次循环周期。
[0076]在装置计算得到空闲时间大于预设时间阈值时,则检测出所述闪存处于空闲状态,装置继续执行下一步骤;在装置计算得到空闲时间小于或等于所述预设时间阈值时,则检测出所述闪存没有处于空闲状态,装置终止执行或者重复所述实时检测所述闪存是否有需要执行的命令的步骤。所述预设时间阈值可以是装置对所述预设时间阈值的历史记录数据,由装置本身设定,或者,由装置根据用户侧的技术人员触发的设置指令,接收技术人员设置的上述预设时间阈值。例如,装置设置所述预设时间阈值为2秒,若装置计算得到的空闲时间大于2秒,则装置检测出所述闪存处于空闲状态,若装置计算得到的空闲时间小于或者等于2秒,则装置检测出所述闪存没有处于空闲状态。
[0077]本实施例中装置通过实时检测所述闪存是否有需要执行的命令来判断所述闪存是否处于空闲状态,这是因为闪存在执行完命令之后,所述算法区中的物理块通常写入了新数据或者进行了数据的转存,因此装置设定所述闪存在没有任何需要执行的命令时为空闲状态,且在所述闪存处于空闲状态时才执行下一步骤,使得装置在执行下一步骤的同时不影响闪存正常执行命令。
[0078]如图2所示,为本发明闪存的空块回收方法的第二实施例,本实施例在第一实施例的基础上,所述在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收的步骤之后包括:
[0079]步骤S14,判断所述闪存中数据区的空块队列的空块数量是否低于第二预设空块
数量;
[0080]步骤S15,在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述数据区进行空块回收。
[0081]在对所述算法区进行空块回收之后,装置判断所述闪存的数据区是否需要进行空块回收,判断的依据是所述数据区的空块队列的空块数量是否低于第二预设空块数量。所述第二预设空块数量是所述数据区空块数量的较优值,即当所述数据区中空块数量大于或者等于所述第二预设空块数量时,所述数据区有足够的数据空间容纳从所述算法区转存过来的数据,以确保对所述算法区的空块回收能够流畅的进行,装置根据所述数据区中空块数量的历史数据设置所述第二预设空块数量,或者装置基于用户侧用户触发的设置指令设置所述第二预设空块数量。
[0082]在装置判断得到所述数据区的空块队列中的空块数量大于或者等于所述第二预设空块数量时,装置识别所述数据区不需要进行空块回收,直接执行步骤S12 ;
[0083]步骤S12,在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块
数量是否低于第一预设空块数量。
[0084]在装置判断得到所述数据区的空块队列中的空块数量小于所述第二预设空块数量时,装置识别所述数据区中空块数量不足而可能导致在对所述算法区进行空块回收时因所述数据区存储空间不足而停止执行空块回收或者对所述算法区执行空块回收不流畅等问题,因此装置需要对所述数据区进行空块回收以使得其空块数量达到所述第二预设空块数量,此时,装置随机选取物理块或者按照预设规则选取物理块作为需要被回收成空块的物理块,将所述需要回收成空块的物理块上的有效数据转存至其他物理块上,然后将所述目标物理块进行擦除,并将擦除后的物理块插入所述数据区的空块队列中。
[0085]本实施例通过判断所述数据区中的空块数量是否达到所述第二预设空块数量,从而确认所述数据区是否需要进行空块回收,所述数据区中空块的数量直接影响装置对所述算法区进行空块回收是否能正常进行,因此在对所述算法区进行空块回收之前增加判断所述数据区是否需要进行空块回收,以保证所述数据区中有足够的存储空间供所述算法区转存数据,从而使得装置对所述算法区的空块回收保持较高的效率。
[0086]如图3所示,图3为图2闪存的空块回收方法中所述在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述数据区进行空块回收的步骤的具体流程示意图,在本实施例一优选实施例中,所述在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述数据区进行空块回收的步骤包括:
[0087]步骤S151,在所述数据区的空块队列中的空块数量低于第二预设空块数量时,计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块;
[0088]在所述数据区的空块队列中的空块数量低于第二预设空块数量时,装置计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块,所述预设有效阈值可以是装置自行设定的也可以是装置根据用户发送的设定指令设定的。当物理块的有效页的数量低于所述预设有效阈值时,表示所述物理块剩余的存储量较少,获取这些快存满的物理块并对这些物理块进行优先处理,而对于剩余的存储量还较多的物理块留置继续接收转存的数据,就可以减少所述数据区中物理块的擦写次数,延长所述闪存的寿命,若计算得到所述数据区中各物理块的有效页的数量均高于预设有效阈值的物理块,则终止执行。
[0089]在本实施例一优选实施例中,在获取所述有效页的数量低于预设有效阈值的物理块之后,装置还可以进一步的根据需要选取出一定数量的物理块(如5个物理块)执行下一个步骤。进一步选取一定数量的物理块执行下一步骤的目的是防止用于执行下一个步骤的物理块过多,造成后续的步骤需要花费的时间过长,使得装置可能还没有完整的执行完一次空块回收,闪存已经不在空闲状态了,而此时装置就必须中断执行空块回收的步骤。[0090]步骤S152,获取所述有效页的数量低于预设有效阈值的物理块的磨损值;
[0091]装置通过读取所述有效页的数量低于预设有效阈值的物理块的信息表或者读取该物理块所在的所述数据区的区信息表获取该物理块的磨损值,所述磨损值是指物理块经多次擦写后其磨损程度的值,所述磨损值可以是一个量化数据也可以是一个可以体现各物理块磨损程度的差异的代码或者是其他任何适合的形式。
[0092]步骤S153,根据所述磨损值在所述有效页的数量低于预设有效阈值的物理块中设置第二目标块,所述第二目标块为进行空块回收的对象;
[0093]装置在所述有效页的数量低于预设有效阈值的物理块中选取所述第二目标块,可以将所述有效页的数量低于预设有效阈值的物理块中磨损值最高的物理块设置为所述第二目标块作为进行空块回收的对象。
[0094]步骤S154,将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上;
[0095]装置将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上,所述第二预设粒度是指装置或者用户设定的转存所述有效数据的最小数据量。所述第二预设粒度越小,闪存就能更快更流畅的响应下一条命令,例如,若所述第二目标块为三层单元物理块(TLC物理块),而所述接收所述第二目标块转存的有效数据的所述算法区物理块为单层单元物理块(SLC物理块),那么可以将所述第二预设粒度设置为一个页。若所述第二目标块上没有所述有效数据,那么所述第二目标块没有需要转存的数据,则不执行此步骤,直接执行下一步骤。
[0096]步骤S155,对完成所述有效数据转存后的所述第二目标块进行擦除,并将擦除后的所述第二目标块插入所述数据区的所述空块队列中。
[0097]装置在完成所述第二目标块的有效数据的转存后,对所述第二目标块进行擦除,即当所述第二目标块上的有效数据被转存后,所述第二目标块上只剩下无效数据或者已经没有剩余数据,装置对所述第二目标块进行擦除后,所述第二目标块已经成为空块,将已成为空块的第二目标块插入所述数据区的空块队列中,此时,所述数据区的空块队列的空块数量增加,在装置下一次对所述算法区进行空块回收时,所述数据区有足够的空块以供转存数据,从而提高了所述算法区空块回收的效率。
[0098]如图4所示,为本发明闪存的空块回收方法的第三实施例,本实施例在第一实施例、第二实施例的基础上,所述在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收的步骤包括:
[0099]步骤S131,在所述算法区的空块队列中的空块数量低于第一预设空块数量时,在所述算法区的物理块中设置第一目标块,所述第一目标块为进行空块回收的对象;
[0100]在所述算法区的空块队列中的空块数量低于第一预设空块数量时,装置识别算法区中有数据存储的缓存物理块(缓存块),在所述有数据存储的缓存物理块中随机选取物理块或者按照预设规则在所述算法区的物理块中选取物理块作为第一目标块,或者根据用户触发的选择指令选取物理块作为第一目标块,所述第一目标块为进行空块回收的对象,即所述第一目标块为需要将其回收成空块的物理块。
[0101]步骤S132,将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块上;[0102]装置将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块上,所述第一预设粒度是指装置或者用户设定的转存所述有效数据的最小数据量。所述第一预设粒度越小,闪存就能更快更流畅的响应下一条命令,例如,若所述第一目标块为单层单元物理块(SLC物理块),而所述接收所述第一目标块转存的有效数据的所述数据区物理块为三层单元物理块(TLC物理块),那么可以将所述第一预设粒度设置为三个页。若所述第一目标块上没有所述有效数据,那么所述第一目标块没有需要转存的数据,则不执行此步骤,直接执行下一步骤。
[0103]步骤S133,对完成所述有效数据转存后的所述第一目标块进行擦除,并将擦除后的所述第一目标块插入所述算法区的所述空块队列中。
[0104]装置在完成所述第一目标块的有效数据的转存后,对所述第一目标块进行擦除,即当所述第一目标块上的有效数据被转存后,所述第一目标块上只剩下无效数据或者已经没有剩余数据,装置对所述第一目标块进行擦除后,所述第一目标块已经成为空块,将已成为空块的第一目标块插入所述算法区的空块队列中,此时,所述算法区的空块队列的空块数量增加,在所述闪存执行下一次的写任务时,所述算法区有足够的空块以供写入,从而提高了所述闪存的写性能。
[0105]本发明进一步提供的一种闪存的空块回收装置,参照图5,为所述装置的第一实施例,该闪存的空块回收装置包括:
[0106]检测模块11,用于实时检测闪存是否处于空闲状态;
[0107]检测模块11对闪存是否处于空闲状态进行实时检测,例如,检测模块11可以是对所述闪存是否接收到需要执行的命令进行实时检测,若在预设时长内(如3分钟内),检测模块11没有检测到所述闪存有需要执行的命令,则识别所述闪存处于空闲状态,若在预设时长内检测模块11检测到了所述闪存有需要执行的命令,则识别所述闪存不处于空闲状态。当检测模块11检测到闪存处于空闲状态时,则执行步骤S12,当检测模块11检测到闪存不处于空闲状态时,则检测模块11停止进行实时检测的任务,所述闪存响应接收到的命令并执行相应任务。
[0108]第一判断模块12,用于在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块数量是否低于第一预设空块数量;
[0109]算法区回收模块13,用于在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收。
[0110]在所述闪存处于空闲状态时,第一判断模块12需要判断所述闪存的算法区是否需要进行空块回收,判断的依据是所述算法区的空块队列的空块数量是否低于第一预设空块数量。所述第一预设空块数量是所述算法区空块数量的较优值,即当所述算法区中空块数量大于或者等于所述第一预设空块数量时,所述算法区有足够的数据空间容纳新数据的写入且新数据的写入速度快、效率高,第一判断模块12根据所述算法区中空块数量的历史数据设置所述第一预设空块数量,或者第一判断模块12基于用户侧用户触发的设置指令设置所述第一预设空块数量。第一判断模块12在对所述闪存进行空块回收之前,对所述闪存的算法区和数据区是否需要进行空块回收进行判断有利于装置选定空块回收的对象,提高空块回收的效率。
[0111]在第一判断模块12判断得到所述算法区的空块队列中的空块数量大于或者等于所述第一预设空块数量时,终止执行或者返回检测模块11重复所述实时检测闪存是否处于空闲状态的步骤。
[0112]在第一判断模块12判断得到所述算法区的空块队列中的空块数量小于所述第一预设空块数量时,第一判断模块12识别所述算法区需要进行空块回收以使得其空块数量达到所述第一预设空块数量,此时,算法区回收模块13随机选取物理块或者按照预设规则选取物理块作为需要被回收成空块的物理块,或者根据用户触发的选择指令选取物理块作为需要被回收成空块的物理块,将所述需要回收成空块的物理块上的有效数据转存至其他物理块上,然后将所述目标物理块进行擦除,并将擦除后的物理块插入所述算法区的所述空块队列中。
[0113]在本实施例一优选实施例中,所述装置还包括:更新模块(图中未示出),用于更新闪存转换层的地址映射表。
[0114]本实施例检测模块11实时检测闪存是否处于空闲状态;在所述闪存处于空闲状态时,第一判断模块12判断所述闪存中算法区的空块队列中的空块数量是否低于第一预设空块数量;算法区回收模块13在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收;相较于现有技术,本发明实施例的装置在闪存的空闲时间回收各分区的空块,使得算法区能时刻保持足够的剩余存储量以供写入数据,而不需要在接收到写命令时,为了能继续在写满的算法区中写入数据而将算法区中的数据进行转存,因此,本发明实施例提高了闪存的写性能。
[0115]如图6所示,图6为图5闪存的空块回收装置中所述检测模块11的功能单元示意图。在本实施例一优选实施例中,所述检测模块11包括:
[0116]检测单元111,用于实时检测所述闪存是否有需要执行的命令;
[0117]计算单元112,用于在所述闪存没有需要执行的命令时,计算空闲时间;
[0118]分析单元113,用于预设时间阈值在计算得到的空闲时间大于预设时间阈值时,则检测出所述闪存处于空闲状态。
[0119]检测单元111实时检测所述闪存是否有需要执行的命令,在所述闪存有需要执行的命令时,检测单元111则终止执行或者重复所述实时检测所述闪存是否有需要执行的命令的步骤,而闪存则响应该命令且执行该命令;在所述闪存没有需要执行的命令时,计算单元112开始计算空闲时间,所述空闲时间是指在所述闪存没有需要执行的命令的时间,所述空闲时间的计算方法可以是直接通过计时的方法计算得到所述空闲时间,也可以是计算空闲周期的循环次数,将所述循环次数乘以完成一次所述空闲周期需要的时间即得所述空闲时间,还可以是直接将计算得到的所述循环次数作为所述空闲时间。例如,计算单元112在所述闪存没有需要执行的命令时,每隔一个空闲周期(即I毫秒)记录一次循环次数,即每经过一个I毫秒,所述循环次数增加数目“ I ”,若计算得到所述循环次数为300次,那么所述空闲时间为3秒。或者,计算单元112在所述闪存没有需要执行的命令时,检测单元111反复执行所述实时检测闪存是否处于空闲状态的步骤,若计算单元112设定检测单元111执行一次所述实时检测闪存是否处于空闲状态的步骤为一个空闲周期,检测单元111执行了100次所述实时检测闪存是否处于空闲状态的步骤,则计算单元112计算得到所述循环次数为100次,将所述循环次数作为所述空闲时间,即所述空闲时间为100次循环周期。在计算单元112计算得到空闲时间大于预设时间阈值时,则分析单元113检测出所述闪存处于空闲状态,装置继续执行下一步骤;在计算单元112计算得到空闲循环次数小于或等于所述预设时间阈值时,则分析单元113检测出所述闪存没有处于空闲状态,分析单元113终止执行或者返回检测单元111重复所述实时检测所述闪存是否有需要执行的命令的步骤。所述预设时间阈值可以是预设时间阈值由分析单元113本身设定或者由用户侧的技术人员设置,接收技术人员设置的上述预设时间阈值。例如,计算单元112设置所述预设时间阈值为2秒,若计算单元112计算得到的空闲时间大于2秒,则分析单元113检测出所述闪存处于空闲状态,若计算单元112计算得到的空闲时间小于或者等于2秒,则分析单元113检测出所述闪存没有处于空闲状态。
[0120]本实施例中检测单元111通过实时检测所述闪存是否有需要执行的命令来判断所述闪存是否处于空闲状态,这是因为闪存在执行完命令之后,所述算法区中的物理块通常写入了新数据或者进行了数据的转存,因此检测模块11设定所述闪存在没有任何需要执行的命令时为空闲状态,且在所述闪存处于空闲状态时才执行下一步骤,使得装置在执行下一步骤的同时不影响闪存正常执行命令。
[0121]如图7所示,为本发明闪存的空块回收装置的第二实施例,本实施例在第一实施例的基础上,优选地,所述装置包括:
[0122]第二判断模块14,用于判断所述闪存中数据区的空块队列的空块数量是否低于第
二预设空块数量;
[0123]数据区回收模块15,用于在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述数据区进行空块回收。
[0124]第二判断模块14判断所述闪存的数据区是否需要进行空块回收,判断的依据是所述数据区的空块队列的空块数量是否低于第二预设空块数量。所述第二预设空块数量是所述数据区空块数量的较优值,即当所述数据区中空块数量大于或者等于所述第二预设空块数量时,所述数据区有足够的数据空间容纳从所述算法区转存过来的数据,以确保对所述算法区的空块回收能够流畅的进行,第二判断模块14根据所述数据区中空块数量的历史数据设置所述第二预设空块数量,或者第二判断模块14基于用户侧用户触发的设置指令设置所述第二预设空块数量。
[0125]在第二判断模块14判断得到所述数据区的空块队列中的空块数量大于或者等于所述第二预设空块数量时,第二判断模块14识别所述数据区不需要进行空块回收,直接通过第一判断模块12执行步骤S12。
[0126]步骤S12,在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块
数量是否低于第一预设空块数量。
[0127]在第二判断模块14判断得到所述数据区的空块队列中的空块数量小于所述第二预设空块数量时,第二判断模块14识别所述数据区中空块数量不足而可能导致在对所述算法区进行空块回收时因所述数据区存储空间不足而停止执行空块回收或者对所述算法区执行空块回收不流畅等问题,因此数据区回收模块15需要对所述数据区进行空块回收以使得其空块数量达到所述第二预设空块数量,此时,数据区回收模块15随机选取物理块或者按照预设规则选取物理块作为需要被回收成空块的物理块,将所述需要回收成空块的物理块上的有效数据转存至其他物理块上,然后将所述目标物理块进行擦除,并将擦除后的物理块插入所述数据区的空块队列中。[0128]本实施例通过第二判断模块14判断所述数据区中的空块数量是否达到所述第二预设空块数量,从而确认所述所述数据区是否需要进行空块回收,所述数据区中空块的数量直接影响算法区回收模块13对所述算法区进行空块回收是否能正常进行,因此增加第二判断模块14判断所述数据区是否需要进行空块回收,以保证所述数据区中有足够的存储空间供所述算法区转存数据,从而使得算法区回收模块13对所述算法区的空块回收保持较高的效率。
[0129]如图8所示,图8为图7闪存的空块回收装置中所述数据区回收模块15的功能单元示意图,在本实施例一优选实施例中,所述数据区回收模块15包括:
[0130]获取物理块单元151,用于在所述数据区的空块队列中的空块数量低于第二预设空块数量时,计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块;
[0131]在所述数据区的空块队列中的空块数量低于第二预设空块数量时,获取物理块单元151计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块,所述预设有效阈值可以是获取物理块单元151自行设定的也可以是获取物理块单元151根据用户发送的设定指令设定的。当物理块的有效页的数量低于所述预设有效阈值时,表示所述物理块剩余的存储量较少,获取物理块单元151获取这些快存满的物理块并对这些物理块进行优先处理,而对于剩余的存储量还较多的物理块留置继续接收转存的数据,就可以减少所述数据区中物理块的擦写次数,延长所述闪存的寿命,若计算得到所述数据区中各物理块的有效页的数量均高于预设有效阈值的物理块,则终止执行。。
[0132]在本实施例一优选实施例中,获取物理块单元151在获取所述有效页的数量低于预设有效阈值的物理块之后,还可以进一步的根据需要选取出一定数量的物理块(如5个物理块)执行下一个步骤。进一步选取一定数量的物理块执行下一步骤的目的是防止用于执行下一个步骤的物理块过多,造成后续的步骤需要花费的时间过长,使得装置可能还没有完整的执行完一次空块回收,闪存已经不在空闲状态了,而此时装置就必须中断执行空块回收的步骤。
[0133]获取磨损值单元152,用于获取所述有效页的数量低于预设有效阈值的物理块的磨损值;
[0134]获取磨损值单元152通过读取所述有效页的数量低于预设有效阈值的物理块的信息表或者读取该物理块所在的所述数据区的区信息表获取该物理块的磨损值,所述磨损值是指物理块经多次擦写后其磨损程度的值,所述磨损值可以是一个量化数据也可以是一个可以体现各物理块磨损程度的差异的代码或者是其他任何适合的形式。
[0135]第二设置单元153,用于根据所述磨损值在所述有效页的数量低于预设有效阈值的物理块中设置第二目标块,所述第二目标块为进行空块回收的对象;
[0136]第二设置单元153在所述有效页的数量低于预设有效阈值的物理块中选取所述第二目标块,可以将所述有效页的数量低于预设有效阈值的物理块中磨损值最高的物理块设置为所述第二目标块作为进行空块回收的对象;
[0137]第二转存单元154,用于将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上;
[0138]第二转存单元154将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上,所述第二预设粒度是指装置或者用户设定的转存所述有效数据的最小数据量。所述第二预设粒度越小,闪存就能更快更流畅的响应下一条命令,例如,若所述第二目标块为三层单元物理块(TLC物理块),而所述接收所述第二目标块转存的有效数据的所述算法区物理块为单层单元物理块(SLC物理块),那么可以将所述第二预设粒度设置为一个页。若所述第二目标块上没有所述有效数据,那么所述第二目标块没有需要转存的数据,则不执行此步骤,直接执行下一步骤。
[0139]第二插入单元155,用于对完成所述有效数据转存后的所述第二目标块进行擦除,并将擦除后的所述第二目标块插入所述数据区的所述空块队列中。
[0140]在完成所述第二目标块的有效数据的转存后,第二插入单元155对所述第二目标块进行擦除,即当所述第二目标块上的有效数据被转存后,所述第二目标块上只剩下无效数据或者已经没有剩余数据,第二插入单元155对所述第二目标块进行擦除后,所述第二目标块已经成为空块,第二插入单元155再将已成为空块的第二目标块插入所述数据区的空块队列中,此时,所述数据区的空块队列的空块数量增加,在装置下一次对所述算法区进行空块回收时,所述数据区有足够的空块以供转存数据,从而提高了所述算法区空块回收的效率。
[0141]如图9所示,为本发明闪存的空块回收装置的第三实施例,本实施例在第一实施例、第二实施例的基础上,所述算法区回收模块13包括:
[0142]第一设置单元131,用于在所述算法区的空块队列中的空块数量低于第一预设空块数量时,所述第一目标块为进行空块回收的对象;
[0143]在所述算法区的空块队列中的空块数量低于第一预设空块数量时,第一设置单元131识别算法区中有数据存储的缓存物理块(缓存块),在所述有数据存储的缓存物理块中随机选取物理块或者按照预设规则在所述算法区的物理块中选取物理块作为第一目标块,或者根据用户触发的选择指令选取物理块作为第一目标块,所述第一目标块为进行空块回收的对象,即所述第一目标块为需要将其回收成空块的物理块。
[0144]第一转存单元132,用于将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块上;
[0145]第一转存单元132将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块上,所述第一预设粒度是指第一转存单元132或者用户设定的转存所述有效数据的最小数据量。所述第一预设粒度越小,闪存就能更快更流畅的响应下一条命令,例如,若所述第一目标块为单层单元物理块(SLC物理块),而所述接收所述第一目标块转存的有效数据的所述数据区物理块为三层单元物理块(TLC物理块),那么可以将所述第一预设粒度设置为三个页。若所述第一目标块上没有所述有效数据,那么所述第一目标块没有需要转存的数据,则不执行此步骤,直接执行下一步骤。
[0146]第一插入单元133,用于对完成所述有效数据转存后的所述第一目标块进行擦除,并将擦除后的所述第一目标块插入所述算法区的所述空块队列中。
[0147]第一转存单元132在完成所述第一目标块的有效数据的转存后,第一插入单元133对所述第一目标块进行擦除,即当所述第一目标块上的有效数据被转存后,所述第一目标块上只剩下无效数据或者已经没有剩余数据,第一插入单元133对所述第一目标块进行擦除后,所述第一目标块已经成为空块,第一插入单元133将已成为空块的第一目标块插入所述算法区的空块队列中,此时,所述算法区的空块队列的空块数量增加,在所述闪存执行下一次的写任务时,所述算法区有足够的空块以供写入,从而提高了所述闪存的写性能。
[0148]以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的【技术领域】,均同理包括在本发明的专利保护范围内。
【权利要求】
1.一种闪存的空块回收方法,其特征在于,包括以下步骤: 实时检测闪存是否处于空闲状态; 在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列的空块数量是否低于第一预设空块数量; 在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,则对所述算法区进行空块回收。
2.如权利要求1所述的闪存的空块回收方法,其特征在于,所述实时检测闪存是否处于空闲状态的步骤包括: 实时检测所述闪存是否有需要执行的命令; 在所述闪存没有需要执行的命令时,计算空闲时间; 在计算得到的空闲时间大于预设时间阈值时,则检测出所述闪存处于空闲状态。
3.如权利要求1或2所述的闪存的空块回收方法,其特征在于,所述在所述闪存处于空闲状态时的步骤还包括: 判断所述闪存中数据区的空块队列的空块数量是否低于第二预设空块数量; 在所述数据区的空块队列中的空块数量低于所述第二预设空块数量时,则对所述数据区进行空块回收。
4.如权利要求1或2所述的闪存的空块回收方法,其特征在于,所述在所述算法区的空块队列中的空块数量低于第一预设空块数量时,则对所述算法区进行空块回收的步骤包括: 在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,在所述算法区的物理块中设置第一目标块,所述第一目标块为进行空块回收的对象; 将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块上; 对完成所述有效数据转存后的所述第一目标块进行擦除,并将擦除后的所述第一目标块插入所述算法区的所述空块队列中。
5.如权利要求3所述的闪存的空块回收方法,其特征在于,所述在所述数据区的空块队列中的空块数量低于所述第二预设空块数量时,则对所述数据区进行空块回收的步骤包括: 在所述数据区的空块队列中的空块数量低于所述第二预设空块数量时,计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块;获取所述有效页的数量低于预设有效阈值的物理块的磨损值; 根据所述磨损值在所述有效页的数量低于预设有效阈值的物理块中设置第二目标块,所述第二目标块为进行空块回收的对象; 将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上; 对完成所述有效数据转存后的所述第二目标块进行擦除,并将擦除后的所述第二目标块插入所述数据区的所述空块队列中。
6.一种闪存的空块回收装置,其特征在于,所述装置包括: 检测模块,用于实时检测闪存是否处于空闲状态; 第一判断模块,用于在所述闪存处于空闲状态时,判断所述闪存中算法区的空块队列 的空块数量是否低于第一预设空块数量;算法区回收模块,用于在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,则对所述算法区进行空块回收。
7.如权利要求6所述的闪存的空块回收装置,其特征在于,所述检测模块包括: 检测单元,用于实时检测所述闪存是否有需要执行的命令; 计算单元,用于在所述闪存没有需要执行的命令时,计算空闲时间; 分析单元,用于预设时间阈值在计算得到的空闲时间大于预设时间阈值时,则检测出所述闪存处于空闲状态。
8.如权利要求6或7所述的闪存的空块回收装置,其特征在于,所述装置包括: 第二判断模块,用于在所述闪存处于空闲状态时,判断所述闪存中数据区的空块队列的空块数量是否低于第二预设空块数量; 数据区回收模块,用于在所述数据区的空块队列中的空块数量低于第二预设空块数量时,则对所述闪存的数据区进行空块回收。
9.如权利要求6或7所述的闪存的空块回收装置,其特征在于,所述算法区回收模块还包括: 第一设置单元,用于在所述算法区的空块队列中的空块数量低于所述第一预设空块数量时,在所述算法区的物理块中设置第一目标块,所述第一目标块为进行空块回收的对象; 第一转存单元,用于将所述第一目标块中的有效数据以第一预设粒度转存至所述数据区的物理块上; 第一插入单元,用于对完成所述有效数据转存后的所述第一目标块进行擦除,并将擦除后的所述第一目标块插入所述算法区的所述空块队列中。
10.如权利要求8所述的闪存的空块回收装置,其特征在于,所述数据区回收模块还包括: 获取物理块单元,用于在所述数据区的空块队列中的空块数量低于所述第二预设空块数量时,计算所述数据区中各物理块的有效页的数量,获取所述有效页的数量低于预设有效阈值的物理块; 获取磨损值单元,用于获取所述有效页的数量低于预设有效阈值的物理块的磨损值;第二设置单元,用于根据所述磨损值在所述有效页的数量低于预设有效阈值的物理块中设置第二目标块,所述第二目标块为进行空块回收的对象; 第二转存单元,用于将所述第二目标块中的有效数据以第二预设粒度转存至所述算法区的物理块上; 第二插入单元,用于对完成所述有效数据转存后的所述第二目标块进行擦除,并将擦除后的所述第二目标块插入所述数据区的所述空块队列中。
【文档编号】G06F12/02GK103914392SQ201410132252
【公开日】2014年7月9日 申请日期:2014年4月3日 优先权日:2014年4月3日
【发明者】谭星, 吴大畏, 陈寄福 申请人:深圳市硅格半导体有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1