一种闪存存储系统及其读写、删除方法_4

文档序号:8319097阅读:来源:国知局
新的物理存储块,并将其中对应的一个物理存储块号写到读映射表请求的位置上,并将读映射表中对应位置的旧物理存储块号释放。将4个物理存储块都标识为有效,在缓存元数据状态表中将lock标志位、empty标志位和clean标志位分别标志为lock、notempty和clean。然后主控模块再发送一条命令,要求后端模块将后端闪存地址上的数据读到这几个新的物理存储块上,但原先物理存储块标识位为有效的物理存储块不会被覆盖,仅读取并覆盖原先无效的物理存储块。在缓存系统接收到后端模块的完成命令后,才会向前端模块返回完成命令,并将对应表项的lock标志位设置为unlock。
[0182]若对应的物理存储块标志位为有效,说明该数据已经在缓存中,将该物理存储块号写到读映射表请求的位置上,并将该物理存储块号的引用计数加1,同时将读映射表中该位置的旧物理存储块号释放。
[0183]对于写入读映射表的物理存储块,在引用计数表中将该物理存储块的引用次数加1,而当某个物理存储块从读映射表被删除时,则在引用计数表中将该物理存储块的引用次数减1,从而保证读映射表中的物理存储块不被回收。
[0184]实施例1
[0185]假设物理存储块共有1000个,大小是4KB,等于前端应用访问大小。
[0186]假设后端闪存系统的page size是16KB,则缓存元数据记录表和缓存元数据状态表都是250个表项,因为他们是基于page size的,1000*4KB = 250*16KB。
[0187]假设前端应用能看到的虚拟逻辑存储块有100个,多少个可以随意,主要目的是考虑处理延时,多设几个便于并行处理。
[0188]如图11至15是各个数据表或存储器初始状态下:
[0189]初始状态时,写映射表已经为各个逻辑块号分配好了对应的物理存储块号,如图11所示。读映射表保持空的状态,所有表项写入一个无效的物理存储块号,例如“X”表示一个大于有效物理存储块号的数值,表示当前为初始状态,这样在前端应用读入某个读入逻辑存储块号时,则无数据返回,如图12所示。
[0190]如图13所示,初始状态时,缓存元数据记录表是空的,因为缓存中没有存放任何数据,缓存元数据状态表(里面有250条表项)都是empty,unlock, clean的状态。
[0191]如图14所示,初始状态时,空闲物理块FIFO是满的,里面存放着所有的物理存储块号(1000个)。初始状态下所有物理存储块都是未使用的空闲状态。
[0192]初始状态时,主控模块会在空闲FIFO队列中先申请100个(逻辑存储块数目)物理存储块,将其写到写映射表中,为写映射表中的每一个逻辑存储块分配一个物理存储块号。由于初始时所有物理存储块在空闲物理块FIFO中,在主控模块将前100个物理存储块号分配到写映射表后,空闲物理块FIFO就只剩下900个物理存储块,如图15所示。后续物理存储块使用情况不同,回收先后不同,空闲物理块FIFO里的物理存储块号的顺序将会是杂乱的。
[0193]第一次写请求,如图16至21所示。
[0194]前端应用将数据先写到了逻辑存储块I中。由于有写映射表,此时逻辑地址I对应的是物理存储块1,所以数据实际被写到了物理存储块I中。
[0195]前端应用发下命令,将逻辑存储块I的数据写到后端某个地址GBAx,假设GBAx最低两位的比特为00。
[0196]主控模块接收到了这个命令,将GBAx做hash运算,得出其对应的缓存元数据地址索引是15(假设)。并查询写地址映射表,得出当前逻辑存储块I对应物理存储块I。
[0197]主控模块读取缓存元数据状态表,发现地址15的表项状态是empty、unlock和clean (因为初始化之后所有表项都是这个状态)。
[0198]主控模块在缓存元数据记录表15的位置新建一个表项,将物理存储块I写到第一个物理存储块位置。GBAx最低两位比特00?11的4种情况,决定了该物理存储块要写到第几个位置,依次对应表项的第一个物理存储块位置到第四个物理存储块位置。
[0199]缓存元数据记录表中的GBAx的后两位是0,因为元数据记录表的一条表项大小是16KB,和前端命令4KB地址相比大4倍,所以最后两位地址记录成O即可。
[0200]将缓存元数据状态表第15个表项设为not empty、unlock和dirty,代表本表项已被使用,unlock和dirty则分别指本表项的数据较新一些(和后端GBAx存储的数据比)。
[0201]主控模块在向空闲物理块FIFO申请一个新物理存储块(假设是101),写入写映射表第一个位置(逻辑存储块I的位置),如图19所示,现在再来写逻辑存储块1,实际就写入物理存储块101 了。
[0202]主控模块向前端应用返回命令完成。
[0203]某一次读请求,如图22至27所示。
[0204]若干次操作后,前端应用发送命令,要求将后端地址GBAy的数据,读到逻辑存储块2上。然后前端应用等待命令完成后,再访问逻辑存储块2获得数据。
[0205]主控模块对GBAy进行hash计算,得出其对应的缓存元数据记录表的地址是30(假设)。
[0206]如图22所示,当前地址30的表项是有数据的,但是该该表项对应的后端存储地址是GBAz,与要访问的后端地址GBAy并不相同,也即缓存没有命中,需要先将这个表项(也即旧表项)的数据写到后端闪存中,同时将需要的新数据读(load)进来。
[0207]主控模块先查出元数据地址30是有数据的,但后端地址GBAz并不等于GBAy。
[0208]主控模块读取状态表,发现元数据地址30的位置的dirty标志位是dirty,说明需要将对应的四个物理存储块的数据写到后端闪存。
[0209]主控模块发送命令,通知后端模块将物理存储块123、物理存储块75、物理存储块50和物理存储块100的数据(共16KB),写入到GBAz这个地址起始的16KB空间中。
[0210]主控模块不需要等待上个命令完成,立刻将元数据记录表的表项30擦掉,新建一个表项,即对表项30重新赋值。向缓存空闲块管理模块申请4个新的物理存储块,假设是物理存储块400、物理存储块500、物理存储块600和物理存储块700,将其依次写到第一个到第四个位置的物理存储块位置。
[0211]假设GBAy的末两位是01,代表是4个4KB中的第2个,因此将第二个物理存储块位置上的物理存储块500写到读映射表2的位置上。
[0212]在写之前,读映射表2对应的旧物理存储块是物理存储块20,此处前端访问的请求表示已经不再需要逻辑存储块2的数据了,因此物理存储块20会被释放。当然物理存储块20不一定会写到空闲物理块FIFO中,这取决物理存储块20的当前引用计数。这部分在回收模块中有描述具体过程。
[0213]主控模块再发一个命令,要求后端模块将GBAy (地址低2bit为0,地址16KB对齐)开始的16KB数据依次读到物理存储块400、500、600和700 (每个物理存储块4KB)中。
[0214]主控模块将此表项在缓存元数据状态表中置为lock、clean和not empty。
[0215]由于读取需要时间,主控模块此时不会立刻向前端返回完成命令,他需要先等待后端模块返回读取完成,然后再讲表项30的lock标志位设置为unlock。
[0216]某一次后端命令完成,如图28至30所不。
[0217]如图28所示,缓存系统发给后端闪存两个命令,命令ID号15的是一次flush (写)操作,命令ID号16的是一次load(读)操作。现在后端模块返回这两个命令完成。
[0218]对于ID号15的命令,回收模块会先检查其操作类型是写操作,然后将其中有效的物理存储块号,本例中是两个,物理存储块18和物理存储块2,回收掉。回收流程依然按照之前描述的方式进行。
[0219]回收完成后并不会通知前端,因为写操作的命令返回在之前就返回过了。
[0220]对与ID号16的命令,回收模块会对GBAy进行hash计算,按上面实例,它对应元数据记录表的第30个表项。当时缓存系统将该表项的lock标志位设置为了 lock,此时数据读取回来,缓存系统会将该表项的lock标志位置为unlock,同时通知前端模块,之前的这条读命令完成了。
[0221]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明由所提交的权利要求书确定的专利保护范围。
【主权项】
1.一种闪存存储系统的写数据方法,其特征是,所述闪存存储系统包括缓存、主控模块、缓存元数据记录表和写映射表;其中,所述写映射表用于存储在缓存中写入逻辑存储块与物理存储块的对应关系,所述缓存元数据记录表用于存储元数据表地址、物理存储块和后端闪存地址之间的对应关系;所述闪存存储系统的写数据方法包括如下步骤: SI,所述主控模块接收前端应用发出的将第一写入逻辑存储块中的数据写入第一后端闪存地址的命令; S2,所述主控模块读取所述写映射表,获取与所述第一写入逻辑存储块对应的所述缓存中的第一物理存储块; S3,所述主控模块对所述第一后端闪存地址进行计算,获得与所述第一后端闪存地址对应的第一元数据表地址; S4,所述主控模块读取所述缓存元数据记录表,获取与所述第一元数据表地址对应的当前后端闪存地址; S5,所述主控模块判断所述第一后端闪存地址与当前后端闪存地址是否相同; S6,若所述第一后端闪存地址与所述当前后端闪存地址相同,则将所述第一物理存储块替换所述缓存元数据记录表中与所述当前后端闪存地址对应的当前物理存储块; S7,若所述第一后端闪存地址与所述当前后端闪存地址不同,则将所述缓存元数据记录表中与所述当前后端闪存地址对应的当前物理存储块的数据存储到后端闪存的当前后端闪存地址中,并将所述第一后端闪存地址和第一物理存储块分别替代所述当前后端闪存地址和当前物理存储块。
2.如权利要求1所述的闪存存储系统的写数据方法,其特征是,所述闪存存储系统还包括引用计数表、空闲物理块FIFO和回收模块,所述空闲物理块FIFO用于存放所述缓存中空闲的物理存储块,所述计数表用于存储物理存储块与对应的引用次数,当所述空闲物理块FIFO将空闲的物理存储块分配出去时,将分配出去的物理存储块的引用次数设置为第一引用次数值; 还包括回收物理存储块步骤: 对于被替换的物理存储块,读取所述引用计数表中对应物理存储块的引用次数,若对应物理存储块的引用次数大于所述第一引用次数值则将对应的物理存储块的引用次数减设定引用次数,若对应物理存储块的引用次数等于第一引用次数值,则所述回收模块将对应的物理存储块写入所述空闲物理块FIFO中。
3.如权利要求2所述的闪存存储系统的写数据方法,其特征是,所述缓存元数据记录表还用于存储与物理存储块对应的物理存储块有效标志位,在所述物理存储块存储数据之前对应的物理存储块有效标志位的值被置为非有效值,在所述物理存储块存储数据之后对应的物理存储块有效标志位的值被置为有效值; 在所述步骤S6中,在将所述第一物理存储块替换所述缓存元数据记录表中与所述当前后端闪存地址对应的当前物理存储块之前,还包括如下步骤: 在所述缓存元数据记录表中判断所述当前后端闪存地址对应的当前物理存储块的物理存储块有效标志位的值是有效值还是非有效值,若是有效值则执行回收物理存储块步骤。
4.如权利要求2所述的闪存存储系统的写数据方法,其特征是:所述闪存存储系统还包括缓存元数据状态表;
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1