SSD内部数据文件管理系统及管理方法转让专利

申请号 : CN201510695564.6

文献号 : CN105353979B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李雷游毓向平周士兵姜黎马翼田达海彭鹏

申请人 : 湖南国科微电子股份有限公司

摘要 :

本发明公开了一种SSD内部数据文件系统eblock链接结构、管理系统及方法,多级eblock链接结构包括:RL0 eblock:用于放置盘片配置信息以及RLn eblock的块位置信息;RLn eblock:用于存放SLT EBLOCK的块位置信息;SLT eblock:用于存放SLT表,供SSD盘片上电时读取。本发明采用多级检索方式访问SLT、FLT等数据,规避多块交替擦写方式下,NAND块寿命消耗过快的问题,并可保证盘片充足的寿命。此方式不需要借助额外的非易失介质,使得完全基于nand flash的SSD内部文件管理得以实现,降低了硬件成本。

权利要求 :

1.一种SSD内部数据文件管理系统,其特征在于,包括eblock链接结构、FILES eblock、缓存、SLT表、逻辑-物理映射表FLT#;其中:eblock链接结构包括RL0 eblock,RLn eblock,SLT eblock;

RL0 eblock:用于放置盘片配置信息以及RLn eblock的块位置信息;

RLn eblock:用于存放SLT eblock的块位置信息;

SLT eblock:用于存放SLT表,供SSD盘片上电时读取;

FILES eblock:用于存放SSD盘片数据文件内容和各文件最后一次写包含的FLT#;

缓存:用于在SSD盘片上电时,根据SLT eblock的块位置信息,从SLT eblock中读取SLT表;缓存逻辑-物理映射表FLT#;根据SLT表记录的最后一次写页面的位置,获取逻辑-物理映射表FLT#记录的映射关系,再根据逻辑-物理映射表FLT#读取存放于FILES eblock中的SSD盘片数据文件内容,并缓存读取的SSD盘片数据文件内容;

SLT表:用于按文件ID‘#’记录文件file#最后一次写页面的位置;该最后一次写页面的位置记录有file#的逻辑-物理映射表FLT#;

逻辑-物理映射表FLT#:用于记录file#的逻辑地址到物理地址的映射关系。

2.根据权利要求1所述的SSD内部数据文件管理系统,其特征在于,所述eblock链接结构的构造过程包括以下步骤:

1)选取nand闪存中若干固定物理位置的闪存块作为RL0 eblock,并约定SSD在引导阶段从这些固定位置中读取有效的RL0页面;

2)从nand闪存中选取一定数量的闪存块构成一个块组件,并预留一部分闪存块用于坏块替换和垃圾回收;

3)在上述块组件中获取与设计备份数相同的闪存块,对这些闪存块按顺序记录物理地址构成RLn块映像,将RLn块映像作为RLn-1页面的一部分记录到RLn-1级中,当前获取的若干个闪存块即构成RLn eblock;

4)在上述块组件的剩余闪存块中获取与设计备份数相同闪存块,对这些闪存块按顺序记录物理地址构成SLT块映像,将SLT块映像作为RLn页面的一部分记录到RLn eblock中;当前获取的若干个闪存块即构成SLT eblock。

3.一种SSD内部数据文件管理方法,其特征在于,该方法主要实现过程为:

在SSD引导阶段将SLT表读写到缓存中;

读文件file#时,检查file#对应的逻辑-物理映射表FLT#是否在缓存中;若是,则直接查找缓存中的FLT#获取物理地址来读取文件内容;若否,查找缓存中SLT表的’#’号节点获取文件file#最后一次写的物理地址,读取逻辑-物理映射表FLT#到缓存,再查找缓存中逻辑-物理映射表FLT#来读取文件内容;至此完成文件file#的读取;

写文件file#时,检查文件file#对应的逻辑-物理映射表FLT#是否在缓存中;若否,则查找SLT表的’#’号节点获取文件file#最近一次写的物理地址,读取逻辑-物理映射表FLT#到缓存中;若是,则直接进行下一步操作;随后,从files eblock中获取首个空白页面写入file#需要更新的数据内容,并将该首个空白页面的物理地址更新到逻辑-物理映射表FLT#的对应逻辑节点中;再将逻辑-物理映射表FLT#写入到另一空白页面中,更新该空白页面的物理地址到SLT表的’#’号节点中;至此,完成文件file#的写入;所述files eblock用于存放SSD盘片数据文件内容和各文件最后一次写包含的FLT#;

在SSD盘片掉电时,将SLT表、FLT#下刷到闪存中。

4.根据权利要求3所述的SSD内部数据文件管理方法,其特征在于,将SLT表读写到缓存中的具体实现过程包括:当SSD盘片上电,读取SLT表到缓存时,首先在RL0 eblock中读取一份有效的RL0页面,根据RL0页面中块位置信息获取RL1级所在eblock,在RL1级中检索首个空页面,读取该空页面的上一页面数据内容,校验通过后获得有效RL1页面;在RL1eblock中读取一份有效的RL1页面,根据RL1页面中块位置信息获取SLT级所在eblock,在SLT级中检索首个空页面,读取该空页面的上一页面数据内容,校验通过后获得有效SLT页面;所述RL0 eblock用于放置盘片配置信息以及RLn eblock的块位置信息;

写缓存中的SLT表到闪存时,若SLT表所在eblock未使用完毕,则将SLT页面内容写入到的SLT eblock首个空白epage;若SLT eblock所在eblock使用完毕,则获取新的eblock,并将SLT页面写入该新的eblock首个空白epage中,随后把SLT表新的块位置信息写入到RL1级中首个空白epage;epage为eblock内页面号相同的互为备份的闪存页面;所述SLT eblock用于存放SLT表,供SSD盘片上电时读取。

5.根据权利要求4所述的SSD内部数据文件管理方法,其特征在于,空页面的判断方法为:对写入闪存的每一页面数据进行格式化处理,使得写过的页面与空页面的比特值为1的个数存在至少5%的差异,对读路径上比特值为1的个数进行统计,若读取的页面内容中

95%以上的比特值为1,则认为该页面为空页面。

6.根据权利要求3所述的SSD内部数据文件管理方法,其特征在于,将SLT表、FLT#下刷到闪存中的具体实现过程包括以下步骤:

1)设SSD盘片掉电后的相关数据保存在ID为‘#’的文件中,查找SLT表,读取文件的FLT#到缓存;

2)根据FLT#写入掉电数据到所述文件中;

3)将FLT#做为文件的最后一部分写入闪存;

4)更新FLT#的物理位置到SLT表的对应位置;

5)检查SLT级是否写满,若写满则进入步骤6),否则写入SLT页面到SLT级中,并跳转到步骤8);

6)请求一空白块,写入SLT页面到SLT级中,记录SLT级新的SLTeblock映像;

7)写入SLT eblock映像到RL1级;

8)结束。

说明书 :

SSD内部数据文件管理系统及管理方法

技术领域

[0001] 本发明涉及一种SSD内部数据文件系统eblock链接结构、管理系统及方法。

背景技术

[0002] SSD内部数据文件管理旨在控制SSD内容数据文件的访问。这些数据文件主要有盘片日志文件、固件升级文件、配置文件、nand flash(nand闪存)块状态、掉电数据文件等内容。为保证SSD的可靠性,SSD内部数据管理常采用多备份、SLC模式、只使用快page(页面)等机制。
[0003] 现有SSD内部数据管理采用轻量级的盘片主机数据管理方式,如图1所示。
[0004] 在该系统中,给定逻辑地址空间,建立一张逻辑地址到flash物理地址的映射表FLT(First Level Table),在FLT中为每个内部数据文件划分一段固定且互斥的逻辑地址空间,这些数据文件在分配的逻辑地址空间中存放。此方式下,FLT表随着系统数据文件数量的增加而增加,所以,可支持的内部数据文件数量有限。另外,需要较大的buffer(缓存)去缓存FLT表,增加硬件成本;由于各文件固定划分逻辑地址空间,当需要增加、删除数据文件时,需要重新构造FLT并划分逻辑地址空间,灵活性很差。
[0005] 由于FLT较大,FLT也需作为一个文件保存到flash中,所以还需再建立一张逻辑地址到flash物理地址的映射表SLT(Second Level Table),用于描述FLT数据存放关系。在盘片下电时,FLT数据下刷到flash,而SLT数据则被下刷到Nor flash/EEPROM中SLT所在块的首个空页面中。若SLT所在的块记满,则需要记录到备用块中,并擦除记满的块。
[0006] SLT数据之所以保存到Nor Flash/EEPROM,是因为Nor Flash/EEPROM数据retention非常可靠且页面大小较小(如nor页面size通常为64-256B,但读取较慢;nand flash页面size通常为16KB),SSD控制器在boot阶段可快速、有效查询到与SLT紧邻的空页面。另外Nor Flash/EEPROM块较nand flash块的擦写次数多得多,可在Nor flash/EEPROM中选用两个块交替擦除/记录掉电时的SLT数据。但这意味着,SSD硬盘必须外接额外的非易失介质,硬件成本增加。
[0007] 当盘片上电时,SSD firmware从Nor flash/EEPROM中给定区域内检索首个空页面,读取有效SLT到buffer,随后查找SLT从flash中获取FLT到buffer,随后即可访问系统区的各个数据文件。通常而言,首先读取掉电数据文件用于上电重建。
[0008] 读取系统区指定数据文件时,根据文件起始逻辑地址和长度查找FLT读取存放于flash物理地址内数据即可。更新指定系统数据文件时,若为页面对齐写,则将数据写到空白页面,更新映射关系到FLT。若非页面对齐写,则在执行读填充后,再将数据写到空白页面,更新映射关系到FLT。
[0009] 参考图1,现有技术中,需要在buffer中缓存SLT及整个FLT,并存在于SSD的整个运行周期,占用buffer资源较多,增加掉电数据下刷压力,增加硬件成本。
[0010] 在满足FLT下电下刷条件下,FLT不宜过大,也意味着现有系统区管理方法可管理的系统区数据文件数量较少。
[0011] 现有设计中,各系统区数据文件从FLT中固定分配逻辑空间用于数据读写。观察图1,FLT表中的file之间存在一些无效表项entry,表项空间利用率低下。当需要增加或删除某个文件时,将需要对几乎所有系统文件在FLT中的地址段进行重新划分,灵活性较差。
[0012] 另外,由于nand的比特翻转特性导致检索的空页面不可靠且在nand中交替擦除/记录会快速消耗nand的块寿命,为有效获取SLT,需要将SLT保存到Nor flash/EEPROM中,导致硬件成本增加。

发明内容

[0013] 本发明所要解决的技术问题是,针对现有技术不足,提供一种SSD内部数据文件系统eblock链接结构、管理系统及方法,解决现有系统区数据管理方法灵活性较差,buffer资源占用过多,可支持系统区文件数量较少,表项空间利用率低下,需要外接额外非易失介质保存SLT的问题。
[0014] 为解决上述技术问题,本发明所采用的技术方案是:一种SSD内部数据文件管理系统多级eblock链接结构,包括:
[0015] RL0 eblock:用于放置盘片配置信息以及RLn eblock的块位置信息;
[0016] RLn eblock:用于存放SLT EBLOCK的块位置信息;
[0017] SLT eblock:用于存放SLT表,供SSD盘片上电时读取。
[0018] 本发明还提供了一种SSD内部数据文件管理系统,包括上述eblock链接结构、FILES eblock、buffer、SLT表、逻辑-物理映射表FLT#;其中:
[0019] FILES eblock:用于存放SSD盘片数据文件内容和各文件最后一次写包含的FLT#;
[0020] buffer:用于在SSD盘片上电时,根据SLT eblock的块位置信息,从SLT eblock中读取SLT表;缓存逻辑-物理映射表FLT#;根据SLT表记录的最后一次写页面的位置,获取逻辑-物理映射表FLT#记录的映射关系,再根据逻辑-物理映射表FLT#读取存放于FILES eblock中的SSD盘片数据文件内容,并缓存读取的SSD盘片数据文件内容;
[0021] SLT表:用于按文件ID‘#’记录文件file#最后一次写页面的位置;该最后一次写页面的位置记录有file#的逻辑-物理映射表FLT#;
[0022] 逻辑-物理映射表FLT#:用于记录file#的逻辑地址到物理地址的映射关系。
[0023] 本发明所述eblock链接结构的构造过程包括以下步骤:
[0024] 1)选取nand flash中若干固定物理位置的flash block(闪存块)作为RL0 eblock,并约定SSD在boot阶段从这些固定位置中读取有效的RL0页面;
[0025] 2)从nand flash中选取一定数量的flash block构成一个block pool(块组件),并预留一部分flash block用于坏块替换和垃圾回收;
[0026] 3)在上述block pool中获取与设计备份数相同的flash block,对这些flash block按顺序记录物理地址构成RLn block map(块映像),将RLn block map作为RLn-1页面的一部分记录到RLn-1级中,当前获取的若干个flash block即构成RLn eblock;
[0027] 4)在上述block pool的剩余flash block中获取与设计备份数相同flash block,对这些flash block按顺序记录物理地址构成SLT block map,将SLT block map作为RLn页面的一部分记录到RLn eblock中;当前获取的若干个flash block即构成SLT eblock。
[0028] 本发明还提供了一种SSD内部数据文件管理方法,该方法主要实现过程为:
[0029] 在SSD boot(引导程序)阶段将SLT表读写到buffer中;
[0030] 读文件file#时,检查file#对应的逻辑-物理映射表FLT#是否在buffer中;若是,则直接查找buffer中的FLT#获取物理地址来读取文件内容;若否,查找buffer中SLT表的’#’号节点获取文件file#最后一次写的物理地址,读取逻辑-物理映射表FLT#到buffer,再查找buffer中逻辑-物理映射表FLT#来读取文件内容;至此完成文件file#的读取;
[0031] 写文件file#时,检查文件file#对应的逻辑-物理映射表FLT#是否在buffer中;若否,则查找SLT表的’#’号节点获取文件file#最近一次写的物理地址,读取逻辑-物理映射表FLT#到buffer中;若是,则直接进行下一步操作;随后,从files eblock中获取首个空白页面写入file#需要更新的数据内容,并将首个空白页面的物理地址更新到逻辑-物理映射表FLT#的对应逻辑节点中;再将逻辑-物理映射表FLT#写入到另一空白页面中,更新该空白页面的物理地址到SLT表的’#’号节点中;至此,完成文件file#的写入;
[0032] 在SSD盘片掉电时,将SLT表、FLT#下刷到flash中。
[0033] 将SLT表读写到buffer中的具体实现过程包括:
[0034] 当SSD盘片上电,读取SLT表到buffer时,首先在RL0eblock中读取一份有效的RL0页面,根据RL0页面中块位置信息获取RL1级所在eblock,在RL1级中检索首个空页面,读取该空页面的上一页面数据内容,校验通过后获得有效RL1页面;在RL1eblock中读取一份有效的RL1页面,根据RL1页面中块位置信息获取SLT级所在eblock,在SLT级中检索首个空页面,读取该空页面的上一页面数据内容,校验通过后获得有效SLT页面;
[0035] 写buffer中的SLT表到flash时,若SLT表所在eblock未使用完毕,则将SLT页面内容写入到的SLT EBLOCK首个空白epage;若SLT eblock所在eblock使用完毕,则获取新的eblock,并将SLT页面写入该新的eblock首个空白epage中,随后把SLT表新的块位置信息写入到RL1级中首个空白epage。
[0036] 本发明空页面的判断方法为:对写入flash的每一页面数据进行格式化处理,使得写过的页面与空页面的比特值为1的个数存在至少5%的差异,对读路径上比特值为1的个数进行统计,若读取的页面内容中95%以上的比特值为1,则认为该页面为空页面。
[0037] 将SLT表、FLT#下刷到flash中的具体实现过程包括以下步骤:
[0038] 1)设SSD盘片掉电后的相关数据保存在ID为‘#’的文件中,查找SLT表,读取文件的FLT#到buffer;
[0039] 2)根据FLT#写入掉电数据到所述文件中;
[0040] 3)将FLT#做为文件的最后一部分写入flash;
[0041] 4)更新FLT#的物理位置到SLT表的对应位置;
[0042] 5)检查SLT级是否写满,若写满则进入步骤6),否则写入SLT页面到SLT级中,并跳转到步骤8);
[0043] 6)请求一空白块,写入SLT页面到SLT级中,记录SLT级新的SLT eblock map(SLT eblock映像);
[0044] 7)写入SLT eblock map到RL1级;
[0045] 8)结束。
[0046] 与现有技术相比,本发明所具有的有益效果为:本发明采用多级检索方式访问SLT、FLT等数据,规避多块交替擦写方式下,NAND块寿命消耗过快的问题,并可保证盘片充足的寿命。此方式不需要借助额外的非易失介质,使得完全基于nand flash的SSD内部文件管理得以实现,降低了硬件成本。对SSD内部各数据文件独立构造逻辑-物理映射表FLT#,如此,在访问文件时,只需存放需要访问文件的FLT#到buffer中即可,并不需要缓存所有文件的FLT,大量节省了buffer资源。此方式下,各文件的FLT#互不干扰,使得添加/删除文件变得非常灵活,解决逻辑地址空间固定分配下导致数据文件管理灵活性差的问题。另外,随着系统区文件数量的增加,在buffer中也仅增加极少的SLT数据而已,对掉电下刷数据量影响甚微,可以支持更多的系统文件数量。采用统计比特值为1的比例是否超过阈值的方式检测空页面,有效解决由nand flash比特翻转导致的检测nand flash空页面困难问题。

附图说明

[0047] 图1为现有SSD内部文件管理方法简图;
[0048] 图2为本发明SSD内部文件管理方法简图;
[0049] 图3为本发明数据格式化示例;
[0050] 图4为本发明实施例SLT页面结构示例;
[0051] 图5为本发明实施例FLT#页面结构示例。

具体实施方式

[0052] 本发明原理如图2。图中的eblock(equal block)由多个内容互为备份的block组成(多备份机制)。RL0(record level)中包含盘片配置及RL1的块位置等信息,RL1中存放SLT的块位置信息,SLT按文件ID‘#’记录file#最后一次写页面位置,且该最后一次页面写位置记录有file#的逻辑-物理映射表FLT#。RL0中的数据在SSD出厂后内容保持不变,前若干页面互为备份以增强数据可靠性。在RL1与SLT所在块中,只有紧邻空页面的数据页面为有效的RL1页面/SLT页面,进一步的,可通过校验来保证数据内容的有效。为增强可靠性,本发明对使用到的block采用SLC模式或只使用快页面方式来保存数据。
[0053] 在RL1/SLT中检索到首个空页面,则该空页面的上一页面则为有效RL1页面/SLT页面。结合图2可知,本发明中不需要额外的非易失介质,只在nand中即可完成系统区数据文件的管理,其关键在于解决nand比特翻转导致空页面检测有效和快速问题。本发明中对写入flash的每一页面数据进行格式化处理,使得写过的页面与空页面的比特1的个数存在至少5%的差异。再通计数模块,对读路径上比特1的个数进行统计,若对读取的页面统计出95%以上的比特为1则认为该页面为空页面。该方法可有效解决在nand中检测空页面的有效和快速等问题,为省去额外非易介质创造条件。
[0054] 由于nand flash block的擦写次数较Nor flash/eeprom少得多,若选用两个块交替擦除/记录SLT数据,被选用block的寿命将很快耗光,这也是导致原有方法中需使用额外非易失介质的主要原因之一。为解决这一问题,本发明采用多级检索方式访问SLT。图2中RL0,RL1,SLT eblock构建了这种多级检索模型。读取SLT到buffer时,首先在RL0中读取一份有效的RL0页面,根据RL0页面中块位置信息获取RL1所在eblock,在RL1中检索首个空页面,读取空页面上一页面数据内容,校验通过后即获得有效RL1页面。采用类似方式根据RL1页面中的块位置信息检索有效SLT页面。写buffer中的SLT到flash时,若SLT所在eblock未使用完毕,则将SLT页面内容写入到的SLT eblock首个空白epage(eblock内页面号相同的互为备份的flash页面);若SLT所在eblock使用完毕,则获取新的eblock并将SLT页面写入其首个空白epage,随后把SLT新的块位置信息写入到RL1eblock中首个空白epage。
[0055] SLT的读取,只需在盘片上电时读取一次到buffer便可。读文件file#时,检查其对应的FLT#是否在buffer中;若是,则直接查找buffer中的FLT#获取物理地址来读取文件内容;若否,需要查找buffer中SLT的’#’号节点获取file#最后一次写的物理地址,该物理地址指向图2中虚线框黄色矩形FLT#,读取FLT#到buffer,再查找buffer中FLT#来读取文件内容;至此完成文件file#的读取。写文件file#时,检查其对应的FLT#是否在buffer中;若否,则需查找SLT的’#’号节点获取file#最近一次写的物理地址,该物理地址指向图2中虚线框黄色矩形FLT#,读取FLT#到buffer中;若是,则直接进行下一步操作;随后,获取一个或多个空白页面写入file#需要更新的数据内容,并将这些页面的物理地址更新到buffer中FLT#的对应逻辑节点中;再将buffer中FLT#写入到另一空白页面中,更新该页面的物理地址到SLT的’#’号节点中;至此,完成文件file#的写入。由于掉电后,buffer中的数据会丢失,所以在盘片掉电时,需要执行一次写SLT到flash的操作。
[0056] 据上述可知,SLT在上电时读取到buffer,读写文件时,SLT内容在buffer中更新即可,在掉电时才将SLT数据下刷到flash,以充分减少对flash的磨损。该方法可有效解决nand flash下SLT记录问题,以达到省去外挂额外非易失介质的目的,减少硬件成本。假设在每次下电时写入RL1eblock及SLT eblock,每个flash block有256flash页面,则当RL1eblcok写满时,需要下电256x256次,足以满足大多数盘片寿命需求。若需要更多的下电次数,还可再增加RLn的级数。
[0057] 本发明中抛弃现有发明中对SSD内部所有数据文件统一编址构造逻辑-物理映射关系表的方式,转而对每个文件file#单独构造逻辑-物理映射关系FLT#,FLT#在file#的最后一次写操作中被写入flash,SLT中按文件ID‘#’记录FLT#的物理存放地址。读取flie#时,在SLT中查找FLT#的存放地址,读取FLT#到buffer,再依据FLT#即可访问存放于flash中的file#。由此可见,本发明只需分配足以保存最大的FLT#的buffer即可,可有效节省buffer资源。SSD内部数据文件数目越多,这种资源节省效果越明显。另外,各文件独立构造FLT#,SLT按文件ID记录FLT#的物理位置的方式,可以非常方便的在SLT中添加删除文件,增强文件管理灵活性。再者,若增加系统区文件数量,在buffer中也仅增加极少的SLT数据节点而已,对掉电下刷数据量影响甚微,因此该方案可以支持更多的文件数量。
[0058] 实施例:
[0059] A)nand flash空页面检测
[0060] 首先需要对页面格式化,其目的在于,使写入到flash页面的任何数据,读取时,该flash页面中比特值为1的比例不超过设定阈值。例如,可对flash页面做如图3所示格式化,其中data段为文件数据内容;signature可指示当前eblock类型;crc段为data段的循环冗余检验值;pattern段填0,设阈值为95%,则pattern段大小为:页面Size*(1-0.95)。
[0061] 如此即可保证被写过的页面中bit值为1的比例不超过阈值95%。
[0062] 其实检测空页面,在读路径总线之上可做一简单逻辑模块,启动该模块后,该模块即可对读路径中经过的每一个数据中比特值为1的个数进行累计计数,读完指定长度后,停止计数并上报cpu,随后cpu即可计数出flash页面中比特值为1的比例,再同设定阈值比较判断当前flash页面是否为空页面。
[0063] B)构造RL0,RL1,...,RLn多级eblock链接关系
[0064] eblock由多个互为备份的flash block组成。例如,设计eblock由两个互为备份的flash block组成,若构造RL0,RL1,STL eblock三级eblock链接关系,可通过如下步骤实现:
[0065] (1)从nand flash中选取一定数量的block构成一个block pool,其具体数量根据需要支持的文件数量、RL的级数等确定,并预留一部分flash block用于坏块替换。
[0066] (2)构造RL0 EBLOCK,RL0的构造较为特殊,可以视为整个链接关系的‘根’,为让主控在boot阶段可快速获取这个‘根’内容,推荐RL0采用固定flash block分配方式,主控在boot阶段到约定的固定位置读取即可。例如,可选取2-4个die的block编号为0的页面0-8记录相同的RL0页面数据(RL0页面中含有RL1 block map数据)。在SSD主控boot时,随机读取上述范围页面的内容,直到读到有效的RL0页面即可。
[0067] (3)构造RL1级,在步骤(1)中的block pool中获取2个flash block,对这两个flash block按顺序记录物理地址构成RL1block map,将RL1block map作为RL0页面的一部分记录到RL0中。当前获取的2个flash block即构成RL1级。
[0068] (4)构造SLT EBLOCK,在步骤(1)中的block pool中获取2个flash block,对这两个flash block按顺序记录物理地址构成SLT block map,将SLT block map作为RL1页面的一部分记录到RL1中。当前获取的2个flash block即构成SLT EBLOCK。
[0069] 自此完成RL0,RL1,STL eblock三级eblock链接关系。其他n级链接关系以此类推。
[0070] C)SLT页面、FLT#页面结构示例。
[0071] SLT按文件编号‘#’记录文件最后一次写的物理地址(需要查找files eblock map表将eblock地址转化为flash block地址),该页面中保存该文件的FLT#。可定义SLT页面结构如图4所示。其中free epage cnt描述SLT eblock还剩余多少空白页面;eblock-epage info记录用于保存文件的所有eblock的epage信息(如free epage数、有效epage map等),结合free flash block table供垃圾回收或坏块替换使用。eblock map记录保持文件的eblock编号与flash block的映射关系,通过该表可将eblock编号转化为多个互为备份的flash block地址。
[0072] FLT#记录文件ID为‘#’的逻辑地址到物理地址的映射关系(映射基本单元根据设计需求设定,如图5中的映射基本单元为页面大小),可定义FLT#页面结构如图5所示,需要查找SLT页面中的files eblock map表将图中的eblock地址转化为flash block地址。
[0073] G)power-on boot
[0074] 在读写ssd内部数据文件之前,必须在ssd boot阶段将SLT和files eblock map等数据读取到ram(buffer)中,其主要流程如下(省略异常处理流程):
[0075]
[0076]
[0077] D)read file
[0078] 假设需要读文件ID为‘#’,起始逻辑地址为offset(512Byte对齐),长度为len(512Byte对齐)的文件,操作步骤不下:
[0079]
[0080] E)write file
[0081] 假设需要重写文件ID为‘#’,起始逻辑地址为offset(512Byte对齐),长度为len(512Byte对齐)的文件,若不为页面size对齐写,还需要执行读填充操作。下面仅给出页面size对齐写情况下操作步骤:
[0082]
[0083]
[0084] F)SSD power off
[0085] 掉电时,需要对将SLT、FLT#、eblock map等信息下刷到flash,可参考以下方式完成这些数据的下刷:
[0086]