具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。
现有技术对文件的查找是通过文件名字符的对比来进行的,需要对查找路径中每一级目录的所有子目录和文件的名字进行对比字符串,从而找到目标文件,这种查找方式速度比较慢,对系统的性能有影响。而本发明实施例通过在磁盘中存放一种树状数据结构来快速查找访问文件,提高查找效率。同时该树状结构的大小可以根据存储的文件的个数动态增加,最大可能的节省磁盘空间。
如图2所示,是本发明实施例一种磁盘文件的索引节点定位方法流程图,所述方法包括:
步骤201,获取文件对应的数字文件名。
优选的,可以查找预置的映射关系,获取所述文件的原始文件名对应的数字文件名。所述预置的映射关系可以包括利用ASCII码建立的该文件的原始文件名和数字文件名之间的映射关系等。
普通文件名由各种无规律的字符组成,我们可以使用这些字符各自对应的ASCII码来将文件名转换为唯一的数字。例如,文件名为a,那么根据a对应的ASCII码为97,我们可以将文件名转换为097,如果文件名为file,我们可以转换为102 105 108 101,这样,对应任意的文件名,都可以以数字的方式来命名,然后就可以采用上面提到的radix树的方式来组织查找访问。为了使转换后的数字文件名不同,对于本来就是纯数字的文件名,也可以使用各自对应的ASCII码来将文件名转换为对应的唯一的数字文件名。
步骤202,利用数字文件名除以一个预置值,获取对应的商和余数。
优选的,所述预置值可以为所述文件系统中一个数据块包含的最大指针个数,所述预置值包括511。
步骤203,根据商和余数定位文件的索引节点。
优选的,可以根据所述商和余数,查找采用基数树状结构预置存储所述文件的索引节点的基数树,具体利用所述商查找所述基数树的节点级数,然后利用所述余数查找该节点级数中的对应位的指针,从而根据该指针定位所述文件的索引节点。
本发明实施例因为采用获取文件对应的数字文件名;利用数字文件名除以一个预置值,获取对应的商和余数;根据所述商和余数来定位文件的索引节点,以访问所述文件的数据,而现有技术需要对查找路径中每一级目录的所有子目录和文件的名字进行对比字符串,从而找到目标文件的索引节点的方式,由于本发明实施例的查找方案跳跃过了大部分存储节点,所以提高了磁盘文件的查找速度,提升了文件系统的性能
如图3所示,是本发明应用实例采用一种基数(radix)树的树状结构示意图,用来快速查找访问文件。
1.该树状数据结构主要由三部分组成:
1)根节点(root):在磁盘中保留一块固定的数据块(假设为4K),作为树状结构的根节点,root中记录有整个树的高度,以及指向一级节点的指针。
2)节点(node):每个node也是占用一个数据块大小,按照在64位环境中指针占用8个字节来计算,一个4K数据块可以包含有511个指针,以及两个无符号整数(unsigned int)型结构,这两个unsigned int型结构分别记录树高和该节点已使用的指针个数。如果该节点为最底层的节点,则指针指向的是inode,否则指针指向的是下一级的节点(node)。
3)索引节点(inode):每个inode对应一个文件,里面保存有该文件的属性信息,以及指向该文件的数据(data)的指针。
2.节点的插入:
1)如图4所示,是本发明应用实例对象插入前的radix树的树状结构示意图。系统初始化时,保留一块数据块作为root节点,同时该root指向一个分配的数据块node1,树高初始化为1。
2)如图5所示,是本发明应用实例对象插入后的radix树的树状结构示意图。当有文件写入时,node1的第一个指针指向该文件的inode,第二个指针指向第二个文件的inode,一直到第511个指针也指向了相应的inode。当再有新的文件写入时,分配一个数据块node2,root的指针指向这个新分配的node2,同时node2的第一个指针指向原来的node1,第二个指针指向另一个新分配的数据块node3,node3的指针再指向新的文件的inode。依次类推,树的结构随着文件的增加而相应增大。
3)文件的inode始终处于叶子节点上。
3.inode的查找过程:
1)假设树高为H,文件名为N;
2)如果H=1,则说明文件个数不超过511个,直接找到的node的相应的偏移指针即可。
3)如果H>1,则N/511,通过除得的商在一级node中找到相应的指针,同时H-1;
如果此时H=1,说明已找到最后一级node,那么余数就是要查找的文件对应的inode。
4)如果H仍然大于1,则N继续整除511,除得的商指向相应的node,H-1。
5)重复3、4步,直到H=1,则找到相应的inode。
例1:树高H=1,N=300,直接通过node节点找到第300个inode。
例2:树高H=2,N=1000,则1000/511,商为1,余数为489,那么,通过一级节点的第二个指针找到二级节点,该二级节点的第489个指针指向的是要查找的文件的inode。
如图6所示,是本发明应用实例两个文件的radix树的树状结构示意图。如果只有文件1和文件1000的话,那么根据最大的文件名可以确定该树应该有两级节点,也就是说树的高度为2。那么文件1就放在第一个二级节点的1号索引位置(因为1/511=0,1%511=1),文件1000放在第二个二级节点的489号索引位置(因为1000/511=1,1000%511=489)。而其他的索引中都是空的,没有存放指针,直到有新的文件(1~1000之间)加入进来。如果新的文件名大于511*511,则表示该树目前的高度不够,需要扩展。那么,申请一个新的节点node4,由root指向node4,再由node4的0号索引指向原来的node2,这样可以实现树的动态扩展。
4.节点的删除:
节点中有记录该节点已使用的指针个数的字段,当指针对应的inode被删除时,该指针会被清空,当该节点的所有指针都清空时,该节点可以回收,释放占用的空间。
本发明实施例技术方案采用radix树状结构来查找索引节点定位文件,有效的提高了查找速度,减少了响应时间,对整个系统的性能尤其是读大量文件的操作有好的提升效果。采用radix树状的结构来快速直接定位文件inode,提高文件的查找访问速度。同时,树状结构的大小根据系统存储的文件的数量的增加而动态增加,节省磁盘空间。本发明实施例技术方案中的数据结构有很多种,除了以上提到的radix树以外还有很多其他的数据结构。关键是查找访问方法中利用文件名为数字的特点进行除法运算,根据除得的商和余数就可以直接定位到文件的inode。对于普通文件名的文件系统,在普通文件名到数字文件名的映射转换方式上,除了ASCII码的方式外,还可以有其他类似的方法,例如在ASCII码基础上做的一些算法变化等等,关键是普通文件名与数字文件名之间是一一对应的关系。
如图7所示,是本发明实施例一种磁盘文件的索引节点定位装置结构示意图,所述装置30包括:
获取单元301,用于获取文件对应的数字文件名。
除法单元302,用于利用数字文件名除以一个预置值,获取对应的商和余数。
定位单元303,用于根据商和余数定位文件的索引节点。
优选的,所述获取单元301,可以用于查找预置的映射关系,获取所述文件的文件名对对应的数字文件名。所述预置的映射关系包括利用ASCII码建立的映射关系。所述预置值为所述文件系统中一个数据块包含的最大指针个数,所述预置值包括511。所述定位单元303,用于根据所述商和余数,查找采用基数树状结构预置存储所述文件的索引节点的基数树,具体利用所述商查找所述基数树的节点级数,然后利用所述余数查找该节点级数中的对应位的指针,从而根据该指针定位所述文件的索引节点。
本发明实施例因为采用获取文件对应的数字文件名;利用数字文件名除以一个预置值,获取对应的商和余数;根据所述商和余数定位文件的索引节点,以访问所述文件的数据,所以对于现有技术需要对查找路径中每一级目录的所有子目录和文件的名字进行对比字符串,从而找到目标文件的索引节点的方式,由于本发明实施例的查找方案跳跃过了大部分存储节点,所以提高了磁盘文件的查找速度,提升了文件系统的性能。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括上述全部或部分步骤,所述的存储介质,如:ROM/RAM、磁盘、光盘等。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。