一种目录存储和映射方法及系统的制作方法

文档序号:6376752阅读:284来源:国知局
专利名称:一种目录存储和映射方法及系统的制作方法
技术领域
本发明涉及目录存储和映射技术,特别是在多个虚拟环境和本地操作系统中的对目录进行存储和在它们之间进行目录映射的方法及系统。
背景技术
随着计算机技术的发展,操作系统中存储的目录数量普遍增长较快。当某个操作系统中存在大量的目录时,如何存储和管理这些目录信息成为一大问题。现有技术中常见的一种方式是将系统中的所有目录信息以原始路径信息的方式直接存储,即存储大量例如“C: \windows\winsxs\catalog”、“C: \windows\system”之类的表示路径的字符串。但显而易见的,这样的存储方式造成了大量存储空间的浪费,例如上述两个原始路径信息字符串的例子中,“C:\wind0ws\”这些相同的字符串就浪费了很多存储空间。由于操作系统中的原始路径信息字符串存在大量的重复字符,因此,浪费的存储空间将会达到惊人的数量。此夕卜,还存在需要将多个系统中的路径信息进行存储的情境,例如同时存在本地真实操作系 统和多个虚拟环境的情况下,对路径信息的存储空间需求将会加倍的增长。因此,对于存储空间紧张的情境下,现有的存储方式已不能满足需求。现有技术中对于某一目录的寻址,通常采用对其原始路径信息字符串全文匹配的方式来进行。例如要寻找目录“C: \windows\winsxs\catalog”,则需要在已存储的包括所有的原始路径信息的全部字符串中去全文匹配“C: \windows\winsxs\catalog”。显然这种匹配的速度是相当慢的,难以满足高速处理的需要。现有技术中对于不同系统环境之间的目录映射,通常采用的是建立静态的目录映射表,将每个源系统中的目录的原始路径信息映射为目标系统中的目录的原始路径信息,从前述的现有技术可以知道,这将导致存储空间浪费巨大,速度低下。当存在多个虚拟环境和本地操作系统中的目录需要相互映射时,这样的目录映射表将会加倍扩大,这个问题将会体现地尤为严重。本文中所述的多个系统、源系统、目标系统均不限于真实的操作系统或者是虚拟的环境,只要是存在目录信息需要存储或者映射的软件环境,均可以作为本发明中的上述系统的任何一个。

发明内容
有鉴于此,本发明提出一种目录的存储和映射方法及系统,能够提闻目录存储的空间利用率,提高目录映射的速度。为达到上述目的,本发明提出技术方案如下一种目录存储方法,其特征在于包括以下步骤101、获取输入的一个原始路径信息;102、将所述原始路径信息依据路径分隔符分解成至少一个目录名;103、由根目录的目录名开始判断,是否该根目录名已经存入根目录节点中,若是则针对其子目录的目录名继续判断是否已存入子目录节点中,若是未存储过的新目录名则;104、分配新目录节点的存储空间,将该目录名存入目录节点;105、设置该目录节点的父目录指针,指向其父目录节点;106、设置该目录节点的同级目录指针,使得该目录节点与其同级目录节点构成为一颗平衡二叉树;107、设置该目录节点的父目录节点的子节点指针,指向该目录节点所在平衡二叉树的树根位置的目录节点;108、继续跳回步骤103直至判断完该原始路径信息包括的末级子目录的目录名;109、继续跳回步骤101获取下一个原始路径信息,直至全部原始路径信息都处理完毕;·110、在多个系统的路径信息都存储完毕之后,在每个目录节点中设置其映射目录指针指向该目录节点在其他系统中对应的目录节点。其中的同级目录指针包括同级左指针和同级右指针。其中映射目录指针包括至少一个指针,分别指向至少一个目标系统中的对应目录节点。本发明还提出了一种目录存储系统,其特征在于包括路径分解模块,用于获取输入的一个原始路径信息,将所述原始路径信息依据路径分隔符分解成至少一个目录名;存储分配模块,用于由根目录的目录名开始判断,是否该根目录名已经存入根目录节点中,若是则针对其子目录的目录名继续判断是否已存入子目录节点中,若是未存储过的新目录名则;分配新目录节点的存储空间,将该目录名存入目录节点;指针设置模块,用于设置该目录节点的父目录指针,指向其父目录节点;设置该目录节点的同级目录指针,使得该目录节点与其同级目录节点构成为一颗平衡二叉树;设置该目录节点的父目录节点的子节点指针,指向该目录节点所在平衡二叉树的树根位置的目录节点;映射设置模块,用于当路径分解模块、存储分配模块以及指针设置模块将全部原始路径信息都处理完毕时,在多个系统的路径信息都存储完毕之后,在每个目录节点中设置其映射目录指针指向该目录节点在其他系统中对应的目录节点。本发明还提出了一种目录映射方法,其特征在于包括以下步骤201、获取输入的源系统中的原始路径信息;202、将所述原始路径信息依据路径分隔符分解成至少一个目录名;203、由分解得到的根目录名开始判断,是否与根目录节点的目录名相同;如果相同则比较分解得到的下一级子目录名与子目录节点的目录名是否相同;如果分解得到的目录名与目录节点中存储的目录名不相同,则在该目录节点的同级目录节点构成的平衡二叉树中查找具有该目录名的目录节点;通过逐级目录判断,寻址到该原始路径信息分解得到的末级子目录的目录名对应的目录节点;204、从该原始路径信息分解得到的末级子目录的目录名对应的目录节点中获取映射目录指针,寻址到该目录节点在目标系统中对应的目录节点;
205、通过目标系统中对应的目录节点获取其父目录指针,逐级寻址到其父目录节点直至根目录节点;206、在目标系统中根据父目录指针寻址找到的目录节点形成了一个链,将各目录节点的目录名通过目录分隔符串联起来,即得到在目标系统中的原始路径信息;207、输出目标系统中的原始路径信息。其中的同级目录指针包括同级左指针和同级右指针。其中映射目录指针包括至少一个指针,分别指向至少一个目标系统中的对应目录节点。 本发明还提出了一种目录映射系统,其特征在于,包括路径分解模块,用于获取输入的源系统中的原始路径信息;将所述原始路径信息依据路径分隔符分解成至少一个目录名;节点查找模块,用于由分解得到的根目录名开始判断,是否与根目录节点的目录名相同;如果相同则比较分解得到的下一级子目录名与子目录节点的目录名是否相同;如果分解得到的目录名与目录节点中存储的目录名不相同,则在该目录节点的同级目录节点构成的平衡二叉树中查找具有该目录名的目录节点;通过逐级目录判断,寻址到该原始路径信息分解得到的末级子目录的目录名对应的目录节点;映射寻址模块,用于从该原始路径信息分解得到的末级子目录的目录名对应的目录节点中获取映射目录指针,寻址到该目录节点在目标系统中对应的目录节点;通过目标系统中对应的目录节点获取其父目录指针,逐级寻址到其父目录节点直至根目录节点;路径输出模块,用于将目标系统中根据父目录指针寻址找到的目录节点形成了一个链,将各目录节点的目录名通过目录分隔符串联起来,即得到在目标系统中的原始路径信息;输出目标系统中的原始路径信息。


图I为本发明中的目录节点构成示意2为本发明中的“windows”目录节点构成示意3为本发明中的目录节点关系不意图
具体实施例方式本发明提供了一种目录存储系统。该系统包括,目录节点,以及对应目录节点之间的指针指向关系以及映射关系。每一目录节点的数据包括有目录名,父目录指针,子目录指针,同级目录指针,映射目录指针。目录名即为原始路径信息中被路径分隔符分开的各段字符串。这里的路径分隔符可以是“\”,也可以是“/”,或者其他的符号被操作系统用于分隔目录,视不同的操作系统而不同。例如原始路径信息可以是例如“C: \windows\winsxs\catalog”之类的字符串,其中包括的目录名有 “C: ”、“windows”、“winsxs”、“catalog”。父目录指针指向该目录节点的父目录节点。例如,目录节点“windows”的父目录指针是指向目录节点“C: ”的。由于目录节点“C: ”是根目录没有父目录,因此其父目录指针为空。
同级目录指针通常用于存在至少两个同级目录存在的情况。例如当目录“C:”下,存在三个同级目录,即“wind0WS”、“piOgram”、“Zip”时。同级目录的各个节点是以平衡二叉树的方式组织存储的,所以对于每个目录节点其同级目录指针为两个,即同级左指针和同级右指针,同级左指针指向位于该目录节点左侧分支的目录节点,同级右指针指向位于该目录节点右侧分支的目录节点,如果当某个目录节点位于树的末端不再有左侧和/或右侧分支节点时,将其相应的指针设置为空。每个目录节点的目录名作为键值,同级目录的节点间按这个键值有序左节点<根节点<右节点。例如,“windows”目录节点的左分支节点可能是与其同级的目录节点“program”,右分支节点可能是与其同级的目录节点“zip”。在添加新目录节点和删除已 有目录节点的过程中,通过调整,动态保持二叉树的平衡性,即对于树中的每个节点,其左子树和右子树的高度差绝对值不大于I。维持平衡二叉树的特性,保证同级目录的查找复杂度为O(Ign)。子目录指针用于指向该目录节点的子目录节点。当然如果该目录节点的子目录有至少两个的时候,这些子目录之间也为同级目录,是以平衡二叉树的方式组织存储的。该目录节点的子目录指针则指向位于平衡二叉树的树根位置的子目录节点。例如在前述的例子中,“windows”目录节点即位于其同级目录二叉树的树根位置,因此“C:”目录节点的子目录节点将会指向“windows”目录节点。采用上述方法,将系统中的全部路径均构成多个目录节点,并且所述目录节点之间通过父目录指针、子目录指针连接不同层级之间的目录节点,通过同级左指针和同级右指针连接同级目录之间的关系。形成一个多层级的平衡二叉树群。映射目录指针用于指向该目录节点在其他系统中对应的目录节点。例如,源系统为真实操作系统,该目录的原始路径为“C: \windows\winsxs ”,目标系统为虚拟操作系统,根据预定的对应关系可以得知,其在虚拟操作系统中对应的目录原始路径应该为(VROOT) \shadows\shasxs”,则在真实操作系统下目录名为“winsxs”的目录节点,其映射目录指针应该指向虚拟操作系统中的“shasxs”目录节点。此外,对于存在多个系统的路径需要映射的时候,可以设置多个映射指针,例如第一映射指针指向第一目标系统中原始路径为“@(VR00T) \shadows\shasxs”的目录节点“shasxs”,第二映射指针指向第二目标系统中原始路径为“@(iR00T) \ios\iosxs”的目录节点“ iosxs”,这样对于多个系统中的路径需要映射时,不必构建多个庞大的映射表,而仅需要增设一个指针地址即可。在源系统中对于一个目录节点的一次寻址即可获得其在多个目标系统中对应的目录节点。首先通过实施例一说明在操作系统中构建路径存储方法。101、获取输入的一个原始路径信息。例如“C: \windows\winsxs”之类的字符串。102、对每个原始路径信息,将所述原始路径信息依据路径分隔符分解成至少一个目录名。例如“C: ”、“windows”、“winsxs”。103、由根目录的目录名开始判断,是否该根目录名已经存入根目录节点中,若是则针对其子目录的目录名继续判断是否已存入子目录节点中,若是未存储过的新目录名则,104、分配新目录节点的存储空间,将该目录名存入目录节点。例如,从根目录开始处理,先判断根目录“C: ”是否已经存入目录节点,如果还没有,则将“ C: ”这一根目录名存入目录节点。该目录节点,其目录名即为“ C: ”。
105、设置该目录节点的父目录指针,指向其父目录节点。由于“C:”是根目录没有父目录,其父目录指针为空;而如果当前处理的是“windows”目录节点,其父目录指针则应当指向“C:”目录节点的地址。106、设置该目录节点的同级目录指针。若该目录节点不存在其他的同级目录节点时,即将该目录节点作为平衡二叉树的树根位置。同级左指针和同级右指针均设置为空。当该目录节点存在其他的同级目录节点时。调用平衡二叉树的插入操作,根据该目录的目录名为序将其插入到适当的位置上,并且调用平衡二叉树的调整操作,保持二叉树的平衡性,即对于树中的每个节点,其左子树和右子树的高度差绝对值不大于I。107、设置该目录节点的父目录节点的子节点指针。由于在步骤103. 3中同级目录的平衡二叉树的树根位置可能发生了变化,例如,可能由“program”目录节点调整为了“windows”目录节点,因此在这里设置其父目录节点“C: ”的子节点指针为指向调整后的位于平衡二叉树的树根位置的子目录节点即“windows”目录节点。当然,如果当前处理的目录节点就是根目录节点“C: ”,它没有父目录节点,自然也不必设置其父目录节点的子节点 指针了。108、继续跳回步骤103直至判断完该原始路径信息包括的末级子目录的目录名。109、继续跳回步骤101处理下一个原始路径信息,直至全部原始路径信息都处理完毕。110、在多个系统的路径信息都存储完毕之后,在每个目录节点中设置其映射目录指针指向该目录节点在其他系统中对应的目录节点。本发明还提出了一种目录存储系统,其特征在于包括路径分解模块,用于获取输入的一个原始路径信息,将所述原始路径信息依据路径分隔符分解成至少一个目录名;存储分配模块,用于由根目录的目录名开始判断,是否该根目录名已经存入根目录节点中,若是则针对其子目录的目录名继续判断是否已存入子目录节点中,若是未存储过的新目录名则;分配新目录节点的存储空间,将该目录名存入目录节点;指针设置模块,用于设置该目录节点的父目录指针,指向其父目录节点;设置该目录节点的同级目录指针,使得该目录节点与其同级目录节点构成为一颗平衡二叉树;设置该目录节点的父目录节点的子节点指针,指向该目录节点所在平衡二叉树的树根位置的目录节点;映射设置模块,用于当路径分解模块、存储分配模块以及指针设置模块将全部原始路径信息都处理完毕时,在多个系统的路径信息都存储完毕之后,在每个目录节点中设置其映射目录指针指向该目录节点在其他系统中对应的目录节点。以下的实施例二用于说明由源系统的路径映射获得目标系统的路径的方法。201、获取输入的源系统中的原始路径信息,例如“C: \windows\winsxs”之类的字符串。202、将所述原始路径信息依据路径分隔符分解成至少一个目录名,例如“C:”、“windows,,、“winsxs ”。203、由分解得到的根目录名开始判断,是否与根目录节点的目录名相同。例如,先比较分解得到的根目录名“C:”是否与根目录节点的目录名“C:”相同,如果相同则比较分解得到的下一级子目录名“windows”与目录节点“C: ”的子目录指针指向的子目录节点“windows”的目录名是否相同。如果仍相同则继续比较下一级目录。如果分解得到的目录名与目录节点中存储的目录名不相同,则在该目录节点的同级目录节点构成的平衡二叉树中查找具有该目录名的目录节点。例如,当寻找“windows”的子目录“winsxs”的目录名时,由于“windows”目录节点的子目录指针指向的是其多个子目录构成的平衡二叉树中位于二叉树树根位置的子目录节点“system”,因此,其目录名与“winsxs”显然不符,于是根据两者目录名的顺序可以得知目录节点“winsxs”位于目录节点“system”的右侧分支上,因此通过目录节点“system”的同级右指针向右侧分支寻址就能够找到。当然,如果这课平衡二叉树节点较多的话,有可能需要多次进行上述的比较寻址才能找到。通过逐级目录判断,寻址到该原始路径信息分解得到的末级子目录的目录名对应的目录节点。204、从该原始路径信息分解得到的末级子目录的目录名对应的目录节点中获取 映射目录指针,寻址到该目录节点在目标系统中对应的目录节点。 例如从“winsxs”目录节点中获取映射目录指针,寻址找到其在目标系统中对应的目录节点“shasxs”。205、通过目标系统中对应的目录节点获取其父目录指针,逐级寻址到其父目录节点直至根目录节点。例如,通过目标系统中的目录节点“shasxs”的父目录指针,寻址找到其在目标系统中的父目录节点“shadows”,再通过目录节点“shadows”的父目录指针,寻址其父目录,直至其根目录(VR00T) ”。206、在目标系统中根据父目录指针寻址找到的目录节点形成了一个链,将各目录节点的目录名通过目录分隔符串联起来,即得到在目标系统中的原始路径信息。在上述例子中即可得到原始路径信息“O (VR00T) \shadows\shasxs”。207、输出目标系统中的原始路径信息。通过实施例二中的方法即可由源系统中的路径信息快速映射得到目标系统中的路径信息。尽管上述实施例中,是以一个目标系统作为示例,但在多个目标系统需要映射时,仅需在每个目录节点中设置多个映射指针即可通过一次寻址获得多个映射结果。可以获得非常优异的存储空间利用率和运算速度。本发明还提出了一种目录映射系统,其特征在于,包括路径分解模块,用于获取输入的源系统中的原始路径信息;将所述原始路径信息依据路径分隔符分解成至少一个目录名;节点查找模块,用于由分解得到的根目录名开始判断,是否与根目录节点的目录名相同;如果相同则比较分解得到的下一级子目录名与子目录节点的目录名是否相同;如果分解得到的目录名与目录节点中存储的目录名不相同,则在该目录节点的同级目录节点构成的平衡二叉树中查找具有该目录名的目录节点;通过逐级目录判断,寻址到该原始路径信息分解得到的末级子目录的目录名对应的目录节点;映射寻址模块,用于从该原始路径信息分解得到的末级子目录的目录名对应的目录节点中获取映射目录指针,寻址到该目录节点在目标系统中对应的目录节点;通过目标系统中对应的目录节点获取其父目录指针,逐级寻址到其父目录节点直至根目录节点;
路径输出模块,用于将目标系统中根据父目录指针寻址找到的目录节点形成了一个链,将各目录节点的目录名通过目录分隔符串联起来,即得到在目标系统中的原始路径信息;输出目标系统中的原始路径信息。由此可见,本发明提出的技术方案解决了路径信息存储空间浪费巨大、寻址速度较慢、映射表查找效率低下等技术问题,取得了极好的技术效果,在本领域中具有广泛的应用前景。本发明的实施方式中的方法和/或模块均可以通过软件、固件、硬件中的一种或多种的组合来实现,并不限于使用某一种方式来实现。以上的实施方式均为示例性的描述,并非对本发明保护范围的限定。·
权利要求
1.一种目录存储方法,其特征在于包括以下步骤 .101、获取输入的一个原始路径信息; .102、将所述原始路径信息依据路径分隔符分解成至少一个目录名; .103、由根目录的目录名开始判断,是否该根目录名已经存入根目录节点中,若是则针对其子目录的目录名继续判断是否已存入子目录节点中,若是未存储过的新目录名则; .104、分配新目录节点的存储空间,将该目录名存入目录节点; .105、设置该目录节点的父目录指针,指向其父目录节点; .106、设置该目录节点的同级目录指针,使得该目录节点与其同级目录节点构成为一颗平衡二叉树; .107、设置该目录节点的父目录节点的子节点指针,指向该目录节点所在平衡二叉树的树根位置的目录节点; .108、继续跳回步骤103直至判断完该原始路径信息包括的末级子目录的目录名。
2.如权利要求I所述的目录存储方法,其特征在于步骤108之后还包括以下步骤 .109、继续跳回步骤101获取下一个原始路径信息,直至全部原始路径信息都处理完毕。
3.如权利要求2所述的目录存储方法,其特征在于步骤109之后还包括以下步骤 .110、在多个系统的路径信息都存储完毕之后,在每个目录节点中设置其映射目录指针指向该目录节点在其他系统中对应的目录节点。
4.如权利要求1-3之一所述的目录存储方法,其特征在于,其中的同级目录指针包括同级左指针和同级右指针,同级左指针指向位于该目录节点左侧分支的目录节点,同级右指针指向位于该目录节点右侧分支的目录节点。
5.如权利要求1-4之一所述的目录存储方法,其特征在于,其中映射目录指针包括至少一个指针,分别指向至少一个目标系统中的对应目录节点。
6.一种目录存储系统,其特征在于包括 路径分解模块,用于获取输入的一个原始路径信息,将所述原始路径信息依据路径分隔符分解成至少一个目录名; 存储分配模块,用于由根目录的目录名开始判断,是否该根目录名已经存入根目录节点中,若是则针对其子目录的目录名继续判断是否已存入子目录节点中,若是未存储过的新目录名则;分配新目录节点的存储空间,将该目录名存入目录节点; 指针设置模块,用于设置该目录节点的父目录指针,指向其父目录节点;设置该目录节点的同级目录指针,使得该目录节点与其同级目录节点构成为一颗平衡二叉树;设置该目录节点的父目录节点的子节点指针,指向该目录节点所在平衡二叉树的树根位置的目录节占. 映射设置模块,用于当路径分解模块、存储分配模块以及指针设置模块将全部原始路径信息都处理完毕时,在多个系统的路径信息都存储完毕之后,在每个目录节点中设置其映射目录指针指向该目录节点在其他系统中对应的目录节点。
7.一种目录映射方法,其特征在于包括以下步骤 .201、获取输入的源系统中的原始路径信息; .202、将所述原始路径信息依据路径分隔符分解成至少一个目录名;.203、由分解得到的根目录名开始判断,是否与根目录节点的目录名相同;如果相同则比较分解得到的下一级子目录名与子目录节点的目录名是否相同;如果分解得到的目录名与目录节点中存储的目录名不相同,则在该目录节点的同级目录节点构成的平衡二叉树中查找具有该目录名的目录节点; 通过逐级目录判断,寻址到该原始路径信息分解得到的末级子目录的目录名对应的目录节点; . 204、从该原始路径信息分解得到的末级子目录的目录名对应的目录节点中获取映射目录指针,寻址到该目录节点在目标系统中对应的目录节点;. 205、通过目标系统中对应的目录节点获取其父目录指针,逐级寻址到其父目录节点直至根目录节点; .206、在目标系统中根据父目录指针寻址找到的目录节点形成了一个链,将各目录节点的目录名通过目录分隔符串联起来,即得到在目标系统中的原始路径信息; .207、输出目标系统中的原始路径彳目息。
8.如权利要求7所述的目录映射方法,其特征在于,步骤203中的在该目录节点的同级目录节点构成的平衡二叉树中查找具有该目录名的目录节点,是根据目录名的顺序,向该平衡二叉树的左侧分支或者右侧分支查找具有该目录名的目录节点。
9.如权利要求7或8所述的目录映射方法,其特征在于,其中映射目录指针包括至少一个指针,分别指向至少一个目标系统中的对应目录节点。
10.一种目录映射系统,其特征在于,包括 路径分解模块,用于获取输入的源系统中的原始路径信息;将所述原始路径信息依据路径分隔符分解成至少一个目录名; 节点查找模块,用于由分解得到的根目录名开始判断,是否与根目录节点的目录名相同;如果相同则比较分解得到的下一级子目录名与子目录节点的目录名是否相同;如果分解得到的目录名与目录节点中存储的目录名不相同,则在该目录节点的同级目录节点构成的平衡二叉树中查找具有该目录名的目录节点;通过逐级目录判断,寻址到该原始路径信息分解得到的末级子目录的目录名对应的目录节点; 映射寻址模块,用于从该原始路径信息分解得到的末级子目录的目录名对应的目录节点中获取映射目录指针,寻址到该目录节点在目标系统中对应的目录节点;通过目标系统中对应的目录节点获取其父目录指针,逐级寻址到其父目录节点直至根目录节点; 路径输出模块,用于将目标系统中根据父目录指针寻址找到的目录节点形成了一个链,将各目录节点的目录名通过目录分隔符串联起来,即得到在目标系统中的原始路径信息;输出目标系统中的原始路径信息。
全文摘要
本发明提出一种目录的存储和映射方法及系统,采用了将路径信息分解为目录节点分别存储,节省了存储空间。为每个目录节点提供父目录指针,子目录指针,同级目录指针,映射目录指针。使得每个目录节点与其父目录、子目录有序地链接起来,便于双向查找,同级目录之间构成平衡二叉树,缩短了查询时间。映射目录指针的设置能够最快获得多个目标系统中对应的目录节点。本发明能够提高目录存储的空间利用率,提高查询速度和获得目录映射的效率。
文档编号G06F17/30GK102902734SQ201210335459
公开日2013年1月30日 申请日期2012年9月12日 优先权日2012年9月12日
发明者李瑞平 申请人:北京伸得纬科技有限公司, 国际伸得纬有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1