L2P映射表重建方法及固态硬盘转让专利

申请号 : CN202111570320.7

文献号 : CN114415942B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 褚世凯骆小敏盛栋梁王琛銮蔡全

申请人 : 联芸科技(杭州)股份有限公司

摘要 :

公开了一种L2P映射表重建方法及固态硬盘,每个数据块中的多个数据及连续的逻辑地址和计数值按照连续的编程顺序存储在物理块的多个4K单元格中,L2P映射表重建方法包括:在异常断电再上电时,读取物理块的最后一个4K单元格,得到其中存储的第一末位逻辑地址和第一末位计数值;利用数组表计算首个数据的第一首位物理地址;根据首个数据的第一首位逻辑地址和第一首位物理地址的对应关系建立L2P映射表。该方法在存储数据时还存储了计数值,从而当读取最后一个4K单元格时就能获取该物理块存储的最后一个数据的计数值和逻辑地址,再通过数组表就能获取首位数据的地址映射关系,从而恢复L2P映射表,减少读取次数,节省上电建表的时间,降低功耗。

权利要求 :

1.一种L2P映射表重建方法,其中,每个数据块中包含逻辑地址连续的多个数据,所述多个数据按照连续的编程顺序存储在当前物理块的多个4K单元格中,各所述4K单元格还存有每个所述数据对应的逻辑地址和计数值,所述方法包括:在异常断电再上电的情况下,读取当前物理块中的最后一个4K单元格,得到所述最后一个4K单元格中存储的第一末位逻辑地址和第一末位计数值;

根据所述第一末位计数值和所述最后一个4K单元格的物理地址,利用预先存储的数组表计算得到第一首位物理地址,其中,所述第一首位物理地址是存储在所述当前物理块中最后一个数据块的首个数据所在4K单元格的物理地址,所述数组表表征数据的编程顺序和物理地址之间的关联关系;

根据所述首个数据的第一首位逻辑地址和所述第一首位物理地址之间的对应关系建立所述最后一个数据块的L2P映射表。

2.根据权利要求1所述的L2P映射表重建方法,其中,每个所述数据块通过下述方式存储:接收写数据,所述写数据包括多个数据块,每个所述数据块中的多个数据的逻辑地址连续;

将每个数据块中逻辑地址连续的多个数据按照连续的编程顺序写入物理块的多个4K单元格中,同时存储每个所述数据对应的逻辑地址和计数值,所述计数值按照所述编程顺序逐个累加。

3.根据权利要求2所述的L2P映射表重建方法,其中,根据所述首个数据的第一首位逻辑地址和所述第一首位物理地址之间的对应关系建立所述最后一个数据块的L2P映射表的步骤之后还包括:倒序读取所述当前物理块,依次获取其余每个所述数据块中最后一个4K单元格存储的第二末位计数值和第二末位逻辑地址,再利用所述数组表建立所述当前物理块中其余每个所述数据块的L2P映射表。

4.根据权利要求3所述的L2P映射表重建方法,其中,所述当前物理块是依序读取的多个物理块中的一个;

读取每个所述物理块时,均从其中的最后一个4K单元格倒序读取,以建立每个所述物理块的L2P映射表。

5.根据权利要求3所述的L2P映射表重建方法,其中,倒序读取所述当前物理块,依次获取其余每个所述数据块中最后一个4K单元格存储的最大第二末位计数值和第二末位逻辑地址,再根据利用所述数组表建立所述当前物理块中其余每个所述数据块的L2P映射表的步骤包括:倒序依次读取所述当前物理块中其余每个所述数据块中最后一个4K单元格,得到其中存储的各个第二末位逻辑地址和各个第二末位计数值;

分别根据每个所述第二末位计数值和与之对应的4K单元格的物理地址,利用所述数组表计算得到其余每个所述数据块中首个数据所在4K单元格的第二首位物理地址;

根据每个所述首个数据的第二首位逻辑地址和第二首位物理地址之间的对应关系建立当前物理块中其余每个所述数据块的L2P映射表。

6.根据权利要求3所述的L2P映射表重建方法,其中,所述数组表用于查询每个所述数据块中任一数据对应的物理地址。

7.根据权利要求6所述的L2P映射表重建方法,其中,所述数组表包括第一数组和第二数组,所述第一数组具有多个第一元素,各个所述第一元素的编号表征所述数据的物理地址,各个所述第一元素存储的值表征所述数据的所述编程顺序;

将所述第一数组的所述编号和所述存储的值置换后得到的数组为所述第二数组,所述第二数组中各个第二元素的编号表征所述数据的所述编程顺序,各个所述第二元素存储的值表征所述数据的所述物理地址。

8.根据权利要求7所述的L2P映射表重建方法,其中,根据所述第一末位计数值和所述最后一个4K单元格的物理地址,利用预先存储的数组表计算得到第一首位物理地址的步骤包括:从所述第一数组中根据所述最后一个4K单元格的物理地址获取所述最后一个4K单元格的末位编程顺序;

根据所述最后一个4K单元格的编程顺序和所述第一末位计数值计算,获得所述当前物理块中最后一个数据块的首个数据的首位编程顺序;

从所述第二数组中根据所述首个数据的所述首位编程顺序获取其对应的第一首位物理地址。

9.根据权利要求1所述的L2P映射表重建方法,其中,所述首个数据为在所述数据块中编程顺序为首位的起始数据,所述起始数据的计数值为0,所述首个数据的第一首位逻辑地址由所述第一末位逻辑地址与所述第一末位计数值进行减法计算得到。

10.根据权利要求1所述的L2P映射表重建方法,其中,每个所述数据块中的所述多个数据的编程顺序连续且逻辑地址连续,物理地址不完全连续。

11.一种固态硬盘,用于实现权利要求1‑10中任一项所述的L2P映射表重建方法,所述固态硬盘包括:控制系统,与主机连接,接收主机的写数据,所述写数据包括多个数据块,每个数据块包括多个数据;

存储器,连接所述控制系统,存储所述写数据,

其中,所述存储器包括多个物理块,每个所述物理块包括多个物理页,每个所述物理页包括多个4K单元格,每个4K单元格内包括数据存储区和计数值存储区,所述数据存储区用于存储所述数据,所述计数值存储区用于存储所述计数值和所述逻辑地址。

说明书 :

L2P映射表重建方法及固态硬盘

技术领域

[0001] 本发明涉及存储器技术领域,更具体地,涉及一种L2P映射表重建方法及固态硬盘。

背景技术

[0002] 固态硬盘(SSD,Solid State Drive)是由控制器和存储芯片组成的非挥发性存储装置,因其具有体积小、质量轻、功耗低、读写速度快等优点,广泛应用于工控、视频监控、网络终端、导航等诸多领域。固态硬盘的存储芯片数据读写依赖于物理特性,文件系统不能直接访问或操作存储芯片,需采用缓存芯片例如SRAM或DRAM存储L2P映射表,将文件系统提供的逻辑地址转换成存储芯片的物理地址。每个L2P映射表通常包括:基准逻辑区块地址(base Logical Block Address,base LBA)和基准存储芯片的物理地址(base Flash Access Agent,base FAA),文件系统提供的逻辑区块地址对应着一个相应的逻辑分配单元的地址LAA(logic allocate unit address)。
[0003] 固态硬盘在读写过程中异常掉电时,导致FTL(Flash Translation Layer,闪存转换层)未完全将L2P映射表存储下来。因此在上电时需要恢复所有L2P映射关系。通常,在运行时写数据时会将LAA同时存在闪存中,这样,当异常掉电再上电时,对每个物理块(block),FTL按照编程顺序依次读取每个物理页(page)和每个偏移量(frag)指向的4K单元格。每读取一个4K单元格,同时也获取了其中存储的LAA,就恢复了该单元格内的LAA与FAA的映射关系。当把所有的LAA与FAA的映射关系全部更新后,就能恢复掉电时刻的L2P映射表。但是这种方法需要对每一个物理块均依次读取其中的每个数据对应的4K单元格,会消耗大量的读闪存时间,且随着运行时写入的物理块变多,SSD上电建表消耗的时间就呈现线性增长趋势。

发明内容

[0004] 鉴于上述问题,本发明的目的在于提供一种L2P映射表重建方法及固态硬盘,减少L2P映射表的上电恢复时间,以解决现有技术中的问题。
[0005] 根据本发明的第一方面,提供了一种L2P映射表重建方法,其中,每个数据块中包含逻辑地址连续的多个数据,所述多个数据按照连续的编程顺序存储在当前物理块的多个4K单元格中,各所述4K单元格还存有每个所述数据对应的逻辑地址和计数值,所述方法包括:
[0006] 在异常断电再上电的情况下,读取当前物理块中的最后一个4K单元格,得到所述最后一个4K单元格中存储的第一末位逻辑地址和第一末位计数值;
[0007] 根据所述第一末位计数值和所述最后一个4K单元格的物理地址,利用预先存储的数组表计算得到第一首位物理地址,其中,所述第一首位物理地址是存储在所述当前物理块中最后一个数据块的首个数据所在4K单元格的物理地址,所述数组表表征数据的编程顺序和物理地址之间的关联关系;
[0008] 根据所述首个数据的第一首位逻辑地址和所述第一首位物理地址之间的对应关系建立所述最后一个数据块的L2P映射表。
[0009] 可选地,每个所述数据块通过下述方式存储:
[0010] 接收写数据,所述写数据包括多个数据块,每个所述数据块中的多个数据的逻辑地址连续;
[0011] 将每个数据块中逻辑地址连续的多个数据按照连续的编程顺序写入物理块的多个4K单元格中,同时存储每个所述数据对应的逻辑地址和计数值,所述计数值按照所述编程顺序逐个累加。
[0012] 可选地,根据所述首个数据的第一首位逻辑地址和所述第一首位物理地址之间的对应关系建立所述最后一个数据块的L2P映射表的步骤之后还包括:
[0013] 倒序读取所述当前物理块,依次获取其余每个所述数据块中最后一个4K单元格存储的第二末位计数值和第二末位逻辑地址,再利用所述数组表建立所述当前物理块中其余每个所述数据块的L2P映射表。
[0014] 可选地,所述当前物理块是依序读取的多个物理块中的一个;
[0015] 读取每个所述物理块时,均从其中的最后一个4K单元格倒序读取,以建立每个所述物理块的L2P映射表。
[0016] 可选地,倒序读取所述当前物理块,依次获取其余每个所述数据块中最后一个4K单元格存储的最大第二末位计数值和第二末位逻辑地址,再根据利用所述数组表建立所述当前物理块中其余每个所述数据块的L2P映射表的步骤包括:
[0017] 倒序依次读取所述当前物理块中其余每个所述数据块中最后一个4K 单元格,得到其中存储的各个第二末位逻辑地址和各个第二末位计数值;
[0018] 分别根据每个所述第二末位计数值和与之对应的4K单元格的物理地址,利用所述数组表计算得到其余每个所述数据块中首个数据所在4K单元格的第二首位物理地址;
[0019] 根据每个所述首个数据的第二首位逻辑地址和第二首位物理地址之间的对应关系建立当前物理块中其余每个所述数据块的L2P映射表。
[0020] 可选地,所述数组表用于查询每个所述数据块中任一数据对应的物理地址。
[0021] 可选地,所述数组表包括第一数组和第二数组,所述第一数组具有多个第一元素,各个所述第一元素的编号表征所述数据的物理地址,各个所述第一元素存储的值表征所述数据的所述编程顺序;
[0022] 将所述第一数组的所述编号和所述存储的值置换后得到的数组为所述第二数组,所述第二数组中各个第二元素的编号表征所述数据的所述编程顺序,各个所述第二元素存储的值表征所述数据的所述物理地址。
[0023] 可选地,根据所述第一末位计数值和所述最后一个4K单元格的物理地址,利用预先存储的数组表计算得到第一首位物理地址的步骤包括:
[0024] 从所述第一数组中根据所述最后一个4K单元格的物理地址获取所述最后一个4K单元格的末位编程顺序;
[0025] 根据所述最后一个4K单元格的编程顺序和所述第一末位计数值计算,获得所述当前物理块中最后一个数据块的首个数据的首位编程顺序;
[0026] 从所述第二数组中根据所述首个数据的所述首位编程顺序获取其对应的第一首位物理地址。
[0027] 可选地,所述首个数据为在所述数据块中编程顺序为首位的起始数据,所述起始数据的计数值为0,所述首个数据的第一首位逻辑地址由所述第一末位逻辑地址与所述第一末位计数值进行减法计算得到。
[0028] 可选地,每个所述数据块中的所述多个数据的编程顺序连续且逻辑地址连续,物理地址不完全连续。
[0029] 根据本发明的第二方面,提供了一种固态硬盘,用于实现上述所述的 L2P映射表重建方法,所述固态硬盘包括:
[0030] 控制系统,与主机连接,接收主机的写数据,所述写数据包括多个数据块,每个数据块包括多个数据;
[0031] 存储器,连接所述控制系统,存储所述写数据,
[0032] 其中,所述存储器包括多个物理块,每个所述物理块包括多个物理页,每个所述物理页包括多个4K单元格,每个4K单元格内包括数据存储区和计数值存储区,所述数据存储区用于存储所述数据,所述计数值存储区用于存储所述计数值和所述逻辑地址。
[0033] 可选地,所述控制系统包括:
[0034] 处理器,用于实现闪存转换层和建立数组表;
[0035] 缓存芯片,连接所述处理器,存储所述L2P映射表;以及;
[0036] 存储器控制器,连接所述处理器,控制所述写数据的传输和存储。
[0037] 本发明提供的L2P映射表重建方法及固态硬盘在存储写数据时,按照连续的编程顺序将每个数据块的多个数据都存储在当前物理块的多个4K 单元格中,同时还存储了每个数据对应的逻辑地址和连续编程的计数值,计数值表征了编程连续的数据的数量,从而在异常断电再上电后通过读取当前物理块的最后一个4K单元格,就可以获取最后一个存储的数据块在该物理块中的末位数据对应的第一末位计数值及其第一末位逻辑地址,再根据预先存储的数组表通过数据压缩算法可以计算出这个数据块中首个数据的第一首位物理地址,最后根据首个数据的第一首位物理地址和第一首位逻辑地址来建立L2P映射表。该L2P映射表重建方法在存储数据时同时存储了编程连续的计数值,并建立了数组表,这样就建立了多个数据之间的关联关系,从而只读取每个数据块中的最后一个数据就可以获取到数据块中末位数据对应的计数值和逻辑地址,然后就可以通过数组表获取数据块中首位数据的地址映射关系,快速恢复L2P映射表,减少在闪存中读取数据的次数,仅需读取一次数据就可以建立一个数据块对应的L2P映射表,不仅节省了上电建表的时间,还同时降低了上电功耗,提高了系统的数据管理效率和数据操作性能。
[0038] 进一步地,写数据包括多个数据块,都依次存储在物理块的多个4K单元格内,通过倒序读取物理块,可以依次获取每个数据块的最后一个数据,从而获取其中存储的计数值,得到每个数据块内计数值最大的数据(末位数据)对应的逻辑地址和计数值,再通过预先存储的数组表就可以获取对应数据块中首位数据(计数值最小的数据)对应的物理地址和逻辑地址的关系,从而可以为每一个数据块都恢复L2P映射表,那么,存在几个数据块就仅需要读取几次数据,极大地减少数据读取的次数,减少对4K单元格的读取时间和读取难度,能在上电后快速建立L2P映射表,节约功耗和成本。
[0039] 进一步地,通过提前建立数组表,数组表包括第一数组和第二数组,第一数组的编号表征数据的物理地址,存储的值表征数据的编程顺序;第二数组的编号表征数据的编程顺序,存储的值表征数据的物理地址,从而可以仅通过获取一个数据的物理地址就可以查询到数组表中任意一个数据对应的编程顺序和物理地址,无需每次读取每一个4K单元格。

附图说明

[0040] 通过以下参照附图对本发明实施例的描述,本发明的上述以及其他目的、特征和优点将更为清楚,在附图中:
[0041] 图1示出了一种NAND写入数据的编程顺序的示意图;
[0042] 图2示出了根据本发明第一实施例的L2P映射表重建方法的流程图;
[0043] 图3a和3b分别示出了根据本发明实施例的一个字线(word line)内数据位置与编程顺序间的关系的示意图;
[0044] 图4示出了图2中步骤S102的详细流程图;
[0045] 图5示出了根据本发明第二实施例的L2P映射表重建方法的流程图;
[0046] 图6示出了图5中步骤S204的详细流程图;
[0047] 图7示出了根据本发明第二实施例的L2P映射表重建方法建立的映射表的简易示意图;
[0048] 图8示出了根据本发明实施例的固态硬盘的示意性框图。

具体实施方式

[0049] 以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
[0050] 附图中的流程图、框图图示了本发明实施例的系统、方法、装置的可能的体系框架、功能和操作,流程图和框图上的方框可以代表一个模块、程序段或仅仅是一段代码,所述模块、程序段和代码都是用来实现规定逻辑功能的可执行指令。也应当注意,所述实现规定逻辑功能的可执行指令可以重新组合,从而生成新的模块和程序段。因此附图的方框以及方框顺序只是用来更好的图示实施例的过程和步骤,而不应以此作为对发明本身的限制。
[0051] 图1示出了一种NAND写入数据的编程顺序的示意图。
[0052] 在图1所示,以NAND存储器为例,NAND包括多个物理块(block),每个物理块又包括多个物理页(page),图1中给出了多个物理页,且示例性的示出了将32个4KB数据按照编程顺序写入两个相邻的字线的图示,每个字线WL包括两个Page编程单元,每个Page编程单元包括具有不同逻辑单元号(LUN/DIE)的两个物理页10,每个物理页10包括四个4K(4KB大小)单元格,每个4K单元格内的数字表征编程顺序,编程顺序表征写入物理地址的顺序,因此,每个物理块中包括多个4K单元格。在该物理块中,示出了4个编程单元((Page x)至(Page x+3)),所有的page编程单元采用相同的编程顺序。
[0053] 在图1的示例中,这些编程单元可以存储主机发送的一段连续数据,该数据具有32个4KB数据。page x上编程顺序为0x3的4K单元格与page x上编程顺序为0x8的4K单元格属于物理地址连续,但是编程顺序不连续; page x上编程顺序为0x3的4K单元格与page x+1上编程顺序为0x4的4K 单元格属于编程顺序连续,但是物理地址不连续;page x+1上编程顺序为 0xf的4K单元格与page x+2上编程顺序为0x0的4K单元格属于编程顺序连续,且物理地址连续。物理地址包括block编号、逻辑单元号(Logical Unit Number,可简称为LUN)、物理页地址(Page)和页偏移(Frag),每个物理页包括多个4K单元格。
[0054] 上述一段数据例如是存储在固态硬盘的NAND存储器中,当数据在存储好之后,建立其对应的L2P映射表,L2P映射表在达到一定的刷写阈值时才存入NAND,但是若写数据过程中固态硬盘出现了异常断电,那么L2P映射表来不及存储在存储器中,重新上电后需要重建L2P映射表。此时需要按照编程顺序挨个读取每个4K单元格内的数据,获取相应的物理地址和逻辑地址,从而恢复L2P映射表,这种传统的恢复建表的方法过程繁琐,读取耗时。
[0055] 本实施例对L2P映射表重建方法进行改进,在4K单元格内开辟两个存储区,数据存储区20和计数值存储区30,数据存储区20存储数据,计数值存储区30存储逻辑地址LAA和连续编程的计数值seq_cnt,该计数值存储区30例如称为meta。计数值表示同一数据块中编程顺序连续且逻辑地址连续的数据的个数。根据图1的meta中存储的LAA值,可知本次写入了 3个数据块,分别为:LAAx到LAA(x+20);LAAy到LAA(y+8);LAAz到 LAA(z+1)。由于编程顺序连续且LAA连续,所以每个数据块中,各个数据的LAA对应的计数值seq_cnt也对应增加。即,计数值按照编程顺序逐个累加。具体地,对于LAA(x+20)这个4K单元,当看到其计数值seq_cnt 为20时,可以断定按照编程顺序倒推20个4KB单元,这一片4KB单元是 LAA连续且编程顺序连续的。所以可知有一片编程顺序连续的数据,其LAA 起始值为(x+20)‑20,结束值为x+20,同时可以通过读取操作获得LAA(x+20) 对应的FAA值。从而可以在一个数据块中获取计数值最大的数据对应的逻辑地址和物理地址及其计数值。
[0056] 本发明中,在固态硬盘异常断电并重新上电后,倒序读取物理块内的4K单元格,即先读取当前物理块的最后一个4K单元格,能获取到最后一个存储的数据块在该物理块中的最后一个存储数据对应的第一末位计数值和第一末位逻辑地址,再通过预先存储的数组表可以获取到该数据块中首个数据对应的第一首位物理地址和第一首位逻辑地址,建立该数据块的L2P 映射表;然后,再倒序读取,可以通过最后一个存储的数据块的最小计数值(首个数据)对应的物理地址读取到前一个数据块的最后一个存储数据,获取到前一数据块中计数值最大的数据对应的计数值和逻辑地址,从而得到前一数据块的首位数据对应的逻辑地址和物理地址的关系,建立前一数据块的L2P映射表;直至完成所有数据块的首位数据的获取。
[0057] 对应到图1中,即首先读取LAA(z+1)这个4K单元格内的数据的计数值和逻辑地址,然后可以通过数组表计算出LAAz的逻辑地址和物理地址,建立LAAz对应的L2P映射表;然后读取与之相邻的前一个4K单元格,即 LAA(y+8)对应的单元格内的数据的逻辑地址以及计数值,可以知道该数据块的连续数据的个数,之后通过数组表获取到相应数据块的首位数据,即LAAy的逻辑地址和物理地址,建立LAAy的L2P映射表;最后读取与LAAy 相邻的LAA(x+20)的4K单元格,建立LAAx的L2P映射表。
[0058] 同时,本实施例采用了数据压缩算法,在存储数据前建立了数组表,数组表表征各个数据的物理地址与编程顺序之间的关系。由于LAAx对应的物理地址是FAAx,FAAx与其他数据的编程顺序是连续的,当读取到LAA (x+20)对应的物理地址时,可以根据数组表获取其对应的编程顺序,那么,与之编程顺序连续的其他数据的编程顺序也可以得知,从而获取到相应的物理地址,这样就可以建立每个数据对应的物理地址和逻辑地址之间的关系。即通过数据压缩算法可以算出LAAx到LAA(x+20)范围内所有LAA 对应的FAA值。
[0059] 所以本实施例针对单个物理块,可以仅读取了1个4K单元格,就获取了一串编程顺序连续的数据的L2P映射关系,通过这种方法,可以跳过很多4K单元格的读取,整个物理块的L2P映射关系却能完整的建出来,大大减少了读4K单元格的数量,因此能够极大地减小上电过程中的建表时间,减小功耗。而且由于数据压缩算法的适用性广,适用于多种数据块的数据存储,那么本实施例的L2P映射表重建方法适用性也较广。
[0060] 下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。
[0061] 图2示出了根据本发明第一实施例的L2P映射表重建方法的流程图;
[0062] 图3a和3b分别示出了根据本发明实施例的一个字线(word line)内数据位置与编程顺序间的关系的示意图。
[0063] 本发明实施例的L2P映射表重建方法是在固态硬盘异常断电再重新上电的情况下执行的,因此在执行L2P映射表重建方法之前,固态硬盘接收到的对应的写数据已经存储在存储器的物理块中。具体地,结合图1,固态硬盘接收主机发送的写入指令和写数据,写数据包括多个数据块,每个数据块中包含逻辑地址连续的多个数据,即每个数据块中的多个数据的逻辑地址均连续;固态硬盘的控制器将每个数据块中逻辑地址连续的多个数据按照连续的编程顺序写入当前物理块的多个4K单元格中,同时还在4K 单元格内存储每个数据对应的逻辑地址和计数值,计数值按照编程顺序逐个累加,因此计数值用来表征数据块中逻辑地址连续的数据的数量。
[0064] 结合图1,这些数据的物理地址不完全连续,因此该方法的适用范围广。在存储数据时,同时在计数值存储区30中存储计数值seq_cnt和对应的逻辑地址LAA,编程顺序连续且LAA连续的4KB单元格中存储的各数据的计数值也按照顺序逐个累加。例如图1中,FAA x为page x、LUN 0、Frag 0的数据其LAA存储为LAA x,计数值为0;FAA(x+1)为page x、LUN 0、 Frag 1的数据其LAA存储为LAA(x+1),计数值为1……依次类推,直至 FAA(x+20)为page(x+3)、LUN 0、Frag 0的数据其LAA存储为LAA(x+20),计数值为20。从而通过计数值的最大值就可以得知该数据块中包含多少个编程顺序连续的数据。
[0065] 本发明实施例的L2P映射表重建方法包括步骤S101至S103。
[0066] 在步骤S101中,在异常断电再上电的情况下,读取当前物理块中的最后一个4K单元格,得到最后一个4K单元格中存储的第一末位逻辑地址和第一末位计数值。
[0067] 在该步骤中,固态硬盘在异常断电并重新上电后,按照倒序读取物理块,即首先读取当前物理块的最后一个4K单元格,获取最后一个存储的数据块在当前物理块中的最后一个数据,同时从4K单元格内的计数值存储区 30内获取到了该4K单元格对应的计数值和逻辑地址,这个数据就是该数据块在当前物理块中的末位数据,通过读取最后一个4K单元格就可以获取该末位数据对应的第一末位计数值和第一末位逻辑地址。同时,读取这个 4K单元格自然就获取了对应数据的物理地址,数据对应的物理地址例如包括数据所在的物理块编号、物理页编号、逻辑单元号和页偏移。以物理块中数据仅存储到Page(x+3)的第一个4K单元格(0x4)为例,那么读取该最后一个4K单元格,获取到的是逻辑地址为LAA(x+20)的数据,该单元格内的计数值为这个数据块中的最大计数值,那么这一数据块在当前物理块内最大的计数值就是20,该数据对应的FAA(x+20)可以通过blk、page、 LUN、frag的相应编号表示,每读取一个4K单元格,就可以同时获得存在 4K单元格中的LAA地址和计数值。从而可以得FAA(x+20)对应的LAA(x+20)。
[0068] 在步骤S102中,根据第一末位计数值和最后一个4K单元格的物理地址,利用预先存储的数组表计算得到第一首位物理地址,其中,第一首位物理地址是存储在当前物理块中最后一个数据块的首个数据所在4K单元格的物理地址,数组表表征数据的编程顺序和物理地址之间的关联关系。
[0069] 在本实施例中,在执行完步骤S101之后需要获取预先存储在存储器内的数组表,该数组表在初始化后就一直存储在存储器中,需要时读取即可,数组表表征数据的编程顺序和物理地址之间的关联关系。该数组表可以在写数据存储之前就存储在了存储器中,当断电重新再上电之后,读取物理块的最后一个4K单元格,然后获取该数组表,以获得数据块中首个数据的物理地址。具体地,数组表包括第一数组和第二数组,第一数组具有多个第一元素,各个第一元素的编号表征数据的物理地址,各个第一元素存储的值表征数据的编程顺序;将第一数组的编号和存储的值置换后得到的数组为第二数组,第二数组中各个第二元素的编号表征数据的编程顺序,各个第二元素存储的值表征数据的物理地址。通过数组表可以得到FAA(x+20) 对应的编程顺序,从而由于数据块内多个数据的编程顺序连续,可以获取其他数据的编程顺序和对应的物理地址。
[0070] 在图3a和3b中,以图1所示的一个字线为例示出了数据在一个字线内的相对地址与编程顺序之间的关系示意图,图3a的虚线框内示出了第一数组,图3b的虚线框内示出了第二数组。
[0071] 请参见图3a,第一数组的编号表征数据在字线中的相对地址,该相对地址例如包括物理页位置(Page_idx,即该物理页在page编程单元内的第几个page)、逻辑单元号(LUN)和页偏移(Frag),以图1所示的一个字线所包含的16个单元格为例,则该字线中各个单元格的相对地址可以表示为 page_idx<<(2+1)|LUN<<2|Frag,在第一数组中,每个第一元素对应于一个4K单元格,将各个单元格按照相对地址从前到后的顺序排序,并将排序后的各个单元格对应的第一元素的编号设置为从小到大,每个第一元素存储的值为其对应的单元格在如图1所示的一个字线中的编程顺序。
[0072] 例如,如图3a和3b所示,第一元素A[0x4]对应于在字线中的相对地址为0<<3|1<<2|0的数据,其编程顺序为0x8,即,A[0x4]=0x8。将第一数组转换为第二数组之后,得到了第二元素B[0x8]=0x4,第二元素的编号表征编程顺序,第二元素B[0x8]存储的数据0x4表征其在字线中的相对地址0<<3|1<<2|0。即,在第一数组中,按照逻辑地址顺序即可查询到该逻辑地址对应的编程顺序,在第二数组中,编程顺序对应于每个第二元素的编号,根据编程顺序即可查找到其在字线中的相对地址。
[0073] 在固态硬盘构架中,基于LAA(x+m)与FAA(x+m)(m<=seq_cnt),相对应,那么基于数组表可以获得在LAA x到LAA(x+seq_cnt)范围内的所有对应的物理地址。因此,通过图3a和图3b建立的数组表,可以快速获取到各个数据对应的逻辑地址和物理地址,而不用挨个读取4K单元格,减少数据的读取数量,从而减少读取消耗时间。
[0074] 本步骤中,根据第一末位计数值和最后一个4K单元格的物理地址,仅通过数组表获取到该数据块中首个数据对应的第一首位物理地址,那么其对应的物理地址和逻辑地址的映射关系就可以建立了。第一首位物理地址是存储在当前物理块中最后一个数据块的首个数据所在4K单元格的物理地址,首个数据为在该数据块中编程顺序为首位的起始数据,起始数据的计数值为0,即该数据块中的最小计数值。通过数组表如何获取首个数据的第一首位物理地址的具体步骤参见图4。并且,首个数据的第一首位逻辑地址由第一末位逻辑地址与第一末位计数值进行减法计算得到,例如当末位数据的第一末位逻辑地址为LAA(x+20)时,首个数据的第一首位逻辑地址为LAA(x+20‑20)=LAAx。
[0075] 在步骤S103中,根据首个数据的第一首位逻辑地址和第一首位物理地址之间的对应关系建立最后一个数据块的L2P映射表。
[0076] 通过上述几个步骤获取了一个数据块内的首个数据的第一首位逻辑地址和第一首位物理地址的对应关系,以此来重建L2P映射表,将该数据块对应的第一首位逻辑地址和第一首位物理地址以及最大计数值均存储在 L2P映射表中,极大地节省了上电建表的时间。
[0077] 在本公开实施例中,在不改变编程顺序的情况下,将编程顺序连续的所有数据的逻辑地址、物理地址与编程顺序之间的对应关系存储在数组表中,在读取数据时利用该数组表查找数据的物理地址,从而大大提高了映射表的压缩率,并且编程顺序连续的数据块越大,对映射表的压缩率越高。
[0078] 在该示例中,利用第一数组和第二数组采集了字线中的每个单元格内的数据在字线中的相对地址和编程顺序,而且在数据存储的同时存储了逻辑地址和计数值,通过计数值逐步增大可以得知数据块内编程顺序连续的数据的数量,通过读取操作可以获取计数值最大的数据所在的物理位置和对应的逻辑地址以及计数值,因此在已知待读取数据的逻辑地址的情况下,通过读取可以获取相应的物理地址,从而通过数组表可以查询待读取数据所在字线的编程顺序,利用第二数组可以实现利用编程顺序查找其他数据在字线中的相对地址,进而获得其他数据的物理地址。因此,本公开实施例提供的L2P映射表重建方法能快速恢复上电后的L2P映射表,减小消耗时间。而且在不同类型的存储器中,即使其采用不同的固件算法(包括编程顺序),都可以通过本公开实施例的数据压缩算法进行统一,即,将不同存储器的编程顺序以及物理地址进行统一,便于固件进行管理,因此本实施例的L2P映射表重建方法的通用性强,可适配各种编程顺序。
[0079] 图4示出了图2中步骤S102的详细流程图;
[0080] 在步骤S1021中,从第一数组中根据最后一个4K单元格的物理地址获取最后一个4K单元格的末位编程顺序。
[0081] 本步骤中,每个数据块中的多个数据的编程顺序连续且逻辑地址连续,物理地址不完全连续。通过读取物理块中一个数据块中的末位数据对应的 4K单元格可以获取到该末位数据对应的计数值和逻辑地址,以LAA(x+20) 为例,通过读取操作可以先获得第一末位逻辑地址LAA(x+20)及第一末位计数值20,而在读取该4K单元格时,自然就获取了对应的第一末位物理地址FAA(x+20),参见图3a,根据第一数组可以得到FAA(x+20)对应的末位编程顺序。
[0082] 在步骤S1022中,根据最后一个4K单元格的编程顺序和第一末位计数值计算,获得当前物理块中最后一个数据块的首个数据的首位编程顺序。
[0083] 在本步骤中,由于数据块中的数据编程顺序连续,因此可以根据一个数据的编程顺序依次顺推或倒推得到其他数据对应的编程顺序。例如,FAAx 和FAA(x+1)编程顺序连续,如果得知FAAx的编程顺序就可以得到FAA (x+1)的编程顺序。因此根据第一末位计数值,本实施例中为20,通过 FAA(x+20)的编程顺序倒推20个数据即可得到FAAx的编程顺序,即首个数据的编程顺序。首个数据为该数据块中计数值最小的数据,在数据块中编程顺序为首位的起始数据,起始数据的计数值为0。
[0084] 在步骤S1023中,从第二数组中根据首个数据的首位编程顺序获取其对应的第一首位物理地址。
[0085] 参见图3b,基于第二数组,根据数据对应的编程顺序,获得数据所在字线中的物理地址。例如,基于如图3a所示的第一数组,假设通过上一步骤获取到的倒推出来的FAA0即首个数据所在字线的首位编程顺序为0x4,那么通过第二数组B[0x4]=0x8可知,FAA0所在字线中相对物理地址为0x8。该相对物理地址包含了Page_idx、LUN和Frag信息,结合page编程单元在物理块中的第几个page,即可得到首个数据对应的第一首位物理地址。而第一首位逻辑地址可以根据逻辑地址连续计算得到,具体的计算方法在步骤S102中已经描述,通过这样的映射关系就可以重建L2P映射表。
[0086] 进一步地,本实施例中,根据数组表可以获取每个数据块的多个数据中任意一个数据对应的物理地址及逻辑地址。当需要查询该数据块中的任意一个数据时,根据图3a和图3b的数组表,可以获得整个数据块中任意一个数据的逻辑地址和物理地址。例如,首个数据FAA0对应的第一数据的编号为0x8,根据A[0x8]=0x4,得到首个数据所在字线的编程顺序为0x4,根据FAA4与FAA0的编程顺序连续,可以得到FAA4的编程顺序为0x4往后 4个,即为0x8。基于如图3b所示的第二数组,根据逻辑地址LAA4对应的编程顺序0x8,得到其所在字线中的相对物理地址0x4。
[0087] 图5示出了根据本发明第二实施例的L2P映射表重建方法的流程图。
[0088] 如图5所示,本发明第二实施例的L2P映射表重建方法包括步骤S201 至步骤S204,其中步骤S201‑S203与图2实施例的步骤S101‑S103完全一致,这里不再赘述,主要介绍步骤S204。
[0089] 本实施例中,在写数据存储之前可以先建立数组表,那么,根据物理地址和编程顺序的关系建立对应的第一数组,并置换为第二数组,完成数组表的初始化,将第一数组和第二数组对应的数组表存储在存储器中。当需要用到数据压缩算法根据数据块中的一个数据计算数据块中首位数据 (或其他数据)的物理地址时,再从存储器中读取数组表使用。此数组表在固态硬盘上电后初始化,之后就留在存储器中,当需要时直接读取。
[0090] 本实施例中,固态硬盘接收主机的写数据,写数据包括多个数据块,每个数据块均包括多个逻辑地址连续的数据,将每个数据块中的多个数据均以此存储在物理块的多个4K单元中。
[0091] 在步骤S201中,在异常断电再上电的情况下,读取当前物理块中的最后一个4K单元格,得到最后一个4K单元格中存储的第一末位逻辑地址和第一末位计数值。
[0092] 在步骤S202中,根据第一末位计数值和最后一个4K单元格的物理地址,利用预先存储的数组表计算得到第一首位物理地址,其中,第一首位物理地址是存储在当前物理块中最后一个数据块的首个数据所在4K单元格的物理地址,数组表表征数据的编程顺序和物理地址之间的关联关系。
[0093] 在步骤S203中,根据首个数据的第一首位逻辑地址和第一首位物理地址之间的对应关系建立最后一个数据块的L2P映射表。
[0094] 在步骤S204中,倒序读取当前物理块,依次获取其余每个数据块中最后一个4K单元格存储的第二末位计数值和第二末位逻辑地址,再利用数组表建立当前物理块中其余每个数据块的L2P映射表。
[0095] 在上述步骤S203中,重建了当前物理块中最后一个存储的数据块的 L2P映射表,本步骤中,需要倒序读取该当前物理块,依次获取其余每个数据块中最后一个4K单元格存储的第二末位计数值和第二末位逻辑地址,再利用数组表建立当前物理块中其余每个数据块的L2P映射表。
[0096] 具体地,参见图6,图6示出了图5中步骤S204的详细流程图。如图 6所示,步骤S204包括以下步骤:
[0097] 在步骤S2041中,倒序依次读取当前物理块中其余每个数据块中最后一个4K单元格,得到其中存储的各个第二末位逻辑地址和各个第二末位计数值。
[0098] 参见图1对本发明的相应描述,假设步骤S203之前获取了LAA(z+1) 这个4K单元格内的数据的计数值和逻辑地址,然后可以通过数组表计算出 LAAz的逻辑地址和物理地址,建立LAAz对应的L2P映射表。那么,步骤 S204中,需要获取与LAAz相邻的前一个4K单元格,即LAA(y+8)对应的单元格内的数据的逻辑地址以及计数值,通过数组表计算得到LAAy的逻辑地址和物理地址,建立LAAy对应的L2P映射表;然后再获取LAAy前一个 4K单元格内的计数值和逻辑地址,得到LAA(x+20),之后建立LAAx的L2P 映射表。
[0099] 那么,本步骤中,以此读取该当前物理块,获取最后一个存储的数据块之前的其他数据块的最后一个4K单元格,依次得到其中存储的各个第二末位逻辑地址和各个第二末位计数值。在步骤S2042中,分别根据每个第二末位计数值和与之对应的4K单元格的物理地址,利用数组表计算得到其余每个数据块中首个数据所在4K单元格的第二首位物理地址。
[0100] 本步骤中,由于知道了LAA(y+8)对应的单元格内的数据的第二末位物理地址和第二末位逻辑地址以及第二末位计数值,就可以知道该数据块的连续数据的个数,之后通过数组表获取到相应数据块的首个数据,就可以获取首个数据LAAy对应的第二首位逻辑地址和第二首位物理地址。当然,也可以获取相应的LAAx对应的首个数据的逻辑地址和物理地址。
[0101] 在步骤S2043中,根据每个首个数据的第二首位逻辑地址和第二首位物理地址之间的对应关系建立当前物理块中其余每个数据块的L2P映射表。
[0102] 本步骤中,获取了LAAy以及LAAx的第二首位逻辑地址和第二首位物理地址,就可以建立LAAy以及LAAx对应的L2P映射表。当需要查询任一数据块内的任一数据时,通过数组表计算即可。
[0103] 因此,通过本实施例,倒序读取当前物理块中多个数据块中每个数据块的最后一个4K单元格,获取对应数据块中末位数据对应的第二末位计数值和第二末位逻辑地址,然后通过数组表获取每个数据块中首个数据对应的第二首位物理地址和第二首位逻辑地址,建立每个数据块的L2P映射表。那么,参照图1,即先建立LAAz对应的L2P映射表,然后建立LAAy对应的L2P映射表,最后建立LAAx对应的L2P映射表。本实施例中,实际上可以理解为对每个数据块分别执行步骤S201‑S203相应的方法,将每个数据块的最后一个数据理解为步骤S201中读取的最后一个数据,从而对每个数据块都能获得相应的L2P映射表,然后建立如图7所示的映射表。
[0104] 需要说明的是,本发明实施例并不限定数据的类型,上述数据是为了使得实施例更加清晰易懂而例举的简单实施例,并不代表所有非易失存储器的指标,并且因为非易失存储器采用的元器件的制作工艺质量不同,所以能达到的工作状态会有差异,上述数据是满足一般制作工艺情况下,经过大量的仿真实验得出的数据,并不代表所有非易失存储器的指标。
[0105] 图7示出了根据本发明实施例的L2P映射表重建方法建立的映射表的简易示意图。
[0106] 结合图5‑图7,根据图5的流程之后,每个数据块都能建立其对应的 L2P映射表,建立好的L2P映射表如图7所示。在图7中,第一个数据块的L2P映射表包括了数据的逻辑地址(LAAx)、物理地址(FAAx)和计数值 (seq_cnt x)之间的关系,第二个数据块的L2P映射表包括了数据的逻辑地址(LAAy)、物理地址(FAAy)和计数值(seq_cnt y)之间的关系,第三个数据块的L2P映射表包括了数据的逻辑地址(LAAz)、物理地址(FAAz) 和计数值(seq_cnt z)之间的关系。因此,图5的L2P映射表重建方法实际上是针对同一物理块中写数据具有多个数据块的情况下如何重建该物理块中所有数据块的L2P映射表的汇总方法,而图2的实施例阐述的是对一个物理块中的一个数据块如何进行L2P映射表重建的方法。
[0107] 进一步地,当前物理块为依序读取的多个物理块中的一个,即存储器中存储有多个物理块,正在读取的物理块即为当前物理块。对于每个物理块,都可以依照图5‑6示出的实施例恢复每个物理块中所有数据块的L2P 映射表。在读取每个物理块时,均从其中的最后一个4K单元格倒序读取,以建立每个物理块中所有数据块的L2P映射表。
[0108] 图8示出了根据本发明实施例的固态硬盘的示意性框图。
[0109] 如图8所示,计算机系统100包括主机110和固态硬盘,固态硬盘包括控制系统120和存储器130,存储器130例如为闪存芯片阵列。控制系统120连接主机110与存储器130,将主机110的写数据存入存储器130,写数据包括多个数据块,每个数据块包括多个逻辑地址连续的数据。控制系统120用于执行图1‑图7实施例中的L2P映射表重建方法。
[0110] 控制系统120包括主机接口121、处理器123、缓存芯片(SRAM)124 和存储器控制器128。控制系统120的主机接口121连接至主机110,以传输写数据和读写指令。处理器123与主机接口121、SRAM124和存储器控制器128相连接,处理器123例如用于建立数组表和执行上述实施例中的L2P 映射表重建方法,SRAM124例如存储L2P映射表,存储器控制器128控制写数据的传输和存储。
[0111] 处理器123还用于实现存储器控制的核心软件层,即FTL(Flash Translation Layer,闪存转换层),使得操作系统和文件系统能够像访问硬盘一样访问存储器。该FTL还有例如支持坏块管理、损耗均衡、垃圾回收、断电恢复、写平衡技术等特点。FTL的核心功能是地址映射,其中,处理器123读取SRAM124以获得L2P映射表,基于L2P映射表将从主机110 接收到的逻辑地址映射成存储器130的物理地址。控制系统120的存储器控制器128连接至存储器130,根据处理器123提供的物理地址对存储器130的相应存储单元进行数据访问操作。该存储器控制器128例如包括存储单元,可以存储地址映射关系数据(例如包括L2P映射表、第一数组、第二数组等)。
[0112] 存储器130包括闪存芯片阵列。为了提高数据读写性能,控制系统120 的存储器控制器128可以经由多个通道(例如CH0和CH2)对存储器130 的闪存芯片进行读写。每个通道连接一组闪存芯片。每个闪存芯片包括多个物理块,每个物理块包括多个物理页,每个物理页包括多个4K单元格,结合图1,一个物理页包括4个单元格,每个4K单元格内包括数据存储区 20和计数值存储区30,数据存储区20用于存储数据,计数值存储区30用于存储计数值(seq_cnt)和逻辑地址LAA。建立好的数组表例如存储在存储器130中,从而在固态硬盘发生异常断电再重新上电后,可以读取存储器130中的数组表,以及读取计数值存储区30中存储的某一数据块的最大计数值对应数据的物理地址,根据数组表重建L2P映射表。
[0113] 通过提前存储数组表和在存储器130中存储数据的同时存储连续编程的计数值,从而在SSD异常断电再上电后,可以通过仅读取一个4K单元格的数据,就可以根据数组表恢复L2P映射表,减少4K单元格的读取数量,节省上电建表消耗的时间和功耗。另外,由于建立数组表的数据压缩算法具有普遍适用性,可以用于任何数据块的物理地址和编程顺序的统一,因此本发明的L2P映射表重建方法和对应的固态硬盘也具有普遍适用性。
[0114] 本领域技术人员可以理解,根据本发明的数据处理系统的各个模块或单元可以通过硬件、固件或软件实现。软件例如包括采用JAVA、C/C++/C#、 SQL等各种编程语言形成的编码程序。虽然在方法以及方法图例中给出本发明实施例的步骤以及步骤的顺序,但是所述步骤实现规定的逻辑功能的可执行指令可以重新组合,从而生成新的步骤。所述步骤的顺序也不应该仅仅局限于所述方法以及方法图例中的步骤顺序,可以根据功能的需要随时进行调整。例如将其中的某些步骤并行或按照相反顺序执行。
[0115] 以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
[0116] 依照本发明的实施例如上文所述,这些实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施例。显然,根据以上描述,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地利用本发明以及在本发明基础上的修改使用。本发明仅受权利要求书及其全部范围和等效物的限制。