本发明涉及非易失存储器领域,特别是一种控制映射表的方法以及装置。
背景技术:
垃圾回收机制是指在非易失存储器使用时,如果不进行垃圾回收,非易失存储器的数据存储块迟早都会被消耗空,因为我们在不断的分配存储空间而不进行回收,除非存储空间无限大,我们可以任性的分配而不回收,但是事实并非如此,所以,垃圾回收是必须的。
现有的非易失存储器在进行数据写入时,会在高速缓存中建立一个活动的映射表,接收的数据进入slcblock同时生成活动映射表,当活动映射表中映射关系个数达到规定值后,垃圾回收机制将对活动映射表及其对应的活动slcblock进行垃圾回收,目的是消除活动slcblock中的无效数据,合并有效数据到一个新的slcblock中。
而但是由于一次性完成垃圾回收的时间大约是在0.5ms,非易失存储器需要等待0.5ms垃圾回收操作完成后,才可以继续响应后续操作,对于非易失存储器需要高效的运行效率来讲,这个时间太长,导致非易失存储器的工作效率低下。
技术实现要素:
鉴于上述问题,本发明提供一种控制映射表的方法以及装置,解决了现有技术中非易失存储器进行一次垃圾回收操作的时间过长,导致非易失存储器工作效率低下的问题。
本发明实施例提供了一种控制映射表的方法,所述方法应用于非易失存储器,所述非易失存储器包括:活动映射表和slcblock,所述活动映射表为目标数据的逻辑地址,与slcblock中存储目标数据的物理地址之间映射关系的表,所述slcblock为存储目标数据的存储块,所述slcblock中存储的目标数据包括:有效目标数据和无效目标数据,所述方法包括:
接收上位机发送的用于写入目标数据的数据写入指令;
根据所述数据写入指令,将目标数据写入所述slcblock,并在所述活动映射表中,增加目标数据的逻辑地址与slcblock中存储目标数据的物理地址之间的映射关系;
在所述活动映射表的映射关系中,选出第一预设数量的小份映射关系,将小份映射关系中,目标数据逻辑地址映射的slcblock中无效目标数据消除,使得小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第一映射表;
判断所述第一映射表中映射关系个数是否达到映射值,所述映射值为所述非易失存储器规定的,所述映射表中映射关系个数的上限值;
若所述第一映射表中映射关系个数达到映射值,在所述第一映射表中选出第二预设数量的映射关系,将第二预设数量的映射关系更新到有效映射表中,所述有效映射表为非易失存储器中目标数据逻辑地址,与slcblock中只存储有效目标数据的物理地址之间映射关系的表。
可选地,判断第一映射表中映射关系个数是否达到映射值,所述方法还包括:
若所述第一映射表中映射关系个数没有达到映射值,则继续在所述活动映射表映射关系中,选出第三预设数量的小份映射关系,将该小份映射关系中,目标数据逻辑地址映射slcblock中无效目标数据消除,使得该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第二映射表;
判断所述第一映射表中映射关系个数,与所述第二映射表中映射关系个数之和是否达到映射值;
若所述第一映射表中映射关系个数,与所述第二映射表中映射关系个数之和达到映射值,则在所述第一映射表与第二映射表中选出第四预设数量的映射关系,将第四预设数量的映射关系更新到有效映射表中。
可选地,将第二预设数量的映射关系更新到有效映射表中,包括:
只将第二预设数量的映射关系更新到有效映射表中,与第二预设数量目标数据逻辑地址,互相映射的,slcblock中存储的有效目标数不进行数据搬移操作。
本发明实施例还提供了一种控制映射表的装置,所述装置应用于非易失存储器,所述非易失存储器包括:活动映射表和slcblock,所述活动映射表为目标数据的逻辑地址,与slcblock中存储目标数据的物理地址之间映射关系的表,所述slcblock为存储目标数据的存储块,所述slcblock中存储的目标数据包括:有效目标数据和无效目标数据,所述装置包括:
接收模块,用于接收上位机发送的用于写入目标数据的数据写入指令;
写入增加模块,用于根据所述数据写入指令,将目标数据写入所述slcblock,并在所述活动映射表中,增加目标数据的逻辑地址与slcblock中存储目标数据的物理地址之间的映射关系;
第一选出消除模块,用于在所述活动映射表的映射关系中,选出第一预设数量的小份映射关系,将小份映射关系中,目标数据逻辑地址映射的slcblock中无效目标数据消除,使得小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第一映射表;
第一判断模块,用于判断所述第一映射表中映射关系个数是否达到映射值,所述映射值为所述非易失存储器规定的,所述映射表中映射关系个数的上限值;
第一选出更新模块,用于若所述第一映射表中映射关系个数达到映射值,在所述第一映射表中选出第二预设数量的映射关系,将第二预设数量的映射关系更新到有效映射表中,所述有效映射表为非易失存储器中目标数据逻辑地址,与slcblock中只存储有效目标数据的物理地址之间映射关系的表。
可选地,所述装置还包括:
第二选出消除模块,用于若所述第一映射表中映射关系个数没有达到映射值,则继续在所述活动映射表映射关系中,选出第三预设数量的小份映射关系,将该小份映射关系中,目标数据逻辑地址映射slcblock中无效目标数据消除,使得该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第二映射表;
第二判断模块,用于判断所述第一映射表中映射关系个数,与所述第二映射表中映射关系个数之和是否达到映射值;
第二选出更新模块,用于若所述第一映射表中映射关系个数,与所述第二映射表中映射关系个数之和达到映射值,则在所述第一映射表与第二映射表中选出第四预设数量的映射关系,将第四预设数量的映射关系更新到有效映射表中。
与现有技术相比,本发明提供的一种控制映射表的方法以及装置,通过将一次性的垃圾回收操作,按照一定规则分步进行,分步后进行一步的处理速度更快,不影响非易失存储器继续响应后续操作,并且非易失存储器可以先进行一步或者几步的处理,繁忙的时候先处理其他操作,在忙完之后再继续进行处理,这样也提高了非易失存储器的工作效率。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1是本发明一种控制映射表方法的流程图;
图2是本发明一种控制映射表方法另一步骤的流程图;
图3是本发明实施例控制映射表的示意图;
图4是本发明一种控制映射表装置的框图;
图5是本发明一种控制映射表装置的另一框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。应当理解,此处所描述的具体实施例仅用以解释本发明,仅仅是本发明一部分实施例,而不是全部的实施例,并不用于限定本发明。
参照图1,示出了一种控制映射表方法的流程图,该方法应用于非易失存储器,非易失存储器包括:活动映射表和slcblock,活动映射表为目标数据的逻辑地址,与slcblock中存储目标数据的物理地址之间映射关系的表,slcblock为存储目标数据的存储块,slcblock中存储的目标数据包括:有效目标数据和无效目标数据,控制映射表的具体方法可以包括如下步骤:
步骤101:接收上位机发送的用于写入目标数据的数据写入指令。
本发明实施例中,在非易失存储器中slc形式的1个存储单元可存放1bit(位)的数据,只需要两种电压就可以实现数据的表达,其相对于tlc来说,数据访问所需时间短,因此传输速度更块,并且稳定性高,所以将数据写入slcblock,利用slcblock的稳定性好,读写速度快的特性,使非易失存储器能更好的工作。而在对非易失存储器进行数据写入时,会在非易失存储器的高速缓存中,建立一个活动的映射表,该活动的映射表中存储着写入目标数据的逻辑地址,与slcblock中存储目标数据的物理地址之间的映射关系。本发明实施例对目标数据写入非易失存储器的工作方式不做具体限定。
步骤102:根据数据写入指令,将目标数据写入slcblock,并在活动映射表中,增加目标数据的逻辑地址与slcblock中存储目标数据的物理地址之间的映射关系。
本发明实施例中,在将目标数据写入slcblock时,同时在缓存的活动映射表中,会自动增加目标数据的逻辑地址,与slcblock中存储目标数据的物理地址之间的映射关系,例如目标数据的逻辑地址是10,则在slcblock中物理地址为10的slcblock中写入目标数据,这样在活动映射表中就生成一个映射关系,逻辑地址10对应物理地址10。本发明实施例对增加映射关系的具体方式不做具体限定。
步骤103:在活动映射表的映射关系中,选出第一预设数量的小份映射关系,将小份映射关系中,目标数据逻辑地址映射的slcblock中无效目标数据消除,使得小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第一映射表。
本发明实施例中,非易失存储器规定活动映射表中映射关系的个数上限为2048个,即当写入数据的逻辑地址,与slcblock中存储有效目标数据的物理地址映射关系个数达到2048时,存储有效目标数据占有1024个slcblock的物理容量,相对应的,如果是1024个映射关系,存储有效目标数据占有512个slcblock,若是512个映射关系,存储有效目标数据占有256个slcblock,若是2个映射关系,存储有效目标数据占有1个slcblock,所以可以根据非易失存储器的性能与繁忙程度,选出一定数量的映射关系,例如当活动映射表中映射关系的个数达到2048个,在其中选出128个映射关系,对应这128个映射关系,存储数据slcblock应该有64个,但是因为slcblock中可能存储的是无效数据,所以存储数据slcblock可能有80个,垃圾回收操作将其中16个存储无效数据slcblock中的无效数据消除,使得这128个映射关系中数据逻辑地址,与64个slcblock中存储有效目标数据的物理地址相互映射,这样分步的好处是垃圾回收机制进行128个映射关系的垃圾回收操作时间,比进行2048个映射关系的垃圾回收操作时间小得多,非易失存储器处理完这128个映射关系后,可以去处理其他操作,等待不忙的时候再继续处理剩下的映射关系,并且考虑到掉电恢复的问题,这样操作可以保证掉电时,部分映射表以及对应的已经被处理好,上电后只需继续进行剩下的,而不用全部重新开始,从而提高了非易失存储器的工作效率。本发明实施例对分步数量的选择,消除无效数据的具体方式不做具体限定。
步骤104:判断第一映射表中映射关系个数是否达到映射值,映射值为非易失存储器规定的,映射表中映射关系个数的上限值。
本发明实施例中,若是非易失存储器是一次性进行的2048个映射关系的垃圾回收操作,则生成的第一映射表中的映射关系个数就达到了规定的上限。本发明实施例对判断数量的具体方式不做具体限定。
105:若第一映射表中映射关系个数达到映射值,在第一映射表中选出第二预设数量的映射关系,将第二预设数量的映射关系更新到有效映射表中,有效映射表为非易失存储器中目标数据逻辑地址,与中只存储有效目标数据的物理地址之间映射关系的表。
本发明实施例中,当第一映射表中映射关系个数达到2048个,其对应存储有效数据的slcblock为1024个,因为无效数据的清除,所以这1024个slcblock的物理地址不一定是按照从0到1023顺序排列的,例如物理地址6和18中有无效数据,则这1024个是从0到5、7-17、19到1025,当非易失存储器比较忙时,可以在这2048个映射关系中,选出的一定数量的映射关系,例如选出数据逻辑地址3到7的映射关系,将这5个映射关系更新到非易失存储器的有效映射表中,非易失存储器中的有效映射表中就会有逻辑地址3-物理地址3,逻辑地址4-物理地址4,逻辑地址5-物理地址5,逻辑地址6-物理地址7,逻辑地址7-物理地址8,逻辑地址8-物理地址9,这5个映射关系,等非易失存储器不忙时,再选出剩下的映射关系,将其更新到有效映射表中,这样分步同样提高了非易失存储器的工作效率。本发明实施例对分步进行映射表更新的方式不做具体限定。
可选地,参照图2,在步骤104的进行中,根据条件是否满足,有不同的情况,其还包括如下步骤:
步骤200:若第一映射表中映射关系个数没有达到映射值,则继续在活动映射表映射关系中,选出第三预设数量的小份映射关系,将该小份映射关系中,目标数据逻辑地址映射slcblock中无效目标数据消除,使得该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第二映射表。
步骤300:判断第一映射表中映射关系个数,与第二映射表中映射关系个数之和是否达到映射值。
步骤400:若第一映射表中映射关系个数,与第二映射表中映射关系个数之和达到映射值,则在第一映射表与第二映射表中选出第四预设数量的映射关系,将第四预设数量的映射关系更新到有效映射表中。
本发明实施例中,由上所述可以知道,若是只进行了128个映射关系的垃圾回收,并不满足2048个映射关系,则继续在活动映射表中选择一定数量的映射关系进行垃圾回收,若是第二次选择了剩下的1920个映射关系进行垃圾回收,则满足了2048个映射关系的上限,之后可以按照步骤105继续进行分步映射关系的更新操作。
举例说明,如图3所示,该实施例设计方案中,在将目标数据写入slcblock时,同时在缓存的活动映射表中,会自动增加目标数据的逻辑地址,与slcblock中存储目标数据的物理地址之间的映射关系,例如目标数据的逻辑地址是10,则在slcblock中物理地址为10的slcblock中写入目标数据,这样在活动映射表中就生成一个映射关系,逻辑地址10对应物理地址10,当活动映射表中映射关系达到2048个,并且满足了垃圾回收机制进行垃圾回收操作的条件,若此时非易失存储器比较忙,则在上述2048个映射关系中选择64个映射关系,对应这64个映射关系,存储数据slcblock应该有32个,但是因为slcblock中可能存储的是无效数据,所以存储数据slcblock可能有58个,垃圾回收操作将其中26个存储无效数据slcblock中的无效数据消除,使得这64个映射关系中数据逻辑地址,与32个slcblock中存储有效目标数据的物理地址相互映射,进行这64个映射关系的垃圾回收操作时间很短,之后非易失存储器接收到优先等级更高的指令,去优先处理该指令内容,或者也可能此时非易失存储器掉电了,非易失存储器在处理完优先指令操作后,或者重新得电后,继续处理上述2048个映射关系剩下的1884个映射关系,直到非易失存储器完成这2048个映射关系的垃圾回收操作,使得第一映射表中映射关系个数达到2048个,其对应存储有效数据的slcblock为1024个,需要说明的是,上述分步并不是只可以分成两步,而是可以分成很多步,主要满足映射关系和垃圾回收机制的操作条件就可以进行分步,最好的情况下,写入数据生成的活动映射表中,2048个映射关系,对应的1024个slcblock中存储的数据全部是有效数据,则不需要进行垃圾回收操作,至需要进行活动映射表中映射关系更新操作。
在第一映射表中映射关系个数达到2048个后,非易失存储器需要将第一映射表中的2048个映射关系,更新到非易失存储器有效映射表中,当非易失存储器比较忙时,可以在这2048个映射关系中,选出的一定数量的映射关系,例如选出数据逻辑地址0到3的映射关系,将这4个映射关系更新到非易失存储器的有效映射表中,非易失存储器中的有效映射表中就会有逻辑地址0-物理地址0,逻辑地址1-物理地址1,逻辑地址2-物理地址2,逻辑地址3-物理地址3,这4个映射关系,等非易失存储器不忙时,再选出剩下的映射关系,将其更新到有效映射表中,同样这个分步操作也可以分成好多步,以上所述分步的方式,因为进行一步操作的数量比较少,所以提高了非易失存储器的工作效率。
需要说明的是,本发明实施例并不限定数据的类型,垃圾回收机制的周期性检测是根据具体情况设定的时间,并没有固定时间,可以根据用户的具体需求来设定,当然可以理解的是,若是将周期时间设置比较长,则非易失存储器的工作效率相比较于设置时间短的要高一些。
需要说明的是,上述数据是为了使得实施例更加清晰易懂而例举的简单实施例,并不代表所有非易失存储器的指标,并且因为非易失存储器采用的元器件的制作工艺质量不同,所以能达到的工作状态会有差异,上述数据是满足一般制作工艺情况下,经过大量的仿真实验得出的数据,并不代表所有非易失存储器的指标。
参照图4,示出了一种控制映射表装置的框图,该装置包括:
接收模块310,用于接收上位机发送的用于写入目标数据的数据写入指令;
写入增加模块320,用于根据数据写入指令,将目标数据写入slcblock,并在活动映射表中,增加目标数据的逻辑地址与slcblock中存储目标数据的物理地址之间的映射关系;
第一选出消除模块330,用于在活动映射表的映射关系中,选出第一预设数量的小份映射关系,将小份映射关系中,目标数据逻辑地址映射的slcblock中无效目标数据消除,使得小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第一映射表;
第一判断模块340,用于判断第一映射表中映射关系个数是否达到映射值,映射值为非易失存储器规定的,映射表中映射关系个数的上限值;
第一选出更新模块350,用于若第一映射表中映射关系个数达到映射值,在第一映射表中选出第二预设数量的映射关系,将第二预设数量的映射关系更新到有效映射表中,有效映射表为非易失存储器中目标数据逻辑地址,与slcblock中只存储有效目标数据的物理地址之间映射关系的表。
可选地,参照图5,该装置还包括:
第二选出消除模块360,用于若第一映射表中映射关系个数没有达到映射值,则继续在活动映射表映射关系中,选出第三预设数量的小份映射关系,将该小份映射关系中,目标数据逻辑地址映射slcblock中无效目标数据消除,使得该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址相互映射,并根据该小份映射关系中目标数据逻辑地址,与slcblock中存储有效目标数据的物理地址之间的映射关系,生成第二映射表;
第二判断模块370,用于判断第一映射表中映射关系个数,与第二映射表中映射关系个数之和是否达到映射值;
第二选出更新模块380,用于若第一映射表中映射关系个数,与第二映射表中映射关系个数之和达到映射值,则在第一映射表与第二映射表中选出第四预设数量的映射关系,将第四预设数量的映射关系更新到有效映射表中。
通过上述实施例,本发明在对slcblock进行垃圾回收操作时,可以选出一定数量的映射关系,分步进行垃圾回收操作,之后分步进行映射表更新,提高了非易失存储器的工作效率。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种控制映射表的方法以及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。