一种分层的基于随机映射的相变内存磨损均衡方法及系统转让专利

申请号 : CN201510119973.1

文献号 : CN104714894B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 胡事民刘巍

申请人 : 清华大学

摘要 :

本发明提供了一种分层的基于随机映射的相变内存磨损均衡方法,包括:S1.将相变内存地址空间划分为RANK、BANK、REGION三个层次,并设置每个层次的内存写次数计数器;S2.初始化每个层次的内存随机映射表集;如果某一层次的内存写次数计数器大于或等于该层次预设的写次数阈值,则更新其内存随机映射表集;S3.针对内存写操作,分别从RANK层、BANK层和REGION层进行内存逻辑地址到内存物理地址的转换。本发明所述的分层的基于随机映射的相变内存磨损均衡方法可改进相变内存磨损均衡效果,达到提升相变内存寿命的目的,同时对性能的影响降到最低。

权利要求 :

1.一种分层的基于随机映射的相变内存磨损均衡方法,其特征在于,包括:

S1.将相变内存地址空间划分为RANK、BANK、REGION三个层次,并设置每个层次的内存写次数计数器;

S2.初始化每个层次的内存随机映射表集;如果某一层次的内存写次数计数器大于或等于该层次预设的写次数阈值,则更新其内存随机映射表集;

S3.针对内存写操作,分别从RANK层、BANK层和REGION层进行内存逻辑地址到内存物理地址的转换;

其中,所述S3具体包括:

S31:从内存逻辑地址,获取逻辑rank编号,查询RANK层当前内存映射表;如果RANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用RANK层当前内存映射表相应表项的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;如果RANK层当前内存随机映射表中相应表项的调整标志位未被设置,则使用上次RANK层内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;

S32:从内存逻辑地址,获取逻辑bank编号,查询BANK层相应的当前内存映射表;如果BANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用BANK层当前内存映射表相应表项的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;如果BANK层当前内存随机映射表中相应表项的调整标志位未被设置,则使用BANK层上次内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;

S33:从内存逻辑地址,获取逻辑region编号,查询REGION层相应的当前内存映射表;如果REGION层当前内存随机映射表中相应表项的调整标志位已被设置,则使用REGION层当前地址映射表相应表项的逻辑region编号和物理region编号的映射关系进行region编号转换;如果REGION层当前内存随机映射表中相应表项的调整标志位未被设置,则使用REGION层上次内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换。

2.根据权利要求1所述的分层的基于随机映射的相变内存磨损均衡方法,其特征在于,所述S1进一步包括:S11:划分RANK层:相变内存包含4个rank,若相变内存的大小为s字节,则每个rank的大小为s/4个字节,RANK层包含4个rank,RANK层的基本处理单元是rank;

S12:划分BANK层:相变内存每个rank包含4个bank,根据S11,每个bank的大小为s/4/4个字节,则BANK层包含16个bank,BANK层的基本处理单元是bank;

S13:划分REGION层:1个相变内存行row大小为4096字节,n个row为1个region,其中,n≥1;根据S11和S12,每个bank包含s/4/4/(n*4096)个region;

S14:每个region设置一个REGION写次数计数器,记录该region内的写次数;每个bank设置一个BANK写次数计数器,记录该bank内的写次数;每个RANK设置一个RANK写次数计数器,记录该rank内的写次数;设置一个全局写次数计数器,记录相变内存的全部写次数;写次数计数器的类型为整型,每次对内存进行写操作时,根据写操作的地址,相对应的REGION写次数计数器、BANK写次数计数器和RANK写次数计数器均递增1。

3.根据权利要求1所述的分层的基于随机映射的相变内存磨损均衡方法,其特征在于,所述S2进一步包括:S21:每个层次的内存映射表集都包含该层次的当前内存随机映射表、上次内存随机映射表及其反向映射表;相变内存包含1个rank映射表集,每个rank包含4个bank映射表集,每个bank包含s/4/4/(n*4096)个region映射表集,其中,s表示相变内存大小,n表示1个region包含的row数量;

S22:初始化时,依据洗牌算法,生成当前内存随机映射表,上次内存随机映射表及其反向映射表的元素值为空;

S23:在更新内存映射表集时,将当前内存随机映射表拷贝到上次内存随机映射表的存储位置;生成上次内存随机映射表的反向映射表;依据洗牌算法,生成新的内存随机映射表,并拷贝到当前内存随机映射表的存储位置;

S24:更新某个层次的内存映射表集后,该层次的内存写操作计数器清零。

4.根据权利要求3所述的分层的基于随机映射的相变内存磨损均衡方法,其特征在于,所述当前内存随机映射表,用于将逻辑内存地址转变为物理内存地址,索引值表示逻辑内存的行号,表元素包括物理内存的行号和调整标志位两个表项;当前内存随机映射表用于本次随机映射周期内的地址映射;

所述上次内存随机映射表,用于本次内存地址随机映射周期的上一个周期使用的地址映射表,不包含调整标志位表项;

所述上次内存随机映射表的反向映射表是上次映射表索引值和物理内存行号表项的互换之后形成的映射表,即反向映射表的索引是上次映射表的物理内存行号,反向映射表的元素值是上次映射表的索引值。

5.根据权利要求1所述的分层的基于随机映射的相变内存磨损均衡方法,其特征在于,还包括步骤S4,针对内存读操作具体包括:S41:如果RANK层写次数计数器达到RANK层写次数阈值,则执行更新RANK层内存随机映射表集过程;

从内存逻辑地址获取逻辑rank编号,查询RANK层内存随机映射表,如果RANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用RANK层当前内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换,否则,则进行rank调整过程,并修改RANK层当前内存随机映射表中相应表项的物理rank编号和调整标志位,使用调整后的RANK层当前内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;

将RANK层写次数计数器递增1;

S42:从内存逻辑地址获取逻辑bank编号,如果对应的BANK层写次数计数器达到BANK层写次数阈值,则执行更新对应的BANK层内存随机映射表集过程;

查询对应的BANK层内存随机映射表,如果对应的BANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用对应的BANK层当前内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换,否则,则进行对应的bank调整过程,并修改对应的BANK层当前内存随机映射表中相应表项的物理bank编号和调整标志位,使用调整后的BANK层当前内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;

将对应的BANK层写次数计数器递增1;

S43:从内存逻辑地址获取逻辑region编号,如果对应的REGION层写次数计数器达到REGION层写次数阈值,则执行更新对应的REGION层内存随机映射表集过程;

查询对应的REGION层内存随机映射表,如果对应的REGION层当前内存随机映射表中相应表项的调整标志位已被设置,则使用对应的REGION层当前内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换,否则,则进行对应的region调整过程,并修改对应的REGION层当前内存随机映射表中相应表项的物理region编号和调整标志位,使用调整后的REGION层当前内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换;

将对应的REGION层写次数计数器递增1。

6.根据权利要求5所述的分层的基于随机映射的相变内存磨损均衡方法,其特征在于,所述S4还包括:

S44:查询当前内存随机映射表和上次内存随机映射表,得到映射的当前物理地址和上次物理地址;交换当前物理地址和上次物理地址中的内存内容,并修改当前内存随机映射表中的相应两个物理地址值,设置相应的两个调整标志位;在上次内存随机映射表的反向映射表中查询上次物理对应的逻辑地址;如果该逻辑地址与交换后上次物理地址对应的逻辑地址一致,则完成本次调整过程;否则,以调整后逻辑地址与物理地址不一致的内存行作为开端,循环对物理内存进行调整,并修改当前内存随机映射表的相应元素值和调整标志位,直到逻辑地址与物理地址的映射一致为止。

7.根据权利要求1-6任一所述的分层的基于随机映射的相变内存磨损均衡方法,其特征在于,所述预设的写次数阈值的大小由各个内存层次所包含的row个数所决定,为row个数的20倍以上。

8.一种分层的基于随机映射的相变内存磨损均衡系统,其特征在于,包括:内存地址随机映射控制器和内存映射表存储器;所述内存地址随机映射控制器用于将相变内存地址空间划分为RANK、BANK、REGION三个层次,并设置每个层次的内存写次数计数器;

所述内存地址随机映射控制器,还用于初始化每个层次的内存随机映射表集;

所述内存地址随机映射控制器,还用于在某一层次的内存写次数计数器大于或等于该层次预设的写次数阈值时,更新其内存随机映射表集;

所述内存地址随机映射控制器,还用于分别从RANK层、BANK层和REGION层进行内存逻辑地址到内存物理地址的转换;

所述内存映射表存储器,用于存储当前内存随机映射表、上次内存随机映射表和上次内存随机映射表的反向地址映射表。

9.根据权利要求8所述的分层的基于随机映射的相变内存磨损均衡系统,其特征在于,所述内存映射表存储器为SDRAM。

说明书 :

一种分层的基于随机映射的相变内存磨损均衡方法及系统

技术领域

[0001] 本发明涉及计算机技术领域,具体涉及一种分层的基于随机映射的相变内存磨损均衡方法及系统。

背景技术

[0002] 由于相变内存存在写次数有限的缺点,因此,提升相变内存的寿命就成为其能否实际应用的关键技术。磨损均衡技术是提升相变内存寿命的主要方法之一。
[0003] 现有的磨损均衡技术主要问题是,或者是跟踪每个内存单元的写次数,造成大量的存储空间和性能开销,或者是内存调整方式存在信息泄露,无法抵御恶意磨损程序的攻击。

发明内容

[0004] 针对现有技术中的缺陷,本发明提供一种分层的基于随机映射的相变内存磨损均衡方法及系统,可改进相变内存磨损均衡效果,达到提升相变内存寿命的目的,同时对性能的影响降到最低。
[0005] 本发明提供以下技术方案:
[0006] 第一方面,本发明提供一种分层的基于随机映射的相变内存磨损均衡方法,包括:
[0007] S1.将相变内存地址空间划分为RANK、BANK、REGION三个层次,并设置每个层次的内存写次数计数器;
[0008] S2.初始化每个层次的内存随机映射表集;如果某一层次的内存写次数计数器大于或等于该层次预设的写次数阈值,则更新其内存随机映射表集;
[0009] S3.针对内存写操作,分别从RANK层、BANK层和REGION层进行内存逻辑地址到内存物理地址的转换。
[0010] 其中,所述步骤S3具体包括:
[0011] S31:从内存逻辑地址,获取逻辑rank编号,查询RANK层当前内存映射表;如果RANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用RANK层当前内存映射表相应表项的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;如果RANK层当前内存随机映射表中相应表项的调整标志位未被设置,则使用上次RANK层内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;
[0012] S32:从内存逻辑地址,获取逻辑bank编号,查询BANK层相应的当前内存映射表;如果BANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用BANK层当前内存映射表相应表项的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;如果BANK层当前内存随机映射表中相应表项的调整标志位未被设置,则使用BANK层上次内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;
[0013] S33:从内存逻辑地址,获取逻辑region编号,查询REGION层相应的当前内存映射表;如果REGION层当前内存随机映射表中相应表项的调整标志位已被设置,则使用REGION层当前地址映射表相应表项的逻辑region编号和物理region编号的映射关系进行region编号转换;如果REGION层当前内存随机映射表中相应表项的调整标志位未被设置,则使用REGION层上次内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换。
[0014] 其中,所述步骤S1进一步包括:
[0015] S11:划分RANK层:相变内存包含4个rank,若相变内存的大小为s字节,则每个rank的大小为s/4个字节,RANK层包含4个rank,RANK层的基本处理单元是rank;
[0016] S12:划分BANK层:相变内存每个rank包含4个bank,根据S11,每个bank的大小为s/4/4个字节,则BANK层包含16个bank,BANK层的基本处理单元是bank;
[0017] S13:划分REGION层:1个相变内存行row大小为4096字节,n个row为1个region,其中,n≥1;根据S11和S12,每个bank包含s/4/4/(n*4096)个region;
[0018] S14:每个region设置一个REGION写次数计数器,记录该region内的写次数;每个bank设置一个BANK写次数计数器,记录该bank内的写次数;每个RANK设置一个RANK写次数计数器,记录该rank内的写次数;设置一个全局写次数计数器,记录相变内存的全部写次数;写次数计数器的类型为整型,每次对内存进行写操作时,根据写操作的地址,相对应的REGION写次数计数器、BANK写次数计数器和RANK写次数计数器均递增1。
[0019] 其中,所述步骤S2进一步包括:
[0020] S21:每个层次的内存映射表集都包含该层次的当前内存随机映射表、上次内存随机映射表及其反向映射表;相变内存包含1个rank映射表集,每个rank包含4个bank映射表集,每个bank包含s/4/4/(n*4096)个region映射表集,其中,s表示相变内存大小,n表示1个region包含的row数量;
[0021] S22:初始化时,依据洗牌算法,生成当前内存随机映射表,上次内存随机映射表及其反向映射表的元素值为空;
[0022] S23:在更新内存映射表集时,将当前内存随机映射表拷贝到上次内存随机映射表的存储位置;生成上次内存随机映射表的反向映射表;依据洗牌算法,生成新的内存随机映射表,并拷贝到当前内存随机映射表的存储位置;
[0023] S24:更新某个层次的内存映射表集后,该层次的内存写操作计数器清零。
[0024] 其中,所述当前内存随机映射表,用于将逻辑内存地址转变为物理内存地址,索引值表示逻辑内存的行号,表元素包括物理内存的行号和调整标志位两个表项;当前内存随机映射表用于本次随机映射周期内的地址映射;
[0025] 所述上次内存随机映射表,用于本次内存地址随机映射周期的上一个周期使用的地址映射表,不包含调整标志位表项;
[0026] 所述上次内存随机映射表的反向映射表是上次映射表索引值和物理内存行号表项的互换之后形成的映射表,即反向映射表的索引是上次映射表的物理内存行号,反向映射表的元素值是上次映射表的索引值。
[0027] 进一步地,所述的分层的基于随机映射的相变内存磨损均衡方法,还包括步骤S4,针对内存读操作包括:
[0028] S41:如果RANK层写次数计数器达到RANK层写次数阈值,则执行更新RANK层内存随机映射表集过程;
[0029] 从内存逻辑地址获取逻辑rank编号,查询RANK层内存随机映射表,如果RANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用RANK层当前内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换,否则,则进行rank调整过程,并修改RANK层当前内存随机映射表中相应表项的物理rank编号和调整标志位,使用调整后的RANK层当前内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;
[0030] 将RANK层写次数计数器递增1;
[0031] S42:从内存逻辑地址获取逻辑bank编号,如果对应的BANK层写次数计数器达到BANK层写次数阈值,则执行更新对应的BANK层内存随机映射表集过程;
[0032] 查询对应的BANK层内存随机映射表,如果对应的BANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用对应的BANK层当前内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换,否则,则进行对应的bank调整过程,并修改对应的BANK层当前内存随机映射表中相应表项的物理bank编号和调整标志位,使用调整后的BANK层当前内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;
[0033] 将对应的BANK层写次数计数器递增1;
[0034] S43:从内存逻辑地址获取逻辑region编号,如果对应的REGION层写次数计数器达到REGION层写次数阈值,则执行更新对应的REGION层内存随机映射表集过程;
[0035] 查询对应的REGION层内存随机映射表,如果对应的REGION层当前内存随机映射表中相应表项的调整标志位已被设置,则使用对应的REGION层当前内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换,否则,则进行对应的region调整过程,并修改对应的REGION层当前内存随机映射表中相应表项的物理region编号和调整标志位,使用调整后的REGION层当前内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换;
[0036] 将对应的REGION层写次数计数器递增1。
[0037] 进一步地,所述步骤S4还包括:
[0038] S44:查询当前内存随机映射表和上次内存随机映射表,得到映射的当前物理地址和上次物理地址;交换当前物理地址和上次物理地址中的内存内容,并修改当前内存随机映射表中的相应两个物理地址值,设置相应的两个调整标志位;在上次内存随机映射表的反向映射表中查询上次物理对应的逻辑地址;如果该逻辑地址与交换后上次物理地址对应的逻辑地址一致,则完成本次调整过程;否则,以调整后逻辑地址与物理地址不一致的内存行作为开端,循环对物理内存进行调整,并修改当前内存随机映射表的相应元素值和调整标志位,直到逻辑地址与物理地址的映射一致为止。
[0039] 其中,所述预设的写次数阈值的大小由各个内存层次所包含的row个数所决定,为row个数的20倍以上。
[0040] 第二方面,本发明还提供一种分层的基于随机映射的相变内存磨损均衡系统,包括:内存地址随机映射控制器和内存映射表存储器;所述内存地址随机映射控制器用于将相变内存地址空间划分为RANK、BANK、REGION三个层次,并设置每个层次的内存写次数计数器;
[0041] 所述内存地址随机映射控制器,还用于初始化每个层次的内存随机映射表集;
[0042] 所述内存地址随机映射控制器,还用于在某一层次的内存写次数计数器大于或等于该层次预设的写次数阈值时,更新其内存随机映射表集;
[0043] 所述内存地址随机映射控制器,还用于分别从RANK层、BANK层和REGION层进行内存逻辑地址到内存物理地址的转换;
[0044] 所述内存映射表存储器,用于存储当前内存随机映射表、上次内存随机映射表和上次内存随机映射表的反向地址映射表。
[0045] 其中,所述内存映射表存储器为SDRAM。
[0046] 由上述技术方案可知,本发明所述的分层的基于随机映射的相变内存磨损均衡方法及系统,至少具有以下有益效果:
[0047] 将写操作频繁的内存块均匀分布到整个相变内存空间,达到磨损均衡的目的,从而提高相变内存的寿命,同时,采用整个内存空间地址随机映射机制,消除了磨损均衡技术的信息泄露,从而可抵御恶意磨损程序的攻击。
[0048] 另外,本发明所述的分层的基于随机映射的相变内存磨损均衡方法特别适用于容量较大的相变内存,如16GB或更大的内存,因为本发明实施例所述的方法基于分层处理,而分层可将一个大的相变内存分成多个区域,分布进行地址转换,从而相对于不进行分层处理的方法,大大提高了处理效率和处理能力。

附图说明

[0049] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0050] 图1是本发明实施例一提供的一种分层的基于随机映射的相变内存磨损均衡方法的流程图;
[0051] 图2是本发明实施例二提供的一种分层的基于随机映射的相变内存磨损均衡系统的结构示意图;
[0052] 图3是本发明实施例二提供的一种分层的基于随机映射的相变内存磨损均衡系统的具体结构示意图。

具体实施方式

[0053] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0054] 图1示出了实施例一提供的分层的基于随机映射的相变内存磨损均衡方法流程图,如图1所示,本实施例一提供的分层的基于随机映射的相变内存磨损均衡方法基于内存地址随机映射机制,具体包括:
[0055] 步骤101:将相变内存地址空间划分为RANK、BANK、REGION三个层次,并设置每个层次的内存写次数计数器。
[0056] 在本步骤中,具体步骤为:
[0057] (1)划分RANK层:相变内存包含4个rank,若相变内存的大小为s字节,则每个rank的大小为s/4个字节,RANK层包含4个rank,RANK层的基本处理单元是rank;
[0058] (2)划分BANK层:相变内存每个rank包含4个bank,根据S11,每个bank的大小为s/4/4个字节,则BANK层包含16个bank,BANK层的基本处理单元是bank;
[0059] (3)划分REGION层:1个相变内存行row大小为4096字节,n个row为1个region,其中,n≥1;根据S11和S12,每个bank包含s/4/4/(n*4096)个region;
[0060] (4)每个region设置一个REGION写次数计数器,记录该region内的写次数;每个bank设置一个BANK写次数计数器,记录该bank内的写次数;每个RANK设置一个RANK写次数计数器,记录该rank内的写次数;设置一个全局写次数计数器,记录相变内存的全部写次数;写次数计数器的类型为整型,每次对内存进行写操作时,根据写操作的地址,相对应的REGION写次数计数器、BANK写次数计数器和RANK写次数计数器均递增1。
[0061] 步骤102:初始化每个层次的内存随机映射表集;如果某一层次的内存写次数计数器大于或等于该层次预设的写次数阈值,则更新其内存随机映射表集。
[0062] 在本步骤中,具体步骤为:
[0063] (1)每个层次的内存映射表集都包含该层次的当前内存随机映射表、上次内存随机映射表及其反向映射表;相变内存包含1个rank映射表集,每个rank包含4个bank映射表集,每个bank包含s/4/4/(n*4096)个region映射表集,其中,s表示相变内存大小,n表示1个region包含的row数量;
[0064] 所述当前内存随机映射表,用于将逻辑内存地址转变为物理内存地址,索引值表示逻辑内存的行号,表元素包括物理内存的行号和调整标志位两个表项;当前内存随机映射表用于本次随机映射周期内的地址映射;
[0065] 所述上次内存随机映射表,用于本次内存地址随机映射周期的上一个周期使用的地址映射表,不包含调整标志位表项;
[0066] 所述上次内存随机映射表的反向映射表是上次映射表索引值和物理内存行号表项的互换之后形成的映射表,即反向映射表的索引是上次映射表的物理内存行号,反向映射表的元素值是上次映射表的索引值。
[0067] (2)初始化时,依据现代洗牌算法,生成当前内存随机映射表,上次内存随机映射表及其反向映射表的元素值为空;
[0068] (3)在更新内存映射表集时,将当前内存随机映射表拷贝到上次内存随机映射表的存储位置;生成上次内存随机映射表的反向映射表;依据现代洗牌算法,生成新的内存随机映射表,并拷贝到当前内存随机映射表的存储位置;
[0069] (4)更新某个层次的内存映射表集后,该层次的内存写操作计数器清零。
[0070] 步骤103:针对内存写操作,分别从RANK层、BANK层和REGION层进行内存逻辑地址到内存物理地址的转换。
[0071] 在本步骤中,具体执行如下操作:
[0072] (1)从内存逻辑地址,获取逻辑rank编号,查询RANK层当前内存映射表;如果RANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用RANK层当前内存映射表相应表项的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;如果RANK层当前内存随机映射表中相应表项的调整标志位未被设置,则使用上次RANK层内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;
[0073] (2)从内存逻辑地址,获取逻辑bank编号,查询BANK层相应的当前内存映射表;如果BANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用BANK层当前内存映射表相应表项的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;如果BANK层当前内存随机映射表中相应表项的调整标志位未被设置,则使用BANK层上次内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;
[0074] (3)从内存逻辑地址,获取逻辑region编号,查询REGION层相应的当前内存映射表;如果REGION层当前内存随机映射表中相应表项的调整标志位已被设置,则使用REGION层当前地址映射表相应表项的逻辑region编号和物理region编号的映射关系进行region编号转换;如果REGION层当前内存随机映射表中相应表项的调整标志位未被设置,则使用REGION层上次内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换。
[0075] 上面(1)~(3)中提到了获取逻辑rank编号、逻辑bank编号、逻辑region编号,具体地,所述逻辑rank、bank、region编号和内存地址空间的划分相关,不同的划分情况,决定了从内存逻辑地址哪些部分获取相应的逻辑编号。
[0076] 由于一个相变内存包含4个rank,因此,rank的逻辑编号和物理编号都是0~3,只不过逻辑编号是从内存的逻辑地址获得的。例如,如果一个row大小为32KB、一个region大小为32MB、内存为64bit寻址,则0~14为row内offset,15~24为row编号、25~29为region编号,依次类推。
[0077] 在本发明的一个优选实施例中,所述分层的基于随机映射的相变内存磨损均衡方法,还包括步骤104:针对内存读操作具体包括:
[0078] (1)如果RANK层写次数计数器达到RANK层写次数阈值,则执行更新RANK层内存随机映射表集过程;
[0079] 从内存逻辑地址获取逻辑rank编号,查询RANK层内存随机映射表,如果RANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用RANK层当前内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换,否则,则进行rank调整过程,并修改RANK层当前内存随机映射表中相应表项的物理rank编号和调整标志位,使用调整后的RANK层当前内存随机映射表的逻辑rank编号和物理rank编号的映射关系进行rank编号转换;
[0080] 将RANK层写次数计数器递增1;
[0081] (2)从内存逻辑地址获取逻辑bank编号,如果对应的BANK层写次数计数器达到BANK层写次数阈值,则执行更新对应的BANK层内存随机映射表集过程;
[0082] 查询对应的BANK层内存随机映射表,如果对应的BANK层当前内存随机映射表中相应表项的调整标志位已被设置,则使用对应的BANK层当前内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换,否则,则进行对应的bank调整过程,并修改对应的BANK层当前内存随机映射表中相应表项的物理bank编号和调整标志位,使用调整后的BANK层当前内存随机映射表的逻辑bank编号和物理bank编号的映射关系进行bank编号转换;
[0083] 将对应的BANK层写次数计数器递增1;
[0084] (3)从内存逻辑地址获取逻辑region编号,如果对应的REGION层写次数计数器达到REGION层写次数阈值,则执行更新对应的REGION层内存随机映射表集过程;
[0085] 查询对应的REGION层内存随机映射表,如果对应的REGION层当前内存随机映射表中相应表项的调整标志位已被设置,则使用对应的REGION层当前内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换,否则,则进行对应的region调整过程,并修改对应的REGION层当前内存随机映射表中相应表项的物理region编号和调整标志位,使用调整后的REGION层当前内存随机映射表的逻辑region编号和物理region编号的映射关系进行region编号转换;
[0086] 将对应的REGION层写次数计数器递增1;
[0087] (4)查询当前内存随机映射表和上次内存随机映射表,得到映射的当前物理地址和上次物理地址;交换当前物理地址和上次物理地址中的内存内容,并修改当前内存随机映射表中的相应两个物理地址值,设置相应的两个调整标志位;在上次内存随机映射表的反向映射表中查询上次物理对应的逻辑地址;如果该逻辑地址与交换后上次物理地址对应的逻辑地址一致,则完成本次调整过程;否则,以调整后逻辑地址与物理地址不一致的内存行作为开端,循环对物理内存进行调整,并修改当前内存随机映射表的相应元素值和调整标志位,直到逻辑地址与物理地址的映射一致为止。
[0088] 一般地,所述预设的写次数阈值的大小由各个内存层次所包含的row个数所决定,为row个数的20倍以上。例如,写次数阈值为20,则增加的内存写操作开销占所有写操作的n/(n+20*n),小于4%。
[0089] 本实施例提供的分层的基于随机映射的相变内存磨损均衡方法,至少具有以下有益效果:将写操作频繁的内存块均匀分布到整个相变内存空间,达到磨损均衡的目的,从而提高相变内存的寿命,同时,采用整个内存空间地址随机映射机制,消除了磨损均衡技术的信息泄露,从而可抵御恶意磨损程序的攻击。
[0090] 另外,本实施例所述的分层的基于随机映射的相变内存磨损均衡方法特别适用于容量较大的相变内存,如16GB或更大的内存,因为本发明实施例所述的方法基于分层处理,而分层可将一个大的相变内存分成多个区域,分布进行地址转换,从而相对于不进行分层处理的方法,大大提高了处理效率和处理能力。
[0091] 图2和图3示出了实施例二提供的分层的基于随机映射的相变内存磨损均衡系统的结构示意图,如图2或图3所示,本实施例二提供的分层的基于随机映射的相变内存磨损均衡系统包括:内存地址随机映射控制器10和内存映射表存储器20;所述内存地址随机映射控制器10用于将相变内存地址空间划分为RANK、BANK、REGION三个层次,并设置每个层次的内存写次数计数器;
[0092] 所述内存地址随机映射控制器10,还用于初始化每个层次的内存随机映射表集;
[0093] 所述内存地址随机映射控制器10,还用于在某一层次的内存写次数计数器大于或等于该层次预设的写次数阈值时,更新其内存随机映射表集;
[0094] 所述内存地址随机映射控制器10,还用于分别从RANK层、BANK层和REGION层进行内存逻辑地址到内存物理地址的转换;
[0095] 所述内存映射表存储器20,用于存储当前内存随机映射表、上次内存随机映射表和上次内存随机映射表的反向地址映射表。
[0096] 所述内存映射表存储器为同步动态随机存储器SDRAM。
[0097] 其中,内存映射表存储器采用访问速度更快的存储器SDRAM等,以减少访问地址映射表的时间开销。
[0098] 所述内存地址随机映射控制器,具体用于查询内存映射表,记录内存写操作次数,以及对内存映射表进行更新;所述内存映射表存储器,用于存储各个层次的当前内存随机映射表、上次内存随机映射表和上次内存随机映射表的反向映射表。在所述内存地址映射控制器接收到内存逻辑地址后,查询内存映射表存储器中的相应映射表,得到内存物理地址。在所述内存地址映射控制器判断内存写次数达到某一阈值时,更新内存映射表存储器中存储的各个映射表。在所述内存地址映射控制器判断出一个内存物理地址是上次地址映射的结果时,须按照当前地址映射表的映射关系进行物理内存的调整,包括内容的调整以及相关表和表项的调整。
[0099] 根据本实施例提供的分层是基于随机映射的相变内存磨损均衡系统,可用于执行或实现上述实施例一所述的分层的基于随机映射的相变内存磨损均衡方法,其实现原理和有益效果类似,此处不再赘述。
[0100] 以上实施例仅用于说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。