非易失性内存及控制方法
技术领域
本发明涉及一种内存及控制该内存的方法,具体涉及一种非易失性的内存及其控制方法。
背景技术
目前计算机系统中使用的内存一般均为DRAM(动态随机存储器),这类存储器在系统断电后不能保存数据,使得系统在断电重启时,必须从硬盘等存储器中读取数据,影响了系统效能。本发明利用新一代非易失存储器(如相变存储器,即PRAM),结合相应的高速缓存及控制方法,实现了一种在断电后仍能保存数据的非易失性内存,能极大提高系统的启动速度,并有利于降低能耗。
发明内容
本发明所要解决的技术问题是提供一种能保存数据的非易失性内存。
为了解决以上技术问题,本发明提供了一种非易失性内存,包括内存接口电路,与内存接口电路相连接的非易失性存储器,非易失性存储器中的数据块分为至少两组,每组至少两个数据块;与内存接口电路相连接的高速缓存,所述高速缓存包括至少两组高速缓存行组,每组至少两个高速缓存行,高速缓存用于读写非易失性存储器中的数据;高速缓存中的每个高速缓存行带有一个标记,用于记录该高速缓存行在非易失性存储器中相应数据的物理地址。
因为本发明用非易失存储器,结合相应的高速缓存及控制方法,实现了一种在断电后仍能保存数据的非易失性内存,能极大提高系统的启动速度,并有利于降低能耗。
控制前述非易失性内存可以采用以下方式:前述高速缓存包括N路M组数据块,其中N或M可以是任何正整数;高速缓存和非易失性存储器的存储空间划分为至少两个高速缓存行。高速缓存中的每个高速缓存行带有一个TAG标记,用于记录该高速缓存行在非易失性存储器中的物理地址的连续K位地址,数值K的大小为X-L,X为非易失性存储器地址的比特数,数值L的大小根据高速缓存行的大小来定,2的L次方为高速缓存行的大小。将高速缓存的高速缓存行分成M组高速缓存行组,每组N个高速缓存行;将非易失性存储器中的高速缓存行分成若干组,每组M个高速缓存行;非易失性存储器中每个高速缓存行组的第J个高速缓存行的数据可以临时存放在高速缓存中第J个高速缓存行组中的任意一个高速缓存行中。
控制前述非易失性内存还可以采用以下方式:高速缓存控制将高速缓存与非易失性存储器中的存储页建立映射关系,存储页是指计算机内存中用于存储数据的一段连续的存储空间;高速缓存中的每个数据页带有一个物理地址标记,用于记录非易失性存储器中相应存储页的物理地址,从而建立映射关系。
前述两种非易失性内存的控制方法还包括:向内存写入数据时,数据先存入高速缓存中标记为“clean”的数据块,并将相应数据块标记为“dirty”,同时更新相应的写入次数;当有至少两个“clean”数据块可用时,优先使用读取次数比较少的“clean”数据块。当高速缓存中的“dirty”数据块较多时,控制系统将近期写入次数较少的“dirty”数据块的数据写入非易失性存储器,并将高速缓存中的相应数据块标记为“clean”,同时将写入次数清零;重复以上操作,直到“clean”数据块达到一定的数量;系统可以发指令将高速缓存中的所有“dirty”区域的数据写入非易失性存储器。系统将高速缓存中标记为“dirty”的数据块按写入次数的多少分成若干个先入先出队列;每一个“dirty”队列中的数据块的写入次数在相同的范围内;当下一级“dirty”队列中的数据块写入次数增加时,相应数据块将被放入上一级“dirty”队列,直至数据块进入最高一级的队列;对于数据块的写入次数在一定范围里的“dirty”队列,当数据块的写入次数增加时,该数据块的位置将被调至当前队列的入口处;当其写入次数达到当前队列写入次数的上限,再将该数据块放入高一级队列。“dirty”队列数量为至少两个,各队列的写入次数为一确定值或是某一范围值;系统每次从低级的“dirty”队列的出口取数据块,用完后再从高一级队列取。当系统须断电时,将高速缓存中标记为“dirty”的所有数据写入非易失性存储器。从内存读取数据时,先从高速缓存中读取数据;若高速缓存中无所需数据,再从非易失性存储器中读取,同时将数据存入高速缓存。当系统须断电时,将高速缓存中标记为“dirty”的所有数据写入非易失性存储器。
优选的,前述的非易失性内存,高速缓存的每一数据块有一相关的属性区域用于记录其读写次数及数据状态;非易失性存储器的每一数据块有一相关的属性区域用于记录其读写次数,该属性区域位于非易失性存储器中。
前述非易失性内存的控制方法,包括计算机系统对非易失性存储器的读写次数进行统计,若某数据块的读取或写入次数超过一设定值,可将相应数据移至读写次数较少的数据块。当某数据块的读写次数达到最大允许读写次数时,系统将该数据块中的数据移至其他读写次数较少的未使用数据块,同时屏蔽原数据块,不再使用。系统对数据块的读写次数进行统计,并向用户提供相关信息;当系统平均读写次数达到某一预先指定的值时,系统将报警,提示用户更换内存。
附图说明
下面结合附图和具体实施方式对本发明作进一步详细说明。
图1是非易失性内存结构示意图。
具体实施方式
如图1所示,非易失内存包括内存接口电路、非易失性存储器和与内存接口电路相连接的高速缓存,高速缓存可以读写非易失性存储器中的数据。内存接口可采用DDR,DDR2,RAMBUS等形式,但不局限于于此;非易失性存储器可采用相变存储器(PRAM),但不局限于于此。
高速缓存可采用N路M组的控制方式,其中N,M可以是任何整数。高速缓存及非易失性存储器的存储空间划分为若干个数据块(以下称为高速缓存行),每个高速缓存行的大小可自由设定,通常可设为64字节或126字节,但不局限于此。高速缓存中的每个高速缓存行带有一个TAG标记,用于记录该高速缓存行在非易失性存储器中的物理地址的连续K位地址(可以是高位或低位地址比特)。数值K的大小为X-L,X为非易失性存储器地址的比特(BIT)数,数值L的大小根据高速缓存行的大小来定,64字节对应的L为6,126字节对应的L为7。即2的L次方为高速缓存行的大小。
可以将高速缓存的高速缓存行分成M组(以下称高速缓存行组),每组N个高速缓存行。同样可以将非易失性存储器中的高速缓存行分成若干组,每组M个高速缓存行。非易失性存储器中每个高速缓存行组的第一个高速缓存行的数据可以临时存放在高速缓存中第一个高速缓存行组中的任意一个高速缓存行中,非易失性存储器中每个高速缓存行组的第二个高速缓存行的数据可以临时存放在高速缓存中第二个高速缓存行组中的任意一个高速缓存行中,依此类推,非易失性存储器中每个高速缓存行组的第J个高速缓存行的数据可以临时存放在高速缓存中第J个高速缓存行组中的任意一个高速缓存行中。
同样,高速缓存控制也可采用存储页映射的方式。即将高速缓存与非易失性存储器中的存储页建立映射关系。存储页是指计算机内存中用于存储数据的一段连续的存储空间。其大小可由计算机系统调节,通常为4K字节(BYTE)或6K字节,但不局限于此。高速缓存中的每个数据页带有一个物理地址标记,用于记录非易失性存储器中相应存储页的物理地址,从而建立映射关系。(以下将高速缓存行和存储页统称为数据块)
高速缓存的每一数据块有一相关的属性区域用于记录其读写次数及数据状态(如数据是否已存入非易失性存储器等)。该属性区域可位于高速缓存中。
当需向内存写入数据时,数据先存入高速缓存中标记为“clean”的数据块(即该处的数据已存入非易失性存储器,高速缓存中为空),并将相应数据块标记为“dirty”(即高速缓存中有数据),同时更新相应的写入次数。这里将数据已经存入非易失性存储器的数据块称为“clean”数据块。当有多个“clean”数据块可用时,优先使用读取次数少的。当高速缓存中的“dirty”数据块较多时,控制系统将近期写入次数较少的“dirty”数据块的数据写入非易失性存储器,并将高速缓存中的相应数据块标记为“clean”,同时将写入次数清零。重复以上操作,直到“clean”数据块达到一定的数量。系统在必要时(如系统关机)可发指令将高速缓存中的所有“dirty”区域的数据写入非易失性存储器。
系统将高速缓存中标记为“dirty”的数据块按写入次数的多少分成若干个先入先出队列(以下称为“dirty”队列)。每一个“dirty”队列中的数据块的写入次数在相同的范围内。例如,“dirty”队列1中的数据块的写入次数为1次,“dirty”队列2中的数据块的写入次数为2次,“dirty”队列3中的数据块的写入次数为3次以上。当“dirty”队列1中的数据块写入次数增加时,相应数据块将被放入“dirty”队列2。依此类推,直至数据块进入最高一级的队列(例如这里为“dirty”队列3)。对于数据块的写入次数在一定范围里的“dirty”队列,如本例中的“dirty”队列3,当数据块的写入次数增加时,该数据块的位置将被调至当前队列的入口处。当其写入次数达到当前队列写入次数的上限,再将该数据块放入高一级队列(即写入次数更多的队列)。队列数量可为任意个,各队列的写入次数可为一确定值,也可以是某一范围(如2至5次或大于3次等)。系统每次从低级(即写入次数较低)的“dirty”队列的出口取数据块,用完后再从高一级队列取。
当需从内存读取数据时,先从高速缓存中读取数据。若高速缓存中无所需数据,再从非易失性存储器中读取,同时将数据存入高速缓存。非易失性存储器的每一数据块有一相关的属性区域用于记录其读写次数。该属性区域位于非易失性存储器中。计算机系统对非易失性存储器的读写次数进行统计,若某数据块的读取或写入次数较多,可将相应数据移至读写次数较少的数据块,以延长内存的使用寿命。当某数据块的读写次数达到最大允许读写次数时,系统将该数据块中的数据移至其他读写次数较少的未使用数据块,同时屏蔽原数据块,不再使用。系统对数据块的读写次数进行统计,并向用户提供相关信息。当系统平均读写次数达到某一预先指定的值时(可以是非易失性存储器的读写寿命),系统将报警,提示用户更换内存。当系统需要断电时,将高速缓存中标记为“dirty”的所有数据写入非易失性存储器。上述控制方法可以在计算机操作系统中实现,也可以在非易失内存的控制器中用硬件实现。