具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,下面所描述的本申请各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
除非另有定义,本说明书所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本说明书中在本申请的说明书中所使用的术语只是为了描述具体的实施方式的目的,不是用于限制本申请。本说明书所使用的术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。
下面结合说明书附图具体阐述本申请的技术方案:
在本申请实施例中,闪存设备包括固态硬盘或者其他以闪存介质为存储介质的存储设备,闪存设备控制器包括固态硬盘或者其他以闪存介质为存储介质的存储设备的控制器。
具体的,请参阅图1,图1是本申请实施例提供的一种闪存设备的结构示意图。
如图1所示,闪存设备100包括闪存介质110以及与闪存介质110连接的闪存设备控制器120。其中,闪存设备100通过有线或无线的方式与主机200通信连接,用以实现数据交互。
闪存介质110,作为闪存设备100的存储介质,也称作闪存、Flash、Flash存储器或Flash颗粒,属于存储器件的一种,是一种非易失性存储器,在没有电流供应的条件下也能够长久地保存数据,其存储特性相当于硬盘,使得闪存介质110得以成为各类便携型数字设备的存储介质的基础。
其中,闪存介质110可以为Nand Flash,Nand Flash以单晶体管作为二进制信号的存储单元,其结构与普通的半导体晶体管非常相似,区别在于Nand Flash的单晶体管加入了浮动栅和控制栅,浮动栅用于贮存电子,表面被一层硅氧化物绝缘体所包覆,并通过电容与控制栅相耦合,当负电子在控制栅的作用下被注入到浮动栅中,Nand Flash的单晶体的存储状态就由“1”变成了“0”,而当负电子从浮动栅中移走后,存储状态就由“0”变成了“1”,包覆在浮动栅表面的绝缘体用于将浮动栅中的负电子困住,实现数据存储。即Nand Flash的存储单元为浮动栅晶体管,使用浮动栅晶体管以电荷的形式存储数据。存储电荷的多少与浮动栅晶体管所被施加的电压的大小有关。
一个Nand Flash包括至少一个Chip芯片,每一个Chip芯片由若干个Block物理块组成,每一个Block物理块包括若干个Page页。其中,Block物理块是Nand Flash执行擦除操作的最小单位,Page页为Nand Flash执行读写操作的最小单位,一个Nand Flash的容量等于其Block物理块的数量*一个Block物理块包含的Page页的数量*一个Page页的容量。具体的,闪存介质10按照存储单元的电压的不同层次,可分为SLC、MLC、TLC以及QLC。
闪存设备控制器120,包括数据转换器121、处理器122、缓存器123、闪存控制器124以及接口125。
数据转换器121,分别与处理器122和闪存控制器124连接,所述数据转换器121用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当闪存控制器124向闪存介质110写入数据时,通过数据转换器121将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质110。当闪存控制器124从闪存介质110读取数据时,通过数据转换器121将闪存介质110中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,数据转换器121可以包括二进制数据寄存器和十六进制数据寄存器。二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器122与数据转换器121、缓存器123、闪存控制器124以及接口125可以通过总线或者其他方式连接,处理器122用于运行存储在缓存器123中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
缓存器123,主要用于缓存主机200发送的读/写指令以及根据主机200发送的读/写指令从闪存介质110获取的读数据或者写数据。缓存器123作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。缓存器123可以包括存储程序区,存储程序区可存储操作系统、至少一个功能所需要的应用程序。此外,缓存器123可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,缓存器123可选包括相对于处理器122远程设置的存储器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。缓存器123可以为静态随机存取存储器(StaticRandom Access Memory,SRAM)或者耦合内存(Tightly Coupled Memory,TCM)或者双倍速率同步动态随机存储器(Double DataRate Synchronous Dynamic Random AccessMemory,DDR SRAM)。
闪存控制器124,与闪存介质110、数据转换器121、处理器122以及缓存器123连接,用于访问后端的闪存介质110,管理闪存介质110的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATA target协议端或者NVMe协议端,获取主机200发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责FTL(Flashtranslation layer,闪存转换层)的核心处理。
接口125,连接主机200以及数据转换器121、处理器122以及缓存器123,用于接收主机200发送的数据,或者,接收处理器122发送的数据,实现主机200与处理器122之间的数据传输,接口125可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2 NVME/SATA协议。
请再参阅图2,图2是本申请实施例提供的一种闪存设备控制器的结构示意图;其中,该闪存设备控制器属于上述的闪存设备。
如图2所示,该闪存设备控制器120,包括:PCIe接口控制器126、DDR控制器127、NVMe接口控制器128、处理器122、外设模块129、数据通路模块1210以及闪存控制器124。
具体的,PCIe接口控制器126,用于PCIe通信协议的控制,DDR控制器127,用于动态随机存储器的控制,NVMe接口控制器128用于NVMe通信协议的控制,外设模块129用于其他相关通信协议的控制,数据通路模块1210用于数据通路的控制,例如:写缓存的管理,闪存控制器124用于闪存的数据处理。
其中,该闪存设备控制器120,还包括数据转换器121、缓存器123、接口125等。
具体的,数据转换器121,分别与处理器和闪存控制器连接,数据转换器用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当闪存控制器向所述闪存介质写入数据时,通过数据转换器将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质。当闪存控制器从闪存介质读取数据时,通过数据转换器将闪存介质中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,数据转换器可以包括二进制数据寄存器和十六进制数据寄存器。二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
具体的,处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器与数据转换器、缓存器、闪存控制器以及接口可以通过总线或者其他方式连接,处理器用于运行存储在缓存器中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
具体的,缓存器123,主要用于缓存主机发送的读/写指令以及根据主机发送的读/写指令从闪存介质获取的读数据或者写数据。缓存器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。缓存器可以包括存储程序区,存储程序区可存储操作系统、至少一个功能所需要的应用程序。此外,缓存器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,缓存器可选包括相对于处理器远程设置的存储器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。缓存器可以为静态随机存取存储器(Static Random Access Memory,SRAM)或者耦合内存(Tightly Coupled Memory,TCM)或者双倍速率同步动态随机存储器(DoubleDataRate Synchronous Dynamic Random Access Memory,DDR SRAM)。
具体的,闪存控制器124,与闪存介质、数据转换器、处理器以及缓存器连接,用于访问后端的闪存介质,管理闪存介质的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATA target协议端或者NVMe协议端,获取主机发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责闪存转换层(Flash translationlayer,FTL)的核心处理。
具体的,接口125,连接主机以及数据转换器、处理器以及缓存器,用于接收主机发送的数据,或者,接收处理器发送的数据,实现主机与处理器之间的数据传输,接口可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2 NVME/SATA协议。
请参阅图3,图3是本申请实施例提供的一种闪存设备的坏块替换方法的流程示意图;
具体的,该闪存设备的坏块替换方法应用于闪存设备,其中,该闪存设备包括存储空间,该存储空间包括系统空间和用户数据空间,该系统空间和该用户数据空间包括多个超级块。
在本申请实施例中,系统空间指的是闪存设备的系统内部维护的供整个系统运行正常的数据空间,系统空间(syszone)用于存储系统数据,系统数据包括:L2P表、P2L数据、raid数据,坏块表,用户配置元数据等等的数据;用户数据空间(userzone)指的是存储用户数据的空间,即,用户数据空间用于存储用户写入的数据。
如图3所示,该闪存设备的坏块替换方法,包括:
步骤S301:若系统空间满足借块条件,则确定用户数据空间中的擦除次数最大的超级块为第一超级块;
具体的,判断系统空间是否满足借块条件,该借块条件为第一比例值等于零,和/或,系统空间预留的超级块的数量等于零,即当第一比例值等于零,和/或,系统空间预留的超级块的数量等于零时,确定用户数据空间中的擦除次数最大的超级块为第一超级块。
请参阅图4,图4是本申请实施例提供的一种系统空间和用户数据空间的结构示意图;
如图4所示,存储空间300包括系统空间310和用户数据空间320,系统空间310包括系统可视空间311和系统预留空间312,用户数据空间320包括用户可视空间321和用户预留空间322,其中,系统可视空间指的是在SSD系统初始化的时候,确定的系统存储元数据需要的Nand资源,其中,元数据包括但不限于L2P表、P2L数据、raid数据、坏块表、用户配置元数据,系统预留空间指的是超出系统可视空间的额外预留空间,主要用于主控的优化操作,比如把这部分额外的空间用作FTL映射表存储空间、垃圾回收所需的预留交换空间、闪存坏块的替代空间等,用户可视空间指的是在SSD系统初始化的时候,确定的用户数据需要的Nand资源,用户预留空间指的是超出用户可视空间的额外预留空间,可以理解的是,为了能够做垃圾回收以及磨损均衡等,需要按一定比例分配更多的Nand资源给用户数据空间和系统空间,以形成系统预留空间和用户预留空间。
请再参阅图5,图5是本申请实施例提供的一种计算第一比例值的流程示意图;
如图5所示,计算第一比例值的流程,包括:
步骤S501:获取系统空间、系统预留空间的大小;
步骤S502:根据系统空间、系统预留空间的大小,计算第一比例值。
具体的,第一比例值为系统预留空间的OP值,计算第一比例值的公式为:第一比例值=系统预留空间/(系统空间-系统预留空间)。
可以理解的是,当第一比例值等于零时,此时系统预留空间为零,说明系统预留空间不足。
请再参阅图6,图6是本申请实施例提供的一种确定第一超级块的流程示意图;
如图6所示,确定第一超级块的流程,包括:
步骤S601:系统空间满足借块条件,开始借块;
具体的,当第一比例值等于零,和/或,系统空间预留的超级块的数量等于零时,系统满足借块条件,开始向用户数据空间借块。
可以理解的是,随着数据的不断写入,系统空间的容量逐步被写满,当需要对盘内数据覆写时,根据盘内数据的管理逻辑,由于原先写满数据且关闭的超级块(closed sblk)还存在有效数据,所以不能对该超级块进行擦除覆写,只能将数据写入到新的空闲的超级块中,因此,需要盘内存在预留的超级块来保证盘片的正常运行,也即系统空间预留的超级块的数量需要大于零,而需要第一比例值大于零的原因是为了防止系统空间预留的超级块里的每一个物理块都是坏块的极端现象。
步骤S602:确定用户数据空间能够借出的超级块数量;
具体的,确定当前用户数据空间能够借出的超级块数量,将用户数据空间能够借出的超级块数量设置为n,并将最大擦除次数(maxEraseCnt)初始化为零,将当前扫描的超级块的擦除次数(tempEraseCnt)初始化为零,将当前已扫描的超级块数量(i)初始化为零,将最大擦除次数对应的超级块的序号(ret)初始化为零。
步骤S603:判断用户数据空间能够借出的超级块数量是否等于零;
具体的,判断用户数据空间能够借出的超级块数量是否等于零,即判断n是否等于零,若n不等于零,说明用户数据空间存在能够借出的超级块,则进入步骤S604;若n等于零,说明用户数据空间没有能够借出的超级块,则进入步骤S605。
步骤S604:判断当前已扫描的超级块数量是否小于用户数据空间能够借出的超级块数量;
具体的,判断当前已扫描的超级块数量是否小于用户数据空间能够借出的超级块数量,即判断i是否小于n,若i小于n,则说明用户数据空间能够借出的超级块数量未被全部扫描,则进入步骤S606;若i不小于n,则说明用户数据空间能够借出的超级块数量已经被全部扫描,则进入步骤S610。
步骤S605:借块失败;
具体的,当用户数据空间能够借出的超级块数量等于零时,说明当前用户数据空间中不存在能够借给系统空间的超级块,本次借块操作失败。
步骤S606:获取当前扫描的超级块的擦除次数;
具体的,Nand闪存以物理块(block)为擦除单元,当block的擦除次数(erasecount)超过一定的数值后,block的寿命就到了,不能再被使用,所以在固态硬盘中存在一张记录每一个block的擦除次数的表,称为擦除次数表(erasecount,ec),即ec表。在SSD运行期间,block不断地被擦除,block每被擦除一次,block的erasecount值会增加一次,ec表也会对应更新。在SSD中,为了提升效率和方便数据的管理,将一定数量的物理块作为一个整体进行擦除和写入,也就是超级块,通过擦除次数表表,获取当前扫描的超级块的擦除次数,并将tempEraseCnt确定为第i个超级块的擦除次数。
步骤S607:判断当前扫描的超级块的擦除次数是否大于最大擦除次数;
具体的,判断当前扫描的超级块的擦除次数是否大于最大擦除次数,即判断tempEraseCnt是否大于maxEraseCnt,若tempEraseCnt大于maxEraseCnt,说明当前最大擦除次数不是最大的,则进入步骤S608;若tempEraseCnt小于或等于maxEraseCnt,则进入步骤S609。
步骤S608:将当前扫描的超级块的擦除次数确定为最大擦除次数;
具体的,当前扫描的超级块的擦除次数大于最大擦除次数,则将当前扫描的超级块的擦除次数确定为最大擦除次数,即,将tempEraseCnt 确定为maxEraseCnt,最大擦除次数对应的超级块的序号(ret)确定为i。
步骤S609:将当前已扫描的超级块数量加1;
具体的,将当前已扫描的超级块数量(i)加1,继续扫描下一个超级块。
步骤S610:将擦除次数最大的超级块确定为第一超级块;
具体的,将擦除次数最大的超级块确定为第一超级块,即,将第ret个超级块确定为第一超级块,将第一超级块转移至系统空间,在用户数据空间借出该第一超级块之后,将会把用户空间中该第一超级块的状态置为坏块状态或者无效状态,则用户存储空间将无法对该第一超级块的物理空间进行访问,相当于用户数据不能再写入第一超级块。
在本申请实施例中,擦除次数多的超级块(max erase cnt sblk)稳定性较低,更容易发生错误,选取最大擦除次数的超级块转移至系统空间能够最大程度地保证用户数据的安全和稳定。
步骤S302:将第一超级块转移至系统空间;
具体的,将第一超级块从用户数据空间转移至系统空间,需要注意的是,从系统数据空间借到系统空间的超级块都处于释放状态,即超级块中不会存在有效的数据,将第一超级块转移之后,将用户空间中该第一超级块的状态置为坏块状态或者无效状态。
请再参阅图7,图7是本申请实施例提供的一种将用户数据空间的第一超级块转移至系统空间的示意图;
如图7所示,用户对用户数据空间进行写io操作,并将写入的数据存储至用户数据空间,而系统则是将l2p表/p2l/元数据存储至系统空间,当系统空间满足借块条件时,将用户数据空间的一部分资源(即上文提到的第一超级块)转移至系统空间。
在现有技术中,SSD系统从初始化开始就已划分好用户和系统所使用的空间,并没有在盘片运行过程中动态地从其他空间借取或者分配资源的优化,当SSD盘内的预留空间(OP)不足时,现有技术只是针对SSD盘内用户数据空间OP进行优化,其并没有涉及到系统空间OP的优化,也并没有实现用户数据空间和系统数据空间之间的资源交互,并且,由于现有技术中的预留空间(OP)在盘片上电时就已经固定空间大小,不能再改变,所以当系统空间的OP不足时,盘片容易进入只读状态,目前,现有技术提升系统空间OP的唯一方法就是在SSD初始化的时候为系统空间OP分配更多的Nand空间以及扩大整个SSD的Nand数量,但该方法并不涉及在SSD使用过程中系统空间OP的优化。
而本申请通过将用户数据空间中的超级块转移到系统空间,从而实现在SSD使用过程中动态提高系统空间的OP,因此,能够避免系统空间不足导致的闪存设备无法写入数据的问题,提高闪存设备的稳定性。
步骤S303:确定系统空间中存在坏块的超级块为第二超级块;
请再参阅图8,图8是图3中的步骤S303的细化流程示意图;
如图8所示,步骤S303:确定系统空间中存在坏块的超级块为第二超级块,包括:
步骤S3031:遍历系统空间中的每一超级块中的物理块,以获取每一物理块的使用状态;
具体的,每一个超级块包括多个物理块,每个物理块对应一个使用状态,随着盘片使用的时间变长,盘片Nand老化、稳定性下降,内部就会逐步出现坏块(bad block),遍历系统空间中的每一超级块中的物理块,以获取每一物理块的使用状态,其中,使用状态包括坏块状态和正常状态。
步骤S3032:当物理块的使用状态为坏块状态时,则确定该物理块为坏块,进而确定该物理块所属的超级块为第二超级块;
具体的,当物理块的使用状态为坏块状态时,则确定该物理块为坏块,说明该物理块所属的超级块中存在坏块,则将确定该物理块所属的超级块为第二超级块,即第二超级块为系统空间中存在坏块的超级块,可以理解的是,该第二超级块是需要被替换的超级块。
步骤S304:将系统空间中的第二超级块替换为用户数据空间中的第一超级块;
在本申请实施例中,存储空间包括多个裸片(die),每一个裸片包括多个分组(Plane),每一个分组包括多个物理块(Phy block,phy blk),其中,多个物理块构成一个超级块(Super Block,sblk),其中,Die为Flash内部的单元,Plane为Flash组织单元,Phyblock为物理块,Super Block为超级块。
请再参阅图9,图9是图3中的步骤S304的细化流程示意图;
如图9所示,步骤S304:将系统空间中的第二超级块替换为用户数据空间中的第一超级块,包括:
步骤S3041:获取坏块所在的裸片;
具体的,坏块为第二超级块中使用状态为坏块状态的物理块,每一个裸片包括多个物理块,获取坏块所在的裸片。
步骤S3042:将第一超级块中与坏块位于同一裸片的其余物理块确定为第一物理块;
具体的,根据坏块所在的裸片位置,将第一超级块中与坏块位于同一裸片的其余物理块确定为第一物理块。
步骤S3043:判断第一物理块是否为好块;
具体的,判断第一物理块是否为好块,若第一物理块是好块,则进入步骤S3044;若第一物理块不是好块,则进入步骤S3045。
步骤S3044:将坏块替换为第一物理块;
请再参阅图10,图10是图9中的步骤S3044的细化流程示意图;
如图10所示,步骤S3044:将坏块替换为第一物理块,包括:
步骤S3441:获取坏块的逻辑地址和物理块地址以及第一物理块的物理块地址;
具体的,若第一物理块是好块,则获取坏块的逻辑地址和物理块地址以及第一物理块的物理块地址。
步骤S3442:将坏块的逻辑地址和物理块地址记录至映射表中;
具体的,存储空间包括映射表,在闪存设备,例如:在固态硬盘中,逻辑地址到物理地址的映射表(L2P表)用于将逻辑地址(LBA)映射到物理地址,将坏块的逻辑地址和物理块地址记录至映射表中。
步骤S3443:更新映射表,将映射表中坏块的物理块地址替换为第一物理块中的物理块地址;
具体的,当闪存设备对Nand进行读写操作的时候,需要获取相对应的L2P表项,即逻辑地址和物理地址之间的映射关系,更新映射表,将映射表中坏块的物理块地址替换为第一物理块中的物理块地址之后,当闪存设备对原本坏块的位置进行读写操作的时候,就会通过更新后的映射表找到好块的位置进行读写。
步骤S3045:不进行替换操作;
具体的,若第一物理块不是好块,则不进行替换操作。
请再参阅图11,图11是本申请实施例提供的一种将坏块替换为第一物理块的示意图;
如图11所示,上半部分是系统空间原有的超级块,下半部分是从用户数据空间中借到的超级块资源。假设sys sblk1、sys sblk2、sys sblk3为系统空间中的三个超级块,sblk borrow为系统空间向用户数据空间借出的第一超级块,其中,sblk borrow中的物理块均为好块,sys sblk1中存在坏块block1,sys sblk3中存在坏块block0和block2,由于sys sblk1和sys sblk3中存在坏块,所以确定sys sblk1和sys sblk3为第二超级块,syssblk1中的坏块block1以及sys sblk3中的block0和block2需要被替换。根据sys sblk1中的坏块block1以及sys sblk3中的block0和block2三个物理块所在的裸片位置,找到第一超级块中处于同一裸片的其余物理块,例如,sys sblk3中的block0与第一超级块中的block0处于同一裸片位置,sys sblk1中的block1与第一超级块中的block1处于同一裸片位置,sys sblk3中的block2与第一超级块中的block2处于同一裸片位置,将第二超级块中的坏块替换为第一超级块中同一裸片位置的好块。
在本申请实施例中,通过更新映射关系的方法将系统的坏块重新映射(remap)到从用户数据空间借取到的好块中进行使用,本申请能够动态且快速地提升系统空间OP,将盘片恢复到正常状态。
请再参阅图12,图12是本申请实施例提供的一种判断将第二超级块替换为第一超级块之后系统空间是否仍满足借块条件的流程示意图;
如图12所示,判断将第二超级块替换为第一超级块之后系统空间是否仍满足借块条件,包括:
步骤S1201:获取第一比例值和系统空间预留的超级块的数量;
具体的,将第二超级块替换为第一超级块之后,根据计算第一比例值的公式获取第一比例值,以及获取系统空间预留的超级块的数量。
步骤S1202:判断第一比例值是否等于零,和/或,系统空间预留的超级块的数量是否仍等于零;
具体的,判断第一比例值是否等于零,和/或,系统空间预留的超级块的数量是否仍等于零,即判断将第二超级块替换为第一超级块之后,系统空间是否仍然满足借块条件,若系统空间仍然满足借块条件,说明之前借出的超级块数量不够,则进入步骤S1203;若系统空间不满足借块条件,说明之前借出的超级块数量已经足够,可供系统空间正常运行,则进入步骤S1204。
可以理解的是,由于第一比例值=系统预留空间/(系统空间-系统预留空间),当坏块不断增加时,系统空间则不断减少,导致系统预留空间减少,当系统预留空间减少到零时,则闪存设备的系统空间无法再写入数据,此时系统空间只能进入只读状态。
步骤S1203:继续借块,直至系统空间不满足借块条件;
具体的,若第一比例值等于零,和/或,系统空间预留的超级块的数量仍等于零,则继续借块,直至系统空间不满足借块条件,即直至第一比例值大于零且系统空间预留的超级块的数量大于零。
步骤S1204:停止借块;
具体的,若第一比例值大于零和系统空间预留的超级块的数量大于零,则停止借块。
请再参阅图13,图13是本申请实施例提供的一种用户数据空间和系统空间的交互时序图;
如图13所示,用户数据空间和系统空间的交互过程,包括:
步骤S1301:在用户数据空间选择擦除次数最大的超级块;
具体的,获取用户空间中当前可借出的超级块,在当前可借出的超级块中选择擦除次数最大的超级块。
步骤S1302:将该超级块的使用状态设置为坏块状态或无效状态;
具体的,在将用户数据空间中擦除次数最大的超级块借出之后,将该超级块的使用状态设置为坏块状态或无效状态。
步骤S1303:将该超级块转移到系统空间中;
具体的,将第一超级块从用户数据空间转移至系统空间,需要注意的是,从系统数据空间借到系统空间的超级块都处于释放状态,即超级块中不会存在有效的数据。
在本申请实施例中,在将第一超级块从用户数据空间转移至系统空间之后,将用户数据空间中的第一超级块的使用状态设置为无效状态,使得用户数据空间无法访问到该第一超级块,即,用户数据不能再写入到该第一超级块。
步骤S1304:遍历系统空间的超级块,并将坏块进行替换;
具体的,遍历系统空间中的每一超级块中的物理块,以获取每一物理块的使用状态,将使用状态为坏块状态的物理块进行替换。
步骤S1305:本次坏块替换任务结束。
请再参阅图14,图14是本申请实施例提供的一种借块任务和坏块替换任务的交互时序图;
如图14所示,借块任务和坏块替换任务的交互过程,包括:
步骤S1401:借块成功;
具体的,将用户数据空间中擦除次数最大的超级块借出,即表示借块成功。
步骤S1402:将系统空间中的坏块送去替换;
具体的,将系统空间中的坏块送去替换,此时借块任务完成,继续进行坏块替换任务。
步骤S1403:替换系统空间中的坏块;
具体的,将系统空间中的坏块替换为用户数据空间中的好块。
步骤S1404:坏块替换任务完成。
具体的,将映射表中坏块的物理块地址替换为第一物理块中的物理块地址即表示坏块替换任务完成。
步骤S1405:唤醒借块任务;
具体的,当坏块替换任务完成之后,则会唤醒借块任务,以判断系统空间是否仍然满足借块条件。
步骤S1406:当系统空间仍然满足借块条件时,启动借块任务;
具体的,当系统空间仍然满足借块条件时,说明此时系统空间的容量依旧不够,则启动新的借块任务。
步骤S1407:借块任务结束;
具体的,当系统空间不满足借块条件时,则表示借块任务结束。
请再参阅图15,图15是本申请实施例提供的一种判断用户数据空间中当前可转移的超级块的数量是否等于零的流程示意图;
如图15所示,判断用户数据空间中当前可转移的超级块的数量是否等于零的流程,包括:
步骤S1501:获取用户数据空间中当前可转移的超级块的数量;
具体的,获取用户数据空间中当前可转移的超级块的数量,其中,当前可转移的超级块处于空闲状态或释放状态,即,当前可转移的超级块均为空闲的或处于释放状态的超级块。其中,处于释放状态的超级块指的是不存在有效数据的超级块,因此,在将用户数据空间中的超级块转移到系统空间时,不需要擦除处于释放状态的超级块中的数据。
步骤S1502:判断用户数据空间中当前可转移的超级块的数量是否等于零;
具体的,判断用户数据空间中当前可转移的超级块的数量是否等于零,若用户数据空间中当前可转移的超级块的数量不等于零,则说明此时用户数据空间存在可以借出的超级块,则进入步骤S1503;若用户数据空间中当前可转移的超级块的数量等于零,则说明此时用户数据空间没有可以借出的超级块,则进入步骤S1504。
步骤S1503:将超级块转移至系统空间;
具体的,若用户数据空间中当前可转移的超级块的数量不等于零,则将当前可转移的超级块中擦除次数最大的超级块转移至系统空间。
步骤S1504:不将超级块转移至系统空间,并将系统空间的读写状态设置为只读状态;
具体的,若用户数据空间中当前可转移的超级块的数量等于零,则说明借块失败,借块失败后由于L2P表、P2L表或其他元数据无法存入Nand,可能会导致GC失败(分配失败),此时防止用户数据异常或者出现系统宕机的措施是向主机(host)发出告警并且让闪存设备进入只读的状态,即不再允许用户写入数据,但是可以读取数据,具体的,将系统空间的读写状态设置为只读状态,使得系统空间不被允许写入数据,但可以读取数据。
在本申请实施例中,若系统空间进入只读状态,则当系统空间从用户数据空间借块成功且借块成功后系统空间不满足借块条件时,系统空间退出只读状态,使得整个盘片恢复到安全可正常使用的状态。
请再参阅图16,图16是本申请实施例提供的一种启动系统空间进行借块检查的流程示意图;
如图16所示,启动系统空间进行借块检查的流程,包括:
步骤S1601:若系统空间产生新的坏块,则启动系统空间进行借块检查;
步骤S1602:判断系统空间是否满足借块条件;具体的,若系统空间产生新的坏块,并对坏块进行替换之后,会进行借块检查,系统空间借块检查指的是查看当前的op以及超级块数量是否满足闪存设备正常运行的最低标准,实质上是需要系统存储空间的至少预留的op资源(least op)和至少预留的超级块数量(least sblk cnt)都要大于0,否则,便会触发系统空间的借块功能。
步骤S1603:启动借块任务;
具体的,若系统空间满足借块条件,则启动借块任务,该借块任务用于从用户数据空间中转移超级块到系统空间中,其中,借块条件包括第一比例值等于零,和/或,系统空间预留的超级块的数量等于零。
步骤S1604:不启动借块任务。
具体的,若系统空间不满足借块条件,则不启动借块任务。
需要说明的是,除了在系统空间产生新的坏块,并对坏块进行替换之后,进行借块检查,借块检查的启用场景还包括在闪存设备进行上电计算op值的时候判断系统空间的资源是否足够。
在本申请实施例中,通过后台检查系统空间OP,即借块检查,监控盘片是否处于异常情况,并及时触发向用户数据空间借取资源的操作,本申请能够防止闪存设备进入宕机状态。
请再参阅图17,图17是本申请实施例提供的一种系统空间借块的整体流程示意图;
如图17所示,系统空间借块的整体流程,包括:
步骤S1701:系统借块检查;
步骤S1702:判断系统空间是否满足借块条件;
具体的,若系统空间满足借块条件,则进入步骤S1703;若系统空间不满足借块条件,则进入步骤S1706。
步骤S1703:系统空间进行借块。
步骤S1704:判断借块是否成功;
具体的,若借块成功,则进入步骤S1705;若借块不成功,则进入步骤S1706。
步骤S1705:进行坏块替换。
步骤S1706:借块任务结束。
其中,步骤S1701至步骤S1706已在上文进行详细描述,为避免重复,此处不再赘述。
可以理解的是,当坏块替换操作循环执行时,能够逐渐减少闪存设备的系统空间的坏块数量,以使闪存设备能够恢复正常工作。
在本申请实施例中,通过提供一种闪存设备的坏块替换方法,闪存设备包括存储空间,存储空间包括系统空间和用户数据空间,系统空间和用户数据空间均包括多个超级块,该闪存设备的坏块替换方法,包括:若系统空间满足借块条件,则确定第一超级块,其中,第一超级块为用户数据空间中的擦除次数最大的超级块;将第一超级块转移至系统空间;确定第二超级块,其中,第二超级块为系统空间中存在坏块的超级块;将第二超级块替换为第一超级块,本申请能够通过将用户数据空间的超级块转移至系统空间,并将系统空间中的坏块替换为用户数据空间中的超级块,避免闪存设备由于系统预留空间不足而出现宕机的问题,提高闪存设备的运行的稳定性。
本申请实施例还提供了一种非易失性计算机可读存储介质,例如包括程序代码的存储器,上述程序代码可由处理器执行以完成上述实施例中的闪存设备的坏块替换方法。例如,该非易失性计算机可读存储介质可以是只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、只读光盘(Compact Disc Read-Only Memory,CDROM)、磁带、软盘和光数据存储设备等。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括一条或多条程序代码,该程序代码存储在非易失性计算机可读存储介质中。闪存设备的处理器从非易失性计算机可读存储介质读取该程序代码,处理器执行该程序代码,以完成上述实施例中提供的闪存设备的坏块替换方法的方法步骤。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来程序代码相关的硬件完成,该程序可以存储于一种非易失性计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,程序可存储于非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上述的本申请的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。