一种存储系统掉电保护方法、存储控制器及电子设备技术领域
本发明涉及通信技术领域,尤其涉及一种存储系统掉电保护方法、存储控制器及
电子设备。
背景技术
随着闪存技术的普及,基于flash(中文:闪存)的存储设备(如SSD,Solid State
Drive,中文:固态硬盘)在开发、测试,以及用户使用过程中,可能由于终端产生异常掉电而
造成闪存状态异常,从而导致数据被破坏,最终造成设备开机失败。
目前,为了实现终端产生异常掉电时的掉电保护,在写数据时,元数据存储模块,
通常在每个块的每一页的OOB(英文:Out Of Band,中文:带外空间)区域,或是在最后一页
的OOB区域记录数据的信息摘要,其中,信息摘要包括块上所有页的逻辑地址和物理地址的
映射关系;由于在属于非易失性介质的SSD中的数据进行改写时,并不是在原有数据所存储
的位置进行改写,而是将改写的内容存储在SSD中的其他位置,且当需要存储至SSD中的映
射关系达到一定数量时,才能够下写至SSD中,因此,在发生掉电时,新的映射关系虽然已经
生成,但考虑到SSD是以数据块为单位进行存储的,这样可能会导致新的映射关系还未下写
到SSD中,及新的映射关系不能被及时存储在SSD中;当存储系统上电时,存储阵列扫描模块
通过对整个SSD扫描每一页的OOB区域,或是扫描最后一页的OOB区域,来获取所有数据页的
映射关系,之后根据所获取的所有数据页的映射关系的新旧程度,确定同一逻辑地址对应
的最新的物理地址,从而确定最新的映射关系,以实现掉电保护。
但是,由于SSD的容量很大,对SSD进行全盘扫描会耗费大量的时间。因此,采用上
述方法来实现掉电保护,对于大容量的SSD,存储系统需要耗费大量时间进行映射关系的恢
复。
发明内容
本发明提供一种存储系统掉电保护方法、存储控制器及电子设备,能够解决存储
系统需要耗费大量时间进行映射关系恢复的问题。
为达到上述目的,本发明实施例采用如下技术方案:
一方面,本发明提供一种存储系统掉电保护方法,该方法用于一种电子设备,电子
设备中包括:中央处理器(英文:,简称:CPU)、存储控制器、flash、高速非易失性存储器和动
态随机存取存储器(英文:,简称:DRAM),高速非易失性存储器中保存有一级映射表和日志
缓存区,flash中保存有二级映射表、三级映射表和日志区,其中,
日志缓存区用于保存在电子设备正常工作时,CPU在将数据的映射关系写到DRAM
的同时,通过存储控制器写到日志缓存区中数据的映射关系;
日志区用于在若日志缓存区中的存储空间达到第一阈值后,保存存储控制器从日
志缓存区中读取的数据的映射关系;
三级映射表的索引信息为数据的映射关系,三级映射表用于在日志区中的数据达
到第二阈值时,三级映射表被刷新并保存日志区中数据的映射关系;
一级映射表的索引信息为二级映射表的映射关系;
二级映射表的索引信息为三级映射表的映射关系;
映射关系为逻辑地址与物理地址的对应关系;
该方法包括:
当CPU前次下电属于异常下电后,存储控制器根据一级映射表的索引信息确定二
级映射表的物理地址,并根据二级映射表的物理地址找到二级映射表,通过访问二级映射
表的索引信息来确定三级映射表的物理地址,之后根据三级映射表的物理地址找到三级映
射表,确定三级映射表的索引信息;
存储控制器读取日志缓存区中所有数据的映射关系,以及日志区中所有数据的映
射关系;
存储控制器向CPU发送三级映射表的索引信息、日志缓存区中所有数据的映射关
系,以及日志区中所有数据的映射关系;
当存储控制器在CPU根据三级映射表的索引信息、日志缓存区中所有数据的映射
关系判断有至少一个数据在日志缓存区的映射关系或者在日志区中的映射关系与在三级
映射表中的映射关系不一致时,使用至少一个数据在日志缓存区的映射关系或者在日志区
中的映射关系替换掉在三级映射表中的映射关系,其中,在替换时,优先使用至少一个数据
在日志缓存区的映射关系进行替换;
存储控制器根据刷新后的三级映射表更新二级映射表的索引信息,之后根据更新
后的二级映射表更新一级映射表的索引信息,且将更新后的二级映射表中在更新前后发生
改变的映射关系保存至DRAM。
其中,本发明实施例中,高速非易失性存储器是指读写速度比flash更快,同时,每
次可直接操作数据的粒度更小(例如,按字节进行操作而不像flash一样按块进行操作)的
存储器,例如,MRAM(英文:Magnetic Random Access Memory,中文:磁性随机存取存储器)
或者PCM(英文:Phase-change memory,中文:相变存储器)。但高速非易失性存储器通常成
本比flash高,容量也比flash小,无法适合大规模使用。
本实施例中,设置了各级映射表以及日志缓存区、日志区等多个位置来保存数据
的映射关系,使得CPU断电后,存储控制器能够根据保存的各个映射关系进行恢复,在这过
程中,由于是通过各级映射表一级一级地查找,而不是使用现有技术全盘扫描的方式,因
此,在查找数据的映射关系的过程中提升了速度。
另一方面,在保存各个映射关系时,还充分利用了高速非易失性存储器以及flash
的特点。具体的,以高速非易失性存储器为MRAM为例,由于MRAM速度快的特性,可以将日志
缓存区放在MRAM中,由于CPU在将数据映射关系写到DRAM时,也会写到MRAM,这是个使用频
率很高的操作,如果速度慢,会对整个系统造成影响,因此,这里使用MRAM来保存日志缓存
区的数据,能够最大程度保证系统的性能。
同时,本实施例还将一级映射表也放置在MRAM中,由于一级映射表是用于查找二、
三级映射表的,所以必须先知道一级映射表的地址,且这个地址需要固定。如果将一级映射
表放置在flash一片固定地址中,由于flash本身的特性,不断读写这一块区域时,会产生过
多磨损,最终导致flash发生故障。而MRAM并不存在这个问题,因此,可以在MRAM中专门开辟
一块区域来进行一级映射表的放置。同时,由于一级映射表的容量也不会很大(仅保存二级
表的索引信息),因此,也适合使用MRAM来保存映射表。而其他表(例如,二级映射表、三级映
射表)占用空间相对较大,可以利用flash大容量的特性放置在flash当中,从而达到最优配
置。
在一种可能的设计中,在CPU上电之后,存储控制器需要向CPU上报用于反应异常
下电的标志位,该标志位位于存储控制器的寄存器,使得CPU根据标志位判断前次下电是否
属于异常下电。
由此可见,采用上述上报标志位的方式,能够使CPU快速且有效区分前次下电是否
属于异常下电,若属于正常下电,则触发正常上电流程,否则,则触发上述异常上电流程。
在一种可能的设计中,日志缓存区被划分为n个队列,n个队列用Q1至Qn表示,其
中,n为大于或等于1的正整数,日志区包括至少两个区块,且每个区块对应日志缓存区中的
一个队列;在日志缓存区中的存储空间达到第一阈值后,存储控制器从日志缓存区中读取
日志缓存区中的数据的映射关系,并保存到日志区,具体包括:在日志缓存区中目标列的存
储空间达到第一阈值后,存储控制器将目标列中数据的映射关系存储至日志区中目标区块
对应的位置,目标区块为目标列对应的区块。
考虑到日志缓存区中的存储空间有限,这样一来不仅可以保证日志缓存区中存在
足够的空闲存储资源,同时还可以保证,批量将数据的映射关系写到flash的日志区中,即
满足了日志区对于数据的映射关系的存储要求。
在一种可能的设计中,在电子设备正常工作时,若三级映射表在刷新后被修改条
目的数量达到第三阈值,则存储控制器根据刷新后的三级映射表刷新二级映射表的索引信
息;若二级映射表在刷新后被修改条目的数量达到第四阈值,则存储控制器根据刷新后的
二级映射表更新一级映射表的索引信息。
在本发明中,索引信息是逐级刷新的,且根据三级映射表刷新二级映射表,以及根
据二级映射表刷新一级映射表的过程,均是在映射表中被修改条目的数量达到一定阈值
时,才进行刷新的。由此可见,采用上述批量刷新的方式,能够在尽可能确保映射表处于较
新状态的前提条件下,减少映射表的刷新频次,同时,满足映射表对于刷新操作的需求。
另一方面,本发明提供一种存储控制器,该存储控制器可以实现上述方法示例中
存储控制器所执行的功能,所述功能可以通过硬件实现,也可以通过硬件执行相应的软件
实现。所述硬件或软件包括一个或多个上述功能相应的模块。
又一方面,本发明提供一种电子设备,该电子设备中包括:CPU、上述存储控制器、
flash、高速非易失性存储器和动态随机存取存储器(英文:Dynamic Random Access
Memory,简称:DRAM),该存储控制器用于执行上述方法中存储控制器的相应功能。该电子设
备中还可以包括通信接口,用于与其他设备之间进行通信。
又一方面,本发明提供了一种计算机存储介质,用于储存为上述存储控制器所用
的计算机软件指令,其包含用于执行上述方面所设计的程序。
本发明提供的存储系统掉电保护方法、存储控制器及电子设备,高速非易失性存
储器是指读写速度比flash更快,同时,每次可直接操作数据的粒度更小的存储器,例如,
MRAM或者PCM。但高速非易失性存储器通常成本比flash高,容量也比flash小,无法适合大
规模使用。在本发明中,设置了各级映射表以及日志缓存区、日志区等多个位置来保存数据
的映射关系,使得CPU断电后,存储控制器能够根据保存的各个映射关系进行恢复,在这过
程中,由于是通过各级映射表逐级地查找,而不是使用现有技术全盘扫描的方式,因此,在
查找数据的映射关系的过程中提升了速度。并且,在保存各个映射关系时,还充分利用了高
速非易失性存储器以及flash的特点。具体的,以高速非易失性存储器为MRAM为例,由于
MRAM速度快的特性,可以将日志缓存区放在MRAM中,由于CPU在将数据映射关系写到DRAM
时,也会写到MRAM,这是个使用频率很高的操作,如果速度慢,会对整个系统造成影响,因
此,这里使用MRAM来保存日志缓存区的数据,能够最大程度保证系统的性能。同时,本发明
还将一级映射表也放置在MRAM中,由于一级映射表是用于查找二、三级映射表的,所以必须
先知道一级映射表的地址,且这个地址需要固定。如果将一级映射表放置在flash一片固定
地址中,由于flash本身的特性,不断读写这一块区域时,会产生过多磨损,最终导致flash
发生故障。而MRAM并不存在这个问题,因此,可以在MRAM中专门开辟一块区域来进行一级映
射表的放置。同时,由于一级映射表的容量也不会很大,因此,也适合使用MRAM来保存映射
表。而其他表占用空间相对较大,可以利用flash大容量的特性放置在flash当中,从而达到
最优配置。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的
附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领
域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附
图。
图1为本发明实施例提供的一种电子设备的结构示意图;
图2为本发明实施例提供的一种存储系统掉电保护方法流程图;
图3至图6为本发明实施例提供的另一种MRAM的结构示意图;
图7为本发明实施例提供的另一种存储系统掉电保护方法流程图;
图8为本发明实施例提供的一种存储控制器的结构示意图;
图9为本发明实施例提供的另一种存储控制器的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完
整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它
实施例,都属于本发明保护的范围。
参见图1,本发明适用于一种电子设备,该电子设备中包括CPU、存储控制器、
flash、高速非易失性存储器和DRAM。其中,DRAM具体可以为内存,高速非易失性存储器具体
可以为MRAM,存储控制器可以用FPGA来实现。
在本发明中,高速非易失性存储器中保存有一级映射表和日志缓存区,flash中保
存有二级映射表、三级映射表和日志区,其中,日志缓存区用于保存在电子设备正常工作
时,CPU在将数据的映射关系写到DRAM的同时,通过存储控制器写到日志缓存区中数据的映
射关系;日志区用于在若日志缓存区中的存储空间达到第一阈值后,保存存储控制器从日
志缓存区中读取的数据的映射关系;三级映射表的索引信息为数据的映射关系,三级映射
表用于在日志区中的数据达到第二阈值时,三级映射表被刷新并保存日志区中数据的映射
关系;一级映射表的索引信息为二级映射表的映射关系;二级映射表的索引信息为三级映
射表的映射关系;映射关系为逻辑地址与物理地址的对应关系。
需要说明的是,上述第一阈值,以及后文所提及的第二至第四阈值,在设定时,均
可以依据经验值或是具体的应用场景来预先设定。其中,第一阈值的作用在于判别日志缓
存区中存储的数据的映射关系是否需要写到flash的日志区中;第二阈值的作用在于判别
日志区中存储的数据的映射关系是否需要写到flash的三级映射表中;第三阈值的作用在
于判别刷新后的三级映射表中被修改的条目是否需要刷新到二级映射表中;第四阈值的作
用在于判别刷新后的二级映射表中被修改的条目是否需要刷新到一级映射表中。还需要说
明的是,第一、第二阈值均作为存储空间占用情况的参考值,比如,该第一阈值和/或该第二
阈值可以被设置为100%,90%等用于表示存储空间占用情况的参数,其中,若将该第一阈
值设置为100%,则表明在日志缓存区中的存储空间已满后,存储控制器将日志缓存区中的
数据的映射关系写到flash的日志区中;第三、第四阈值均作为被修改条目的数量的参考
值,比如,该第三阈值和/或该第四阈值可以被设置为50条,100条等用于表示修改条目的数
量的参数,其中,若将该第三阈值设置为50条,则表明三级表在刷新后被修改的条目达到50
条后,则存储控制器会根据刷新后的三级映射表刷新二级映射表的索引信息。另外,在本发
明中,第一阈值与第二阈值的取值可以相同或不同,第三阈值与第四阈值的取值也可以相
同或不同,在此不做限定,且上述阈值的设置方式以及参数类型也不做限制,比如,参数类
型可以为百分数、整数等其他类型。
另外,若日志缓存区中的数据的映射关系已经写到flash的日志区中,那么为了节
省存储空间,存储控制器可以直接将日志缓存区中已经写到日志区的内容删除,同时释放
已删除内容所占用的空间,以确保党日志缓存区需要存储新的数据的映射关系时,该日志
缓存区仍然能够为缓存过程提供足够的存储空间,即存储资源。或者,存储控制器不对日志
缓存区中的内容进行删除,而是对该部分内容进行标记,并当新的数据的映射关系写到日
志缓存区时,直接覆盖已被标记的那部分内容,这样一来,同样可以达到空间充分利用的效
果。对于三级映射表而言,若日志区所存储的数据达到第二阈值后,存储控制器同样需要将
日志区中的内容按区块写到三级映射表中,并且,为了节省flash的存储空间,也需要将日
志区的内容进行删除。
本发明实施例提供一种存储系统掉电保护方法,如图2所示,该方法均可以由上述
存储控制器来执行。
需要说明的是,该存储控制器具体可以包括MRAM控制器和SSD控制器,其中,MRAM
控制器可以用于监控MRAM中一级映射表和日志缓存区的状态,例如,判断日志缓存区的存
储空间是否达到一定阈值,此外,MRAM控制器还可以根据MRAM的状态,通知SSD控制器执行
相应操作;同理,SSD控制器可以用于监控flash中二级映射表、三级映射表和日志区的状
态,例如,判断当前三级映射表中的数据的映射关系是否需要逐级刷新到二级映射表和一
级映射表中,此外,SSD控制器还可以根据flash的状态,通知MRAM控制器执行相应操作。
另外,上述存储控制器的具体实现过程会在下文提出,在此不做赘述,且上述SSD
控制器与MRAM控制器仅作为存储控制器的一种具体的实现方式,但并不仅限于上述实现方
式。
该方法流程包括:
101、当CPU前次下电属于异常下电后,存储控制器根据一级映射表的索引信息确
定二级映射表的物理地址,并根据二级映射表的物理地址找到二级映射表,通过访问二级
映射表的索引信息来确定三级映射表的物理地址,之后根据三级映射表的物理地址找到三
级映射表,确定三级映射表的索引信息。
102、存储控制器读取日志缓存区中所有数据的映射关系,以及日志区中所有数据
的映射关系。
103、存储控制器向CPU发送三级映射表的索引信息、日志缓存区中所有数据的映
射关系,以及日志区中所有数据的映射关系。
104、当存储控制器在CPU根据三级映射表的索引信息、日志缓存区中所有数据的
映射关系判断有至少一个数据在日志缓存区的映射关系或者在日志区中的映射关系与在
三级映射表中的映射关系不一致时,使用至少一个数据在日志缓存区的映射关系或者在日
志区中的映射关系替换掉在三级映射表中的映射关系。
其中,在替换时,优先使用至少一个数据在日志缓存区的映射关系进行替换。
105、存储控制器根据刷新后的三级映射表更新二级映射表的索引信息,之后根据
更新后的二级映射表更新一级映射表的索引信息,且将更新后的二级映射表中在更新前后
发生改变的映射关系保存至DRAM。
在本发明中,为了节省flash的存储资源,可以在DRAM保存了更新后的二级映射表
之后,将flash中的二级映射表清空。
需要说明的是,当CPU正常下电时,在软件层面,存储控制器的一些程序模块(例
如,驱动)可以调用算法下电接口,通知算法进行正常下电操作;算法调用saveMap3inSSD函
数,并通过驱动逻辑将DRAM中所有更新的三级映射表下写到flash中,并返回新写入flash
中三级映射表的物理地址;根据返回的flash中新写入的三级映射表的物理地址来更新
DRAM中二级映射表的内容;将更新后的DRAM中所有的有更新的二级映射表写到flash中,并
返回新写入二级映射表的物理地址;将返回的二级映射表的物理地址保存到MRAM的一级映
射表中;将flash中当前的日志区内所有块全部设置为垃圾块,并向驱动返回算法下电操作
完成,同时驱动可以将存储控制器的寄存器中用于反应前次下电过程是否属于异常下电的
标志位flag设置为1,即表示前次下电过程属于正常下电。
在本发明中,高速非易失性存储器是指读写速度比flash更快,同时,每次可直接
操作数据的粒度更小(例如,按字节进行操作而不像flash一样按块进行操作)的存储器,例
如,MRAM或者PCM。但高速非易失性存储器通常成本比flash高,容量也比flash小,无法适合
大规模使用。
本实施例中,设置了各级映射表以及日志缓存区、日志区等多个位置来保存数据
的映射关系,使得CPU断电后,存储控制器能够根据保存的各个映射关系进行恢复,在这过
程中,由于是通过各级映射表一级一级地查找,而不是使用现有技术全盘扫描的方式,因
此,在查找数据的映射关系的过程中提升了速度。
另一方面,在保存各个映射关系时,还充分利用了高速非易失性存储器以及flash
的特点。具体的,以高速非易失性存储器为MRAM为例,由于MRAM速度快的特性,可以将日志
缓存区放在MRAM中,由于CPU在将数据映射关系写到DRAM时,也会写到MRAM,这是个使用频
率很高的操作,如果速度慢,会对整个系统造成影响,因此,这里使用MRAM来保存日志缓存
区的数据,能够最大程度保证系统的性能。
同时,本实施例还将一级映射表也放置在MRAM中,由于一级映射表是用于查找二、
三级映射表的,所以必须先知道一级映射表的地址,且这个地址需要固定。如果将一级映射
表放置在flash一片固定地址中,由于flash本身的特性,不断读写这一块区域时,会产生过
多磨损,最终导致flash发生故障。而MRAM并不存在这个问题,因此,可以在MRAM中专门开辟
一块区域来进行一级映射表的放置。同时,由于一级映射表的容量也不会很大(仅保存二级
表的索引信息),因此,也适合使用MRAM来保存映射表。而其他表(例如,二级映射表、三级映
射表)占用空间相对较大,可以利用flash大容量的特性放置在flash当中,从而达到最优配
置。
由于在CPU这一次上电之前,CPU可能为正常下电或是异常下电,而不同的下电状
态,会使CPU再一次上电时触发不同的处理流程,因此,在本发明实施例的一个实现方式中,
当CPU上电时,可以通过读取存储控制器发送的标志位来确定此前的下电过程属于正常下
电或是异常下电操作,之后根据下电状态来选择不同的处理流程。因此,在CPU上电之后,存
储控制器向CPU上报用于反映异常下电的标志位。
具体的,标志位可以位于存储控制器中的寄存器,在CPU正常下电时,存储控制器
中的驱动可以对标志位进行设置,比如将标志位flag设置为1;而在CPU异常下电时,由于存
储控制器断电,因此无法完成对标志位进行设置的操作,因此,当CPU再次上电时所读取到
的flag值为在正常工作时的一个值(如0),而不是1时,表明上次CPU下电是异常下电。需要
说明的是,对于区分CPU是否为正常下电的方式不仅限于上述设置标志位的实现方式,还可
以为其他可以用于区分CPU下电状态的其他操作,在此不做赘述。
在本实施中,采用上述读取标志位的方式,能够使存储控制器快速且有效的区分
前次下电是否属于异常下电,若属于正常下电,则触发CPU的正常上电流程,否则,则触发上
述异常上电流程。
本实施例中,CPU正常上电流程为:CPU接收到存储控制器的驱动读取到标志位,调
用算法初始化接口,传输标志位。当标志位flag=1时,算法正常调用上电流程。即算法通过
驱动逻辑,读取高速非易失性存储器中一级映射表的内容,并根据一级映射表中记载的二
级映射表的物理地址,找到flash中二级映射表的位置,访问二级映射表的内容,将读取到
的二级映射表的内容保存在主存中,即保存在DRAM中,并给驱动返回确定信息。
当CPU为正常上电时,CPU可以直接根据高速非易失性存储器中存储的一级映射表
中的映射关系找到存储在SSD的二级映射表的物理地址,之后访问二级映射表,并将二级映
射表中的映射关系同步至DRAM中,以便于后续读取数据时,能够根据DRAM中的二级映射表,
来确定三级映射表在flash中存储的物理地址,并通过访问三级映射表来确定数据的存储
地址。
当CPU为异常上电时,即CPU的前次下电属于异常下电,存储介质还来不及执行任
何操作就已经掉电了。这就意味着,存储在DRAM中的映射关系因异常下电而丢失,仅有具有
非易失性特性的高速非易失性存储器和flash中存储的数据仍然保留。因此,存储控制器可
以根据一级映射表中的映射关系找到存储在flash的二级映射表的物理地址,之后访问二
级映射表,并根据二级映射表中的映射关系找到存储在flash的三级映射表的物理地址,并
读取三级映射表中存储的数据的映射关系。
在另一实施例中,为了方便将日志缓存区中的内容批量下写到flash的日志区中,
日志缓存区可以被划分为n个队列,其中,n个队列可以用Q0至Qn来表示,n为大于或等于1的
正整数,日志区包括至少两个区块,且每个区块对应日志缓存区中的一列。在本发明实施例
中,当满足一定条件时,存储控制器可以将日志缓存区中存储的内容按队列写到日志区。因
此,在日志缓存区中的存储空间达到第一阈值后,存储控制器从日志缓存区中读取日志缓
存区中的数据的映射关系,并保存到日志区,具体可以实现为:
在日志缓存区中目标列的存储空间达到第一阈值后,存储控制器将目标列中数据
的映射关系存储至日志区中目标区块对应的位置,目标区块为目标列对应的区块。
需要说明的是,区块可以被视为与队列对应的一块区域。区块的构成与队列是相
同的,均是由多个表项构成的一块区域。
例如:在MRAM处于如图3所示的状态时,若CPU正常下电,则存储控制器可以将日志
缓存区的Q0至Qn队列中的映射关系写到flash的日志区,并在日志缓存区中的存储空间达
到第一阈值后,将日志区中的内容刷新到三级映射表,以及二级映射表和一级映射表,即最
终刷新MRAM中的映射表索引区。其中,将三级映射表中的内容逐级刷新到二级映射表和一
级映射表的过程,会在后文提出,在此不做赘述。需要说明的是,图中状态表区对应flash的
日志区中的各个区块,因此,当三级映射表更新时,位于MRAM中的状态表区也会更新。
如图4所示,为将已经产生的映射关系写到MRAM中对应队列之后,MRAM中的日志缓
存区的存储状态。
如图5所示,当Q0至Qn队列中存在至少一个队列的存储空间达到所述第一阈值后,
则将该至少一个队列所存储的数据的映射关系写到flash的日志区中,之后根据已写到
flash的日志区的映射关系更新状态表区。
在CPU进行正常下电之后,高速非易失性存储器的存储状态如图6所示,即日志缓
存区的Q0至Qn队列中的数据已写到flash的日志区,并在完成写操作之后,清除日志缓存区
的所有内容。
当CPU在某个时刻异常下电时,也就是CPU发生异常掉电时,存储介质还来不及执
行任何操作就已经掉电了,则MRAM的存储状态为如图3至5所示的任意一种状态。此时,MRAM
中的内容没有执行任何操作,标志位也未被更改,即为CPU异常下电。
当CPU再次上电时,存储控制器先读取标志位并上报给CPU,这样可以确定CPU为异
常上电。此时,Q0至Qn队列、日志区中均存储着最新或是较新的映射信息,各级映射表中的
部分内容为非最新的映射信息。存储控制器可以分区块读取Q0至Qn队列、日志区以及三级
映射表所存储的内容,并进行比较。其中,映射关系的新旧程度依次为Q0至Qn队列、日志区、
三级映射表。通过比较后,存储控制器可以根据最新的映射信息刷新三级映射表,从而在满
足一定刷新条件之后逐级更新二级映射表和一级映射表,之后清空Q0至Qn队列,以及日志
区,从而完成映射关系的恢复。
在本发明中,考虑到日志缓存区中的存储空间有限,这样一来不仅可以保证日志
缓存区中存在足够的空闲存储资源,同时还可以保证,批量将数据的映射关系写到flash的
日志区中,即满足了日志区对于数据的映射关系的存储要求。
在本发明实施例的一个实现方式中,在电子设备正常工作时,从三级映射表逐级
刷新二级映射表与一级映射表的过程,可以实现为如图7所示的实现方式:
201、若三级映射表在刷新后被修改条目的数量达到第三阈值,则存储控制器根据
刷新后的三级映射表刷新二级映射表的索引信息。
202、若二级映射表在刷新后被修改条目的数量达到第四阈值,则存储控制器根据
刷新后的二级映射表更新一级映射表的索引信息。
由此可见,从三级映射表逐级刷新二级映射表与一级映射表的过程中,是依据映
射表在刷新后被修改条目的数量来确定是否需要刷新到下一级映射表。采取上述刷新过
程,不仅能够满足flash对于写操作的需求,同时,也能够减少为了刷新而进行写操作的次
数。
上述主要从电子设备中存储控制器的角度对本发明实施例提供的方案进行了介
绍。可以理解的是,存储控制器为了实现上述功能,其包含了执行各个功能相应的硬件结构
和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各
示例的单元及算法步骤,本发明能够以硬件或硬件和计算机软件的结合形式来实现。某个
功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设
计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,
但是这种实现不应认为超出本发明的范围。
本发明实施例可以根据上述方法示例对存储控制器等进行功能模块的划分,例
如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处
理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式
实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划
分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,或是采用集成的单元的情况
下,图8示出了上述实施例中所涉及的存储控制器的一种可能的结构示意图。存储控制器30
包括:确定模块31、获取模块32、发送模块33、处理模块34和存储模块35。例如,确定模块31,
用于执行图2的过程101;获取模块32,用于执行图2的过程102;发送模块33,用于执行图2的
过程103;处理模块34,用于执行图2的过程104和过程105,以及图4的过程201和过程202;存
储模块35,用于保存存储控制器的程序代码和数据。其中,上述方法实施例涉及的各步骤的
所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
上述确定模块31和处理模块34可以集成在处理器上,该处理器可以为中央处理器
(英文:Central Processing Unit,简称:CPU),通用处理器,数字信号处理器(英文:
Digital Signal Processor,简称:DSP),专用集成电路(英文:Application-Specific
Integrated Circuit,简称:ASIC),现场可编程门阵列(英文:Field Programmable Gate
Array,简称:FPGA)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。
其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所
述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理
器的组合等等。获取模块32与发送模块33具体可以为收发器、收发电路或通信接口等。存储
模块35可以是存储器。
当确定模块31和处理模块34为处理器,获取模块32和发送模块33为通信接口,存
储模块35为存储器时,本发明实施例所涉及的存储控制器可以为图9所示的存储控制器40。
参阅图9所示,该存储控制器40包括:处理器41、通信接口42、存储器43以及总线
44。其中,处理器41、通信接口42和存储器43通过总线44相互连接;总线44可以是外设部件
互连标准(英文:Peripheral Component Interconnect,简称:PCI)总线或扩展工业标准结
构(英文:Extended Industry Standard Architecture,简称:EISA)总线等。所述总线可以
分为地址总线、数据总线、控制总线等。为便于表示,图9中仅用一条粗线表示,但并不表示
仅有一根总线或一种类型的总线。
结合本发明公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可
以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模
块可以被存放于随机存取存储器(英文:Random Access Memory,简称:RAM)、闪存、只读存
储器(英文:Read Only Memory,简称:ROM)、可擦除可编程只读存储器(英文:Erasable
Programmable ROM,简称:EPROM)、电可擦可编程只读存储器(英文:Electrically EPROM,
简称:EEPROM)、寄存器、硬盘、移动硬盘、只读光盘(简称:CD-ROM)或者本领域熟知的任何其
它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储
介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。
处理器和存储介质可以位于ASIC中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功
能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能
存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另
一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何
可用介质。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步
详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明
的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应
包括在本发明的保护范围之内。