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

文档序号:8319097阅读:来源:国知局
储系统的删除数据方法,所述闪存存储系统包括缓存、主控模块和缓存元数据记录表;其中,所述缓存元数据记录表用于存储元数据表地址、物理存储块和后端闪存地址之间的对应关系;所述闪存存储系统的删除数据方法包括如下步骤:
[0060]SI,所述主控模块接收前端应用发出的删除第一后端闪存地址的数据的命令;
[0061]S2,所述主控模块对所述第一后端闪存地址进行计算,获得与所述第一后端闪存地址对应的第一元数据表地址;
[0062]S3,所述主控模块读取所述缓存元数据记录表,获取与所述第一元数据表地址对应的当前后端闪存地址;
[0063]S4,所述主控模块判断所述第一后端闪存地址与当前后端闪存地址是否相同;
[0064]S5,若所述第一后端闪存地址与所述当前后端闪存地址相同,则将当前后端闪存地址对应的表项删除,并执行步骤S7 ;
[0065]S6,若所述第一后端闪存地址与所述当前后端闪存地址不同,则执行步骤S7 ;
[0066]S7,将所述删除第一后端闪存地址的数据的命令发送到后端闪存。
[0067]本发明还提供了一种闪存存储系统,包括缓存、主控模块、缓存元数据记录表、读映射表和写映射表;其中,所述写映射表用于存储在缓存中写入逻辑存储块与物理存储块的对应关系,所述读映射表用于存储在缓存中读出逻辑存储块与物理存储块的对应关系,所述缓存元数据记录表用于存储元数据表地址、物理存储块和后端闪存地址之间的对应关系;
[0068]所述主控模块用于接收前端应用发出的将第一写入逻辑存储块中的数据写入第一后端闪存地址的命令;
[0069]所述主控模块用于读取所述写映射表,获取与所述第一写入逻辑存储块对应的所述缓存中的第一物理存储块;
[0070]所述主控模块用于对所述第一后端闪存地址进行计算,获得与所述第一后端闪存地址对应的第一元数据表地址;
[0071]所述主控模块用于读取所述缓存元数据记录表,获取与所述第一元数据表地址对应的当前后端闪存地址;
[0072]所述主控模块用于判断所述第一后端闪存地址与当前后端闪存地址是否相同,若所述第一后端闪存地址与所述当前后端闪存地址相同,则将所述第一物理存储块替换所述缓存元数据记录表中与所述当前后端闪存地址对应的当前物理存储块;若所述第一后端闪存地址与所述当前后端闪存地址不同,则将所述缓存元数据记录表中与所述当前后端闪存地址对应的当前物理存储块的数据存储到后端闪存的当前后端闪存地址中,并将所述第一后端闪存地址和第一物理存储块分别替代所述当前后端闪存地址和当前物理存储块;
[0073]所述主控模块用于接收前端应用发出的将第一后端闪存地址的数据写入第一读出逻辑存储块中的命令;
[0074]所述主控模块用于对所述第一后端闪存地址进行计算,获得与所述第一后端闪存地址对应的第一元数据表地址;
[0075]所述主控模块用于读取所述缓存元数据记录表,获取与所述第一元数据表地址对应的当前后端闪存地址;
[0076]所述主控模块用于判断所述第一后端闪存地址与当前后端闪存地址是否相同;若所述第一后端闪存地址与所述当前后端闪存地址相同,则将所述缓存元数据记录表中与所述第一后端闪存地址对应的当前物理存储块写入所述读映射表中且与所述第一读出逻辑存储块相对应;若所述第一后端闪存地址与所述当前后端闪存地址不同,则将所述缓存元数据记录表中与所述当前后端闪存地址对应的当前物理存储块的数据存储到后端闪存的当前后端闪存地址中,并将所述第一后端闪存地址和新的物理存储块分别替代所述当前后端闪存地址和当前物理存储块,并将所述新的物理存储块写入所述读映射表中且与所述第一读出逻辑存储块相对应。
[0077]在一个实施例中,所述闪存存储系统还包括引用计数表、空闲物理块FIFO和回收模块,所述空闲物理块FIFO用于存放所述缓存中空闲的物理存储块,所述计数表用于存储所述物理存储块与对应的引用次数,当所述空闲物理块FIFO将空闲的物理存储块分配出去时,将分配出去的物理存储块的引用次数设置为第一引用次数值;
[0078]当所述第一后端闪存地址对应的当前物理存储块写入所述读映射表中后,将与所述第一后端闪存地址对应的当前物理存储块的引用次数增加设定引用次数,并将所述读映射表中与所述第一读出逻辑存储块对应的旧的物理存储块的引用次数减所述设定引用次数;
[0079]将所述新的物理存储块写入所述读映射表中后,将所述新的物理存储块的引用次数增加设定引用次数,并将所述读映射表中与所述第一读出逻辑存储块对应的旧的物理存储块的引用次数减所述设定引用次数;
[0080]对于替换和被替换的物理存储块,读取所述引用计数表中物理存储块的引用次数,若物理存储块的引用次数大于所述第一引用次数值,则将对应的物理存储块的引用次数减设定引用次数,若物理存储块的引用次数等于第一引用次数值,则所述回收模块将对应的物理存储块写入所述空闲物理块FIFO中。
[0081]在一个实施例中,所述缓存元数据记录表的一个表项中具有四个物理存储块,每个物理存储块的大小为4KB。
[0082]本闪存存储系统,可以减少对后端闪存的不必要写入或读出,实现读写数据通路上的零拷贝,消除不必要的中间拷贝过程,从而提高读写效率;
[0083]并且可以使前端应用的读写访问与后端闪存大小相匹配。
【【附图说明】】
[0084]图1是本发明一种实施例的闪存存储系统工作流程示意图;
[0085]图2是本发明一种实施例的闪存存储系统原理框图;
[0086]图3是本发明一种实施例的缓存中逻辑存储块和物理存储块地址转换示意图;
[0087]图4是本发明一种实施例的回收物理存储块的流程示意图;
[0088]图5是本发明一种实施例的命令完成队列处理流程示意图;
[0089]图6是本发明一种实施例的缓存元数据记录表示意图;
[0090]图7是本发明一种实施例的缓存元数据状态表示意图;
[0091]图8是本发明一种实施例的删除后端闪存数据的流程示意图;
[0092]图9是本发明一种实施例的向后端闪存写入数据的流程示意图;
[0093]图10是本发明一种实施例的从后端闪存读入数据的流程示意图;
[0094]图11是本发明一种实施例的初始状态时与映射表不意图;
[0095]图12是本发明一种实施例的初始状态时读映射表示意图;
[0096]图13是本发明一种实施例的初始状态时缓存元数据状态表示意图;
[0097]图14是本发明一种实施例的初始状态时空闲物理块FIFO存储示意图;
[0098]图15是图14的空闲物理块FIFO在分配一部分物理存储块给写映射表后的示意图;
[0099]图16是本发明一种实施例的第一次写请求前缓存元数据记录表示意图;
[0100]图17是图16的缓存元数据记录表在第一次写请求后的示意图;
[0101]图18是本发明一种实施例的第一次写请求前写映射表的示意图;
[0102]图19是图18的写映射表在第一次写请求后的示意图;
[0103]图20是本发明一种实施例的第一次写请求前缓存元数据状态表的示意图;
[0104]图21是本发明一种实施例的缓存元数据状态表在第一次写请求后的示意图;
[0105]图22是本发明一种实施例的在某一次读请求前缓存元数据记录表的示意图;
[0106]图23是图22缓存元数据记录表在该次读请求后的示意图;
[0107]图24是本发明一种实施例的在某一次读请求前读映射表的示意图;
[0108]图25是图24的读映射表在经过该次读请求后的示意图;
[0109]图26是本发明一种实施例的在某一次读请求前缓存元数据状态表的示意图;
[0110]图27是图26的缓存元数据状态表在经过该次读请求后的示意图;
[0111]图28是本发明一种实施例的主控模块发送给后端闪存的命令示意图;
[0112]图29是图28的命令ID为16回收前缓存元数据状态表示意图;
[0113]图30是图28的命令ID为16回收后缓存元数据状态表示意图。
【【具体实施方式】】
[0114]以下对发明的较佳实施例作进一步详细说明。
[0115]如图1所示,本发明一种实施例的闪存存储系统工作流程示意图。
[0116]在本实施例中,本闪存存储系统包括:缓存、读写请求地址映射模块、缓存空闲块管理模块、缓存元数据记录表、缓存元数据状态表和主控模块,所述主控模块在缓存系统内。
[0117]本实施例中,对缓存的读写访问请求都是以4KB为大小,将缓存按照4KB的大小划分为若干个物理存储块。例如容量为IGB的DDR,会划分为1GB/4KB = 256K个物理存储块,称为PBNl?PBN256K。PBN即physical block num,物理存储块编号,与其对应的是LBN,即logic block num,逻辑存储块编号。
[0118]缓存系统会虚拟少量逻辑存储块,给前端访问使用,以IGB缓存空间为例,它含有256K个物理存储块。缓存系统可以虚拟出IK个逻辑存储块(也是4KB大小),给前端应用使用,这个IK和前面的256K大小之间没有关系,两者可以采用其他的数值及关系。
[0119]前端应用写访问时,首先先选择I个空闲的逻辑存储块(初始时所有块都是空闲的),将数据写入该逻辑存储块,假设为逻辑存储块1,如图1的步骤I所示。
[0120]然后前端应用向缓存的主控模块发命令,让其将逻辑存储块I内的4KB数据搬到后端闪存存储的某个地址,如步骤2所示。
[0121]缓存不一定立刻将其实际写入后端存储的闪存中,而是暂时存在自身空间内。但会向前端应用发送一个完成消息,告知其此数据搬移已经完成,如步骤3所示。
[0122]前端应用收到完成消息,认为该数据已经写入后端的闪存,将逻辑存储块I释放掉。这样后面的写请求就可以再次利用逻辑存储块I进行操作。
[0123]前端应用想从后端闪存中读取某个后端地址的数据时,先送命令,让缓存系统将后端某个地址的数据搬到某个空闲的逻辑存储块,假设是逻辑存储块1,如步骤2所示。
[0124]缓存会将数据准备好,放在逻辑存储块I上。有可能这个数据本身就存在缓存内,即缓存命中,也可能是从后端闪存读进缓存内的。
[0125]缓存准备好后,会送完成消息,告知前端数据已经准备好,如步骤3所示。
[0126]前端会读取逻辑地址I的数据,完成访问,如步骤I所示。
[0127]除了读写请求,前端应用访问会还有一种删除请求,请求将后端存储的某个地址的数据删除。这是为了提高闪存利用率,只有闪存存储系统才有的删除请求。接收到这个请求后,缓存系统会首先检查自身内是否储存了该地址的数据,如果有,则将其删除,然后将这个命令传递给后端的闪存,向前端应用报告请求完成。
[0128]图1中的步骤4是缓存系统在写(flush)、读(load)或删除(del)操作时向后端模块发送命令。
[0129]步骤5是后端模块完成flush,load,del操作时,向缓存系统返回完成。
[0130]步骤6是后端模块根据flush和load的命令信息,控制并完成缓存内数据和后端存储数据的交换。
[0131]如图2所示,一种实施例的闪存存储系统结构图,以下对各个构成进行说明。
[0132]物理存储块
[0133]也即物理缓存单元,是一块DDR,用于存储实际的数据。它被按照4KB的大小,划分为若干个物理存储块。
[0134]
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1