文件系统级的非挥发性存储器磨损均衡空闲块管理方法

文档序号:10490276阅读:259来源:国知局
文件系统级的非挥发性存储器磨损均衡空闲块管理方法
【专利摘要】本发明公开了一种文件系统级的非挥发性存储器磨损均衡空闲块管理方法,包括构建空闲块队列及超级块,所述超级块存储空闲块队列的队头指针及队尾指针,所述队头指针及队尾指针分别指示空闲块队列起始空闲块结点所在的空闲块队列片段号和结束空闲块结点所在的空闲块队列片段号,当用户需要存储数据的时候,取出空闲块存储队列中队头元素,快速给用户分配空闲块。被分配出去的空闲块回收的时候放到空闲块存储队列的队尾,等待空闲块队列中前面元素分配完后再被分配使用,解决了磨损均衡问题。
【专利说明】
文件系统级的非挥发性存储器磨损均衡空闲块管理方法
技术领域
[0001]本发明涉及数据存储和数据管理领域,具体涉及文件系统级的非挥发性存储器磨损均衡空闲块管理方法。
【背景技术】
[0002]非挥发性存储器(non-volatile memory,NVRAM)以其高存储密度、较低的功耗、随机读写和字节可寻址等诸多优点,尤其是断电后还可以保留原有数据的特点,逐渐在存储系统中扮演越来越重要的角色。
[0003]但是大部分非挥发性存储器的存储单元都有有限的擦写次数。由于大多数程序的写操作都呈现出明显的局部性和不均衡性,写操作集中的单元会比其他单元较早地达到寿命极限,从而造成数据错误,器件寿命也会因此而缩短。传统在文件系统层级的磨损均衡解决方法是为每个存储块设置计数器,这样需要消耗较多的内存。本发明提出一种区别与传统做法的方式在文件系统层级解决非挥发性存储器的磨损均衡问题。

【发明内容】

[0004]目前存在的文件系统层级的针对非挥发性存储器的磨损均衡解决方案需要设置计数指针,需要消耗大量的内存,为了克服这个缺陷,本发明提出一种文件系统级的非挥发性存储器磨损均衡空闲块管理方法。
[0005]本发明的目的尽量避免消耗内存的情况下在文件系统层级解决非挥发性存储器的磨损均衡问题,使存储器写操作写的单元更加均匀,从而达到延长使用寿命的目的。
[0006]本发明采用如下技术方案:
[0007]—种文件系统级的非挥发性存储器磨损均衡空闲块管理方法,包括空闲块、超级块、数据块、空闲块队列、空闲块队列片段及空闲块结点,具体方法如下:
[0008]构建空闲块队列,所述空闲块队列由至少一个空闲块队列片段构成,空闲块队列片段至少存储一个空闲块号或者存储全O结点,每个空闲块号对应唯一空闲块;
[0009]构建超级块,超级块位于文件系统内,所述超级块存储空闲块队列的队头指针及队尾指针,所述队头指针及队尾指针分别指示空闲块队列起始空闲块结点所在的空闲块队列片段号,和结束空闲块结点所在的空闲块队列片段号;
[0010]当文件系统被挂载时,超级块被加载到内存中;
[0011]当要向非挥发性存储器内写入数据时,则请求空闲块,从超级块中取出空闲块队列队头指针指向的空闲块队列片段号,若队头指针指向的空闲块队列片段号为N,若队尾指针指向的空闲块队列片段号为M:
[0012]如果M= N,找到第一个非O的空闲块结点,所述空闲块结点对应唯一空闲块号,把空闲块结点中对应的空闲块号的空闲块直接分配给文件,修改当前空闲块结点的值为0,表示已经分配出去,该空闲块号的空闲块一旦被分配出去直到被回收之前都不可再用,分配出去的空闲块称为数据块;
[0013]如果M在N,取出队首指针指示的空闲队列片段上第一个非O空闲块结点,若该结点不是空闲块队列片段上最后一个空闲块结点,则直接分配;若该结点是空闲块队列片段上最后一个结点,则暂存当前空闲块队列队首指针指示的空闲块片段的空闲块号K,然后修改空闲块队列队首指针指向最后一个非O结点指示的块号,待修改完成后把最初暂存的K号空闲块分配给文件。
[0014]还包括分配出去的空闲块若被释放,则置于超级块中空闲块队列队尾指针指示的空闲块队列片段上的第一个全O的空闲块结点。
[00?5]如果超级块中空闲块队列队尾指针指不的空闲块队列片段内无O的空闲块结点,则取当前空闲块队列片段内最后一个空闲块结点,以存储在该空闲块结点内的块号的空闲块作为下一个空闲块队列片段容器,新建空闲块队列片段,初始化空闲块队列片段内的空闲块结点为0,将释放后的空闲块块号存储到第一个为O的空闲块结点,同时修改超级块中空闲块队列的队尾指针。
[0016]起始和结束的空闲块队列片段号上的空闲块结点如果未存满,则未存储的地方用O填充。
[0017]本发明的有益效果:
[0018](I)在文件系统层级利用空闲块队列来分配、回收存储设备上的空闲块,解决非挥发性存储器的磨损均衡问题;
[0019](2)文件系统中的超级块在文件系统挂载的时候加载到内存,分配、回收空闲块优先操作内存中加载的超级块,定时把内存中的超级块同步回文件系统中的超级块,减少写操作对非挥发性存储器的损耗。
【附图说明】
[0020]图1是本发明的系统结构图;
[0021]图2是本发明中空闲块分配的工作流程图;
[0022]图3是本发明中空闲块回收的工作流程图
【具体实施方式】
[0023]下面结合实施例及附图,对本发明作进一步地详细说明,但本发明的实施方式不限于此。
[0024]实施例
[0025]—种文件系统级的非挥发性存储器磨损均衡空闲块管理方法,包括空闲块、超级块、数据块、空闲块队列、空闲块队列片段及空闲块结点;
[0026]所述空闲块具体为:占有一定大小的存储空间,其内部没有有用的数据。是存储数据的基本数据单元。
[0027]所述超级块:包含文件系统所有关键参数的块(确定文件系统类型的魔数、文件系统中数据块的数量以及其他重要的管理信息)。
[0028]所述数据块:分配出去的空闲块,占有一定大小的存储空间,大小与空闲块一致,其内部存有数据。是存储介质进行读写的最小单位。
[0029]空闲块队列:一个存储空闲块号的队列,在空闲块较多、空闲块队列较长的情况下,每个空闲块存储的空闲块结点数量有限,因此空闲块队列会分割为多个空闲块片段存储在多个空闲块上;
[0030]空闲块队列片段:在空闲块队列较长的情况下,单个空闲块不能存储整个队列,队列会被分割成若干大小相等的片段分别存储在若干空闲块上,每个空闲块队列片段所占空间大小与空闲块一致。
[0031]空闲块结点:空闲块队列中的一个元素,每个空闲块结点都储存着一个空闲块号。
[0032]具体方法如下:
[0033]构建空闲块队列,所述空闲块队列由至少一个空闲块队列片段构成,空闲块队列片段由存储着空闲块号的空闲块结点或全O结点构成”,每个空闲块号对应唯一空闲块。
[0034]构建超级块,超级块位于文件系统内,所述超级块存储空闲块队列的队头指针及队尾指针,所述队头指针及队尾指针分别指示空闲块队列起始空闲块结点所在的空闲块号,和结束空闲块结点所在的空闲块号;
[0035]空闲块的分配:
[0036]当文件系统要向非挥发性存储器上写入数据的时候,需要为其分配若干空闲块。在本发明的文件系统的超级块中存储空闲块队列的队头和队尾指针,它们分别指向空闲块队列起始空闲块队列片段和结束空闲块结点所在的空闲块片段的块号,起始和结束的空闲块片段上的空闲块结点如果未存满,则未存储的地方用O填充。当文件系统被挂载上之后,超级块将被加载到内存中,内核会定期将其同步到存储设备上,以保证其正确性。
[0037]当请求空闲块时,从内存中的超级块中取出空闲块队列队头指针指向的空闲块号(假设为N),和队尾指针指向的空闲块号(假设为M)。
[0038]若队头指针(N)和队尾指针(M)指示的空闲块号相同(M= N)
[0039]在该空闲块队列片段上找到第一个非O的空闲块结点直接分配给文件,修改当前空闲块结点的值为0,表示已经分配出去。该空闲块号的空闲块一旦被分配出去,直到被释放回收之前都不可再用。
[0040]因为单个空闲块号上的队列能存储的空闲块结点有限,如果空闲块号较多的时候,单个空闲块已经存储不下这些空闲块结点,需要多个空闲块存储。此时存储空闲块结点的每个空闲块中(除队尾指示的空闲块)存储的最后一个空闲块结点是指示连续的下个空闲块队列片段所在的块号位置。
[0041]若队首指针(N)和队尾指针M指示的空闲块号不同,S卩M在N。
[0042]取出队首指针指示的空闲块队列片段上第一个非O空闲块结点,若该结点不是空闲块队列片段上最后一个空闲块结点,则直接分配;若该结点是空闲块队列片段最后一个结点,则暂存当前队首指针指示的空闲块队列片段的空闲块号K,修改空闲块队列队首指针指向空闲块队列片段最后一个非O结点指示的块号,修改完成后把当前K号空闲块分配给文件。
[0043]空闲块的回收:
[0044]空闲块的回收方法,与分配方法相反。将释放的空闲块号置入超级块的空闲队列队尾指针指示的空闲块队列片段中,若当前空闲块队列片段还能存储空闲块结点,则找到当前空闲块队列片段上第一个为O空闲块结点直接存储新释放的块号。若当前空闲块队列片段已经存储满空闲块结点,取当前空闲块队列片段中最后一个空闲结点记录的块号(假设X),在X上新建空闲块队列片段,初始化该空闲块队列片段上所有空闲块结点为全O,把新释放的空闲块块号存入该空闲块队列片段第一个为O的空闲块结点,修改内存中超级块中的队尾指针指向当前新分配的空闲块队列片段块号。定期再把修改同步到存储在非挥发性存储设备的超级块中。下次对同一空闲块操作需要把空闲块队列中该块之前的空闲块都分配完后,减少了对同一空闲块的使用频次,使每个空闲块均匀的被使用,从磨损均衡的角度考虑,我们保证这些数据块不会被过度使用。
[0045]本发明通过发明一种文件系统层级的非挥发性存储器空闲块管理方式,增加考虑磨损均衡技术,延长了易损耗的非挥发性存储器的整体使用寿命。本发明使用空闲块队列管理空闲块借鉴了磁盘空闲块链表方式管理,并加以改进,每次从队头取出空闲列表块,经过是否是最后一个空闲块片段和是否还有空闲块存储空闲块队列等判断后分配,回收的空闲列表块放在队尾,如果当前空闲块存储满后,在当前空闲块队列存储的最后一个空闲块新建一个空闲块队列片段,存储延续当前队列结点,本发明保证了空闲块不会被随机分配,先被分配的空闲块会等到把排在队列前面的空闲块使用完毕后再使用,比较自然的解决了非挥发性存储器的磨损问题。
[0046]如图1是本发明实施例的系统结构图,
[0047]本发明采用空闲块队列形式存储空闲块号,超级块的队首指向#25号空闲块队列片段,队尾指向#128号空闲块队列片段。其中#25号和#128号空闲块上都是一个空闲块队列片段。
[0048]空闲块的分配方法,当文件系统要向非挥发性存储器上写数据的时候,需要为其分配若干空闲块。在本发明的文件系统的超级块中存储空闲块队列的队头和队尾指针,分别存储空闲块队列的起始空闲块结点和结束空闲块结点所在的空闲块号,当文件系统被挂载之后,超级块将被加载到内存中,内核会定期将其同步到存储设备上,以保证其正确性。
[0049]如图2所示,当请求空闲块时,从内存中的超级块中取出空闲块队列队头指针指向的空闲块片段号#25,则寻找存储在该空闲块号内的空闲块队列片段上第一个非O空闲块结点,假设为图1中97号空闲块结点,该结点并不是该空闲块队列片段上最后一个结点,则将97号空闲块直接分配给文件,修改当前存储着97号空闲块的结点的数据为全O表示已经分配,97号空闲块一旦被分配出去直到被回收之前都不可再用。
[0050]因为每个空闲块号上能存储的空闲块结点数有限,当空闲块结点较多的时候,空闲块队列会被分割成多个空闲块队列片段存储在若干空闲块上。每个存储空闲块号的空闲块队列片段所存储的最后一个结点存储的块号是指示连续的下个空闲块片段所存储的空闲块号位置。图1中存储在25号空闲块队列片段最后一个空闲块结点为空闲块号100,它指示与25号空闲块队列片段相邻的空闲块队列片段存储于100号空闲块上。同样存储于100号空闲块队列片段最后一个结点存储着空闲块号128,指示与100号空闲块相邻的片段存储在128号空闲块上。假设图1中#25号空闲块上除最后一个空闲块结点存储着空闲块号100,其余都为0,此时请求空闲块,则修改空闲队列队首指针为最后一个结点指示的块号(图1中100号)指针,修改完成后把当前25号空闲块分配给请求的文件。
[0051 ]如图3所示,空闲块的回收方法,与分配方法相反。将释放的空闲块号置入超级块的空闲队列队尾指针指示的空闲块上的空闲块队列片段中第一个全O的空闲块结点(如图7801后的第一个O结点),若当前空闲块队列片段未存储满空闲块结点,则找到第一个全O的结点直接存储新释放的块号。若当前空闲块已经存储满空闲块结点,取当前空闲块队列片段中最后一个空闲块结点的空闲块号(假设X),在X上新建空闲块队列片段,初始化此片段上所有空闲块结点为O,把新释放的空闲块号存入第一个全O的空闲块结点,修改内存中超级块中的队尾指针指向X号块。定期再把修改同步到存储在非挥发性存储设备的超级块中。
[0052]上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受所述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
【主权项】
1.一种文件系统级的非挥发性存储器磨损均衡空闲块管理方法,其特征在于,包括空闲块、超级块、数据块、空闲块队列、空闲块队列片段及空闲块结点,具体方法如下: 构建空闲块队列,所述空闲块队列由至少一个空闲块队列片段构成,空闲块队列片段至少存储一个空闲块号或者存储全O结点,每个空闲块号对应唯一空闲块; 构建超级块,超级块位于文件系统内,所述超级块存储空闲块队列的队头指针及队尾指针,所述队头指针及队尾指针分别指示空闲块队列起始空闲块结点所在的空闲块队列片段号,和结束空闲块结点所在的空闲块队列片段号; 当文件系统被挂载时,超级块被加载到内存中; 当要向非挥发性存储器内写入数据时,则请求空闲块,从超级块中取出空闲块队列队头指针指向的空闲块队列片段号,若队头指针指向的空闲块队列片段号为N,若队尾指针指向的空闲块队列片段号为M; 如果M = N,找到第一个非O的空闲块结点,所述空闲块结点对应唯一空闲块号,把空闲块结点中对应的空闲块号的空闲块直接分配给文件,修改当前空闲块结点的值为O,表示已经分配出去,该空闲块号的空闲块一旦被分配出去直到被回收之前都不可再用,分配出去的空闲块称为数据块; 如果M在N,取出队首指针指示的空闲队列片段上第一个非O空闲块结点,若该结点不是空闲块队列片段上最后一个空闲块结点,则直接分配;若该结点是空闲块队列片段上最后一个结点,则暂存当前空闲块队列队首指针指示的空闲块片段的空闲块号K,然后修改空闲块队列队首指针指向最后一个非O结点指示的块号,待修改完成后把最初暂存的K号空闲块分配给文件。2.根据权利要求1所述的非挥发性存储器磨损均衡空闲块释放方法,其特征在于,还包括分配出去的空闲块若被释放,则置于超级块中空闲块队列队尾指针指示的空闲块队列片段上的第一个全O的空闲块结点; 如果超级块中空闲块队列队尾指针指示的空闲块队列片段内无O的空闲块结点,则取当前空闲块队列片段内最后一个空闲块结点,以存储在该空闲块结点内的块号的空闲块作为下一个空闲块队列片段容器,新建空闲块队列片段,初始化空闲块队列片段内的空闲块结点为O,将释放后的空闲块块号存储到弟为ο的空闲块结点,冋时修改超级块中空闲块队列的队尾指针。3.根据权利要求1所述的非挥发性存储器磨损均衡空闲块释放方法,其特征在于,起始和结束的空闲块队列片段号上的空闲块结点如果未存满,则未存储的地方用O填充。
【文档编号】G11C16/34GK105845182SQ201610156467
【公开日】2016年8月10日
【申请日】2016年3月18日
【发明人】吴 民, 吴一民, 田梦达, 安栋, 梁竞雅, 段赫
【申请人】华南理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1