虚拟内存区域的查询、遍历方法及装置的制作方法

文档序号:6359059阅读:161来源:国知局
专利名称:虚拟内存区域的查询、遍历方法及装置的制作方法
技术领域
本发明实施例涉及通信技术,尤其涉及一种虚拟内存区域的查询、遍历方法及装置。
背景技术
目前,Linux技术通常采用红黑树形式查询虚拟内存区域(virtual memory area, 以下简称vma)。具体来说,对于查询第η个vma的过程来说,查询函数find_Vma获得内存描述信息(mm)读信号量,从地址m开始,确认地址m对应的vma是否在缓存vma的地址范围内,若是,也即本次查询命中缓存,则通过访问缓存vma来查询地址m对应的vma,并释放读信号量,若否,从根节点开始通过常规方式遍历红黑树来查询地址m对应的vma,并释放读信号量。由于查询函数fincLvma在没有命中缓存时,必须从根节点开始通过遍历的方式查询vma,因此,现有技术的查询效率较低。

发明内容
本发明实施例提供一种虚拟内存区域的查询、遍历方法及装置,以提高vma的查询效率。本发明实施例提供了一种虚拟内存区域的查询方法,包括确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻 vma的地址范围;若是,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma 对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。本发明实施例还提供了一种虚拟内存区域的遍历方法,包括获得内存描述信息mm的读信号量,确定查询地址η对应的vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围; 若是,则通过线索红黑树的节点上的线索查询所述查询地址η对应的vma,释放读信号量,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;将当前的缓存vma的地址范围更新为所述查询地址η对应的vma的地址范围 (vma_start, vm_ end),并将查询地址n+1更新为所述查询地址η对应的vma的vma_end, 其中,所述vma_Start为所述查询地址η对应的vma的的首地址,所述Vma_end为所述查询地址η对应的vma的尾地址;获得mm的读信号量,确定所述查询地址n+1对应的vma是当前的缓存vma的后相邻vma,通过线索红黑树的节点上的线索查询所述当前缓存vma的后继节点,并根据所述后继节点查询所述查询地址n+1对应的vma ;循环重复上述步骤,直到遍历至少一部分地址空间。本发明实施例还提供了一种虚拟内存区域的查询装置,包括确定模块,用于确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;线索查询模块,用于所述确定模块确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树上的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。本发明实施例还提供了一种虚拟内存区域的遍历装置,包括确定模块,用于确定与查询地址η对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;线索查询模块,用于所述确定模块确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;缓存更新模块,用于根据所述线索查询模块查询的查询地址η对应的vma,将当前的缓存vma更新为所述查询地址η对应的vma的地址范围(vma_start,vma_end),并将查询地址n+1更新为所述查询地址η对应的vma的vma_end,其中,所述vma_start为所述查询地址η对应的vma的的首地址,所述vma_end为所述查询地址η对应的vma的尾地址。本发明实施例通过预先对地址空间中的vma设置vma相邻范围,将原红黑树扩展为线索红黑树,在现有技术确认查询地址对应的vma是否是缓存vma的基础上,增加了缓存 vma的相邻范围的确认,采用本发明实施例提供的遍历vma的方法可以保证在遍历地址空间时,相邻vma的确认总能得到满足,也就是说,确定查询地址对应的vma总是是缓存vma 的相邻vma,通过线索红黑树的节点上的线索总能查询所述查询地址对应的vma,因此,提高了 vma查询的缓存命中率,提升了 vma的查询效率。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例一提供的虚拟内存区域的查询方法的流程图;图2为本发明实施例二提供的虚拟内存区域的查询方法的流程图;图3为本发明实施例二提供的vma相邻范围的结构示意图;图4为本发明实施例二提供的线索红黑树的结构示意图;图5为本发明实施例一提供的虚拟内存区域的遍历方法流程图;图6为本发明实施例二提供的虚拟内存区域的遍历方法流程图7为本发明实施例一提供的虚拟内存区域的查询装置结构示意图;图8为本发明实施例二提供的虚拟内存区域的查询装置结构示意图;图9为本发明实施例二提供的虚拟内存区域的遍历装置结构示意图;图10为本发明实施例二提供的虚拟内存区域的遍历装置结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。现有技术通常以红黑树查询方式查找指定地址对应的vma,下面以查询地址0对应的vma为例具体说明现有技术所述的一种vma的查询方法,具体包括确认地址0对应的vma是否在缓存的vma地址范围内;若是,则通过访问缓存的vma查询地址0对应的vma ;若否,则从根节点开始通过常规方式遍历红黑树查询地址0对应的vma。若要遍历η个vma,即查询η个vma,则需要根据查询地址0对应的vma更新当前的缓存vma,具体来说是将当前的缓存vma的地址范围更新为地址0对应的vma的地址范围 (vma_start,vma_end),并将对地址1对应的vma (下一个vma)的查询地址更新为地址0对应的vma (上一个vma)的vma_end ;因此,在确认地址1对应的vma是否是缓存的vma (地址0对应的vma)时,肯定可以确认地址1对应的vma不在缓存的vma (地址0对应的vma) 地址范围内,依次类推,对于后续新的地址对应的vma的查询,也可以确定后续新的地址对应的vma不在更新后的缓存的vma(上一个vma)的地址范围内,也就是说缓存命中率几乎为0,因此,每一次都需要从根节点通过常规方式去遍历红黑树的形式查询新的地址对应的 vma0从上述现有技术公开的技术方案中可以看出,发明人认为现有技术中至少存在如下问题现有技术使用红黑树查询方式遍历vma时,每一次查询新地址对应的vma,都将当前缓存vma更新为上一个查询地址对应的vma,因此在查询下一个新的vma时,可以确认下一个新的vma肯定不在更新后的缓存的vma地址范围内,也就是说,对vma红黑树中的访问缓存命中率几乎为0,若需要遍历η个vma,实际上就是η次从根节点通过常规方式查询红黑树的方式查询vma的过程,由于每次从根节点通过常规方式遍历红黑树的形式查询vma 的时间复杂度是O(Iogn),所以整个遍历的时间复杂度变成Ofclogn),无疑增加了遍历vma 的时间复杂度,因此,现有技术现有技术使用红黑树查询方式遍历vma的查询效率较低。鉴于上述现有技术中所存在的问题,本发明实施例提供如下的技术方案,可以提高访问缓存的命中率,从而提高vma的查询效率。图1为本发明虚拟内存区域的查询方法实施例一的流程图,如图1所示,本实施例的方法可以包括步骤101、确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内;
其中,缓存vma的相邻范围包括缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围。步骤102、若是,则通过线索红黑树的节点上的线索查询所述vma ;其中,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。在上述步骤中,若确定所述查询地址对应的vma刚好是缓存vma,则直接访问缓存 vma查询所述查询地址对应的vma ;若不是,则进一步确认所述查询地址对应的vma是否在缓存vma的相邻范围内,若确认所述查询地址对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索找到缓存vma的前驱节点,并根据所述前驱节点查询所述查询地址对应的vma ;若确认所述查询地址对应的vma是缓存vma的后相邻vma,则通过线索红黑树的节点上的线索找到缓存vma的后继节点,并根据所述后继节点查询所述查询地址对应的vma。本实施例,通过缓存vma的相邻范围的确认并将原红黑树扩展为线索红黑树,在现有技术确认查询地址对应的vma是否是缓存vma的基础上,增加了缓存vma的相邻范围的确认,若确定查询地址对应的vma是缓存vma的相邻vma,则通过线索红黑树的节点上的线索查找所述查询地址对应的vma ;相较于现有技术只通过缓存vma的确认的方法,在一定程度上提高访问缓存的命中率,进而提高了 vma的查询效率。下面采用一个具体的实施例对上述图1所示技术方案进行详细说明。图2为本发明虚拟内存区域的查询方法实施例二的流程图,图3为本发明实施例二提供的vma相邻范围的结构示意图,图4为本发明实施例二提供的线索红黑树的结构示意图,如图2 4所示,本实施例的方法可以包括步骤201、获得内存描述信息(mm)的读信号量,确认地址η对应的vma是否在缓存的vma的地址范围内,若是,则执行步骤202,若否,则执行步骤203。步骤202、通过访问缓存的vma直接查询所述地址η对应的vma,并释放读信号量。步骤203、确认地址η对应的vma是否在缓存vma的相邻vma范围内,若是,则执行步骤204,若否,则执行步骤205。在本步骤中,本发明实施例二提供的所述缓存vma的相邻范围包括所述缓存vma 的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围。所述缓存vma的相邻范围的示意图如图3所示,因为vma地址范围的半包含性,即vma_end不在该vma的地址范围内,所以在设置缓存vma的相邻范围时,将缓存vma的前相邻vma的前相邻vma的尾地址作为该缓存vma相邻范围的起始地址,并将缓存vma的后相邻vma的尾地址作为该缓存 vma相邻范围的结束地址。当需要确定与查询地址η对应的vma是否在缓存vma的相邻范围内时,可以通过确认所述查询地址η是否在缓存vma的相邻vma的地址范围内,若所述查询地址η是在缓存vma的的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址η对应的vma为缓存vma的前相邻vma ;若所述查询地址η在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址η对应的vma为缓存 vma的后相邻vma。这里需要指出,通过确认查询地址η是否在缓存vma的相邻vma的地址范围内来确认缓存vma的相邻vma的方法只是其中的一个实现方案,但缓存vma的相邻范围的确认并不局限于此方案。步骤204、通过线索红黑树的节点上的线索查询所述地址η对应的vma。在本步骤中,本发明实施例二提供的所述线索红黑树的结构示意图如图4所示, 通过在原系统中的vma红黑树上的每一个vma节点处增加指向其前驱节点和后继节点的的线索,将原红黑树扩展为线索红黑树,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。若确定与查询地址η对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索找到缓存的vma的前驱节点,并根据所述前驱节点查询地址η对应的vma,并释放读信号量;若确定地址η对应的vma是缓存的vma的后相邻,则通过线索红黑树的节点上的的线索找到缓存的vma的后继节点,并根据所述后继节点查询地址η对应的vma,并释放
读信号量。步骤205、从根节点通过常规方式遍历线索红黑树查询地址η对应的vma,并释放
读信号量。本实施例,通过预先设置缓存vma的相邻范围并将原红黑树扩展为线索红黑树, 在现有技术确认查询地址对应的vma是否是缓存vma的基础上,增加了缓存vma的相邻范围的确认,若确定查询地址对应的vma是缓存vma的相邻vma,则通过线索红黑树的节点上的线索查找所述查询地址对应的vma ;相较于现有技术只通过缓存vma的确认的方法,在一定程度上提高访问缓存的命中率,进而提高了 vma的查询效率,同时,在本实施例中,由于查询所述地址η对应的vma时要释放读信号量,因此,保证了在查询vma时可以对所述vma 进行读操作以外的其他操作,如对所述vma可以修改。图5为本发明虚拟内存区域的遍历方法实施例一的流程图,如图5所示,本实施例的方法可以包括步骤501、获得内存描述信息mm的读信号量,确定查询地址η对应的vma是否在缓存vma的相邻范围内。其中,缓存vma的相邻范围包括缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围。步骤502、若是,则通过线索红黑树的节点上的线索查询所述查询地址η对应的 vma,释放读信号量,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。在本步骤中,若确定所述查询地址对应的vma刚好是缓存vma,则直接访问缓存 vma查询所述查询地址对应的vma ;若不是,则进一步确认所述查询地址η对应的vma是否在缓存vma的相邻范围内,若确认所述查询地址η对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索找到缓存vma的前驱节点,并根据所述前驱节点查询所述查询地址η对应的vma ;若确认所述查询地址η对应的vma是缓存vma的后相邻vma,则通过线索红黑树的节点上的线索找到缓存vma的后继节点,并根据所述后继节点查询所述查询地址η对应的vma。步骤503、将当前的缓存vma的地址范围更新为所述查询地址η对应的vma的地址范围(vma_start,vma_end),并将地址n+1对应的vma的查询地址更新为所述查询地址η对应的vma的vma_end,其中,所述vma_start为所述查询地址η对应的vma的的首地址, 所述Vma_end为所述查询地址η对应的vma的尾地址。步骤504、获得mm的读信号量,确定所述查询地址n+1对应的vma是当前的缓存 vma的后相邻vma,通过线索红黑树的节点上的线索查询所述当前缓存vma的后继节点,并根据所述后继节点查询所述查询地址n+1对应的vma ;循环重复上述步骤,直到遍历至少一部分地址空间。本实施例,通过预先设置缓存vma的相邻范围并将原红黑树扩展为线索红黑树, 在确定查询地址η对应的vma是缓存vma的相邻vma,通过线索红黑树的节点上的线索查询所述查询地址η对应的vma,并将当前缓存vma更新为所述地址η对应的vma,将对地址 n+1对应的vma的查询地址更新为更新后的缓存vma(地址η对应的vma)的地址范围,由于缓存vma相邻范围的设置,毫无疑问,可以确定地址n+1对应的vma是缓存vma (地址η对应vma)的后相邻vma,重复步骤505,依次类推,下一个地址对应的vma总是缓存vma (上一个地址对应的vma)的后相邻vma,因此,都可以通过线索红黑树的节点上的线索查询所述 vma,相较于现有技术对访问缓存命中率技术为0,本发明实施例提供的vma遍历方法对访问缓存的命中率几乎为百分之百,因次,提高了 vma遍历的效率。另外,本发明实施例的应用不限于在遍历全部vma的时候,对于地址空间中任意连续的地址,遍历其vma都可以通过本发明实施例提供的方法,如预先对地址空间中连续的地址n+m对应的vma进行相邻vma范围的设置,vma相邻范围的设置如上所述,这里不再赘述,在进行vma遍历时,首先通过本发明实施例提供的技术方案查询所述地址η对应的 vma,然后更新访问缓存的vma和下一个地址对应vma的查找地址,由于下一个地址对应的 vma总是缓存vma(上一个vma)的后相邻vma,总是可以通过线索红黑树的节点上的线索查询所述连续地址n+m对应的每一个vma,直至对连续地址n+m对应的vma的遍历结束。图6为本发明虚拟内存区域的遍历方法实施例二的流程图,如图6所示,本实施例的方法可以包括步骤601、查询函数获得内存描述信息(mm)读信号量,从地址0开始,确认地址0 对应的vma是否在缓存的vma地址范围内,若是,执行步骤602,若否,则执行步骤603。步骤602、通过访问缓存vma直接查询地址0对应的vma,并释放读信号量。步骤603、确认地址0对应的vma是否在缓存的vma的相邻范围内,若是,则执行步骤604,若否,则执行步骤605。在本步骤中,本发明实施例二提供的所述缓存vma的相邻范围包括所述缓存vma 的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围,所述缓存vma的相邻范围的示意图如图3所示,这里不再赘述。步骤604、通过线索红黑树的节点上的线索查询所述查询地址0对应的vma。在本步骤中,所使用的线索红黑树的结构示意图如图4所示,这里不再赘述。若确定与查询地址0对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索找到缓存的vma的前驱节点,并根据所述前驱节点查询地址0对应的vma,并释放读信号量;若确定地址0对应的vma是缓存的vma的后相邻,则通过线索红黑树的节点上的的线索找到缓存的vma的后继节点,并根据所述后继节点查询地址0对应的vma,并释放读信号量。
10
步骤605、从根节点通过常规方式遍历线索红黑树查询地址0对应的vma,并释放
读信号量。步骤606、将当前缓存的vma更新为地址0对应的vma,并更新地址1对应的vma 的查找地址,即将缓存vma地址范围更新为地址0对应的vma的地址范围(vma_Start,vma_ end),将地址1对应的vma的查找地址更新为地址0对应的vma的vma_end。步骤607、获得mm的读信号量,确定地址1对应的vma是当前的缓存vma的后相邻 vma0步骤608、通过线索红黑树的节点上的线索查询缓存vma的后继节点,并根据所述后继节点查询地址1对应的vma,释放读信号量。循环重复上述步骤,直到遍历完整个地址空间。从上述步骤可知,由于预先对地址空间中的vma设置了 vma相邻范围,并在线索红黑树上的每一个vma节点处增加线索,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针,因此,在确认地址1对应的vma是否是更新后的缓存vma的的相邻 vma时,因为更新后的缓存vma已经为地址0对应的vma,毫无疑问的可以确定,地址1对应的vma是地址0对应的vma的后相邻,此时,通过线索红黑树的节点上的线索找到缓存 vma (地址0对应的vma)的后继节点,并通过该后继节点查询地址1对应的vma ;之后,根据地址1对应vma将访问缓存更新为地址1对应的vma的地址范围,并对地址2对应的vma 的查找地址更新为地址1对应的vma的vma_end,进行地址2对应的vma的查询,依此类推, 若要遍历η个vma,由于vma相邻范围的设置和线索红黑树的扩展,使得对缓存的vma的相邻vma的确认总能得到满足,并通过线索红黑树的节点上的线索都可以查询下一个vma。但是,现有技术在通过红黑树查询方式遍历vma时,只确认查询地址对应的vma是否是缓存vma的地址范围,由于更新后的缓存vma总是查询地址对应的vma的上一个vma, 毫无疑问可以确认查询地址对应的vma肯定不在更新后的缓存的vma地址范围内,也就是说,对vma红黑树中的访问缓存命中率几乎为0,没有充分利用访问缓存的命中效率。若通过红黑树形式遍历η个vma,由于访问缓存的命中率为0,因此,η个vma的查询过程实际上是η次从根节点通过常规方式查询红黑树的形式查询vma的过程,由于每次从根节点通过常规方式遍历红黑树的形式查询vma的时间复杂度是O(Iogn),所以整个遍历的时间复杂度变成Ofclogn),无疑增加了遍历vma的时间复杂度。因此,应用本发明实施例提供虚拟内存的遍历方法在遍历地址空间时,由于缓存的vma的相邻vma的确认总能得到满足,在缓存vma的整个相邻范围内都可命中,通过线索红黑树的节点上的线索总是可以查找到所述查询地址对应的vma,从而将整个遍历过程的时间复杂度降低到O(n),提升了 vma的查询效率,同时,应用本发明实施例提供的方法在查询每一个vma的过程中都要释放读信号量,由此也保证了在遍历过程中需要对vma进行读操作以外的其他操作时,都可以用本发明实施例提供的方法进行vma遍历。图7为本发明虚拟内存区域的查询装置实施例一的结构示意图,如图7所示,本实施例的装置可以包括确定模块11、线索查询模块12,其中,确定模块11,用于确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,缓存vma的相邻范围包括缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
线索查询模块12,用于所述确定模块11确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。本实施例的装置可以用于执行图1所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。图8为本发明虚拟内存区域的查询装置实施例二的结构示意图,如图8所示,本实施例的装置在图7所示装置的基础上,进一步地,还可以包括存储模块13,该存储模块13, 用于存储所述缓存vma的相邻范围,所述缓存vma的相邻范围的起始地址为所述缓存vma 的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。确定模块11,可以具体包括第一确定单元111和第二确定单元112, 其中,第一确定单元111,用于若所述查询地址在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址对应的vma为缓存vma的前相邻vma ;第二确定单元112,用于若所述查询地址在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址对应的vma为缓存vma的后相邻vma。线索查询模块12,可以具体包括第一查询单元121和第二查询单元122,其中,第一查询单元121,用于若所述第一确定单元确定与查询地址对应的vma是前相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma ;第二查询单元122,用于若所述第二确定单元确定与查询地址对应的vma是后相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的后继节点,并根据所述后继节点查找所述vma。本实施例的装置可以用于执行图2所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。图9为本发明虚拟内存区域的遍历装置实施例一的结构示意图,如图9所示,本实施例的装置可以包括确定模块21、线索查询模块22、缓存更新模块23,其中确定模块21,用于确定与查询地址η对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;线索查询模块22,用于所述确定模块21确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;缓存更新模块23,用于根据所述线索查询模块22查询的查询地址η对应的vma, 将当前的缓存vma更新为所述查询地址η对应的vma的地址范围(vma_start,vma_end), 并将查询地址n+1更新为所述查询地址η对应的vma的vma_end,其中,所述vma_start为所述查询地址η对应的vma的的首地址,所述Vma_end为所述查询地址η对应的vma的尾地址。本实施例的装置可以用于执行图5所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。图10为本发明虚拟内存区域的遍历装置实施例二的结构示意图,如图10所示,本实施例的装置在图9所示装置的基础上,进一步地,还可以包括存储模块M,该存储模块M,用于存储所述缓存vma的相邻范围,所述缓存vma的相邻范围的起始地址为所述缓存 vma的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。确定模块21,具体进一步包括第一确定单元211和第二确定单元212,其中,所述第一确定单元211,用于若所述查询地址η在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址η对应的vma为缓存vma的前相邻vma ;所述第二确定单元212,用于若所述查询地址η在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址η对应的vma为缓存vma的后相邻vma。线索查询模块22,具体进一步包括第一查询单元221和第二查询单元222 ;其中,所述第一查询单元221,用于若所述第一确定单元211确定与查询地址η对应的vma是前相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma。所述第二查询单元222,用于若所述第二确定单元212确定与查询地址η对应的vma是后相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的后继节点,并根据所述后继节点查找所述vma。本实施例的装置可以具体用于执行图6所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
1.一种虚拟内存区域的查询方法,其特征在于,包括确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma 的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;若是,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。
2.根据权利要求1所述的方法,其特征在于,所述缓存vma的相邻范围的起始地址为所述缓存vma的前相邻vma的前相邻vma的尾地址,所述缓存vma的相邻范围的结束地址为所述缓存vma的后相邻vma的尾地址。
3.根据权利要求2所述的方法,其特征在于,所述确定与查询地址对应的vma是否在缓存vma的相邻范围内,包括若所述查询地址在所述缓存vma的相邻范围的起始地址和所述缓存vma的相邻范围的结束地址之间,则确定所述查询地址对应的vma在所述缓存vma的相邻范围内。
4.根据权利要求3所述的方法,其特征在于,所述确定与查询地址对应的vma是否在缓存vma的相邻范围内,包括若所述查询地址在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址对应的vma为缓存vma的前相邻vma ;若所述查询地址在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址对应的vma为缓存vma的后相邻vma。
5.根据权利要求4所述的方法,其特征在于,所述通过线索红黑树的节点上的线索查询所述vma,包括若与查询地址对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索查找所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma ;若与查询地址对应的vma是缓存vma的后相邻vma,则通过线索红黑树的节点上的线索查找所述缓存vma的后继节点,并根据所述后继节点查找所述vma。
6.一种虚拟内存区域的遍历方法,其特征在于,包括获得内存描述信息mm的读信号量,确定查询地址η对应的vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;若是,则通过线索红黑树的节点上的线索查询所述查询地址η对应的vma,释放读信号量,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;将当前的缓存vma的地址范围更新为所述查询地址η对应的vma的地址范围(vma_ start, vma_end),并将查询地址n+1更新为所述查询地址η对应的vma的vma_end,其中,所述vma_Start为所述查询地址η对应的vma的首地址,所述Vma_end为所述查询地址η对应的vma的尾地址;获得mm的读信号量,确定所述查询地址n+1对应的vma是当前的缓存vma的后相邻 vma,通过线索红黑树的节点上的线索查询所述当前缓存vma的后继节点,并根据所述后继节点查询所述查询地址n+1对应的vma ;循环重复上述步骤,直到遍历至少一部分地址空间。
7.根据权利要求6所述的方法,其特征在于,所述缓存vma的相邻范围的起始地址为所述缓存vma的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。
8.根据权利要求7所述的方法,其特征在于,所述确定与查询地址η对应的vma是否在缓存vma的相邻范围内,包括若所述查询地址η在所述缓存vma的相邻范围的起始地址和所述缓存vma的相邻范围的结束地址之间,则确定所述查询地址η对应的vma在所述缓存vma的相邻范围内。
9.根据权利要求8所述的方法,其特征在于,所述确定与查询地址η对应的vma是否在缓存vma的相邻范围内,包括若所述查询地址η在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址η对应的vma为缓存vma的前相邻vma ;若所述查询地址η在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址η对应的vma为缓存vma的后相邻vma。
10.根据权利要求9所述的方法,其特征在于,所述通过线索红黑树的节点上的线索查询所述vma,包括若与查询地址η对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索查找所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma ;若与查询地址η对应的vma是缓存vma的后相邻vma,则通过线索红黑树的节点上的线索,查找所述缓存vma的后继节点,并根据所述后继节点查找所述vma。
11.一种虚拟内存区域的查询装置,其特征在于,所述装置包括确定模块,用于确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;线索查询模块,用于所述确定模块确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。
12.根据权利要求11所述的装置,其特征在于,还包括存储模块,用于存储所述缓存vma的相邻范围,所述缓存vma的相邻范围的起始地址为所述缓存vma的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。
13.根据权利要求11所述的装置,其特征在于,所述确定模块包括第一确定单元,用于若所述查询地址在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址对应的vma为缓存vma的前相邻 vma ;第二确定单元,用于若所述查询地址在缓存vma的尾地址和缓存vma的后相邻的vma 的尾地址之间,则确定所述查询地址对应的vma为缓存vma的后相邻vma。
14.根据权利要求13所述的装置,其特征在于,所述线索查询模块包括第一查询单元,用于若所述第一确定单元确定与查询地址对应的vma是前相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma ;第二查询单元,用于若所述第二确定单元确定与查询地址对应的vma是后相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的后继节点,并根据所述后继节点查找所述vma。
15.一种虚拟内存区域的遍历装置,其特征在于,所述装置包括确定模块,用于确定与查询地址η对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;线索查询模块,用于所述确定模块确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;缓存更新模块,用于根据所述线索查询模块查询的查询地址η对应的vma,将当前的缓存vma更新为所述查询地址η对应的vma的地址范围(vma_start,vma_end),并将查询地址n+1更新为所述查询地址η对应的vma的vma_end,其中,所述vma_start为所述查询地址η对应的vma的的首地址,所述vma_end为所述查询地址η对应的vma的尾地址。
16.根据权利要求15所述的装置,其特征在于,还包括存储模块,用于存储所述缓存vma的相邻范围,所述缓存vma的相邻范围的起始地址为所述缓存vma的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。
17.根据权利要求16所述的装置,其特征在于,所述确定模块包括第一确定单元,用于若所述查询地址η在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址η对应的vma为缓存vma的前相邻vma ;第二确定单元,用于若所述查询地址η在缓存vma的尾地址和缓存vma的后相邻的vma 的尾地址之间,则确定所述查询地址η对应的vma为缓存vma的后相邻vma。
18.根据权利要求17所述的装置,其特征在于,所述线索查询模块包括第一查询单元,用于若所述第一确定单元确定与查询地址η对应的vma是前相邻vma, 则根据所述线索红黑树的节点上的线索查找到所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma ;第二查询单元,用于若所述第二确定单元确定与查询地址η对应的vma是后相邻vma, 则根据所述线索红黑树的节点上的线索查找到所述缓存vma的后继节点,并根据所述后继节点查找所述vma。
全文摘要
本发明实施例公开了一种虚拟内存区域的查询、遍历方法及装置,其中,所述方法包括确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;若是,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。本发明实施例还公开了一种虚拟内存区域的遍历方法,因为缓存vma的相邻范围的确认总能得到满足,提高了访问缓存的命中率,实现整个vma遍历的时间复杂度为O(n),从而提高了vma的查询效率。
文档编号G06F12/08GK102369520SQ201180002151
公开日2012年3月7日 申请日期2011年9月2日 优先权日2011年9月2日
发明者黄强 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1