CN102369520A - 虚拟内存区域的查询、遍历方法及装置 - Google Patents

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

Info

Publication number
CN102369520A
CN102369520A CN2011800021515A CN201180002151A CN102369520A CN 102369520 A CN102369520 A CN 102369520A CN 2011800021515 A CN2011800021515 A CN 2011800021515A CN 201180002151 A CN201180002151 A CN 201180002151A CN 102369520 A CN102369520 A CN 102369520A
Authority
CN
China
Prior art keywords
vma
address
buffer memory
adjacent
clue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011800021515A
Other languages
English (en)
Other versions
CN102369520B (zh
Inventor
黄强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN102369520A publication Critical patent/CN102369520A/zh
Application granted granted Critical
Publication of CN102369520B publication Critical patent/CN102369520B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1021Hit rate improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Memory System (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种虚拟内存区域的查询、遍历方法及装置,其中,所述方法包括:确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;若是,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。本发明实施例还公开了一种虚拟内存区域的遍历方法,因为缓存vma的相邻范围的确认总能得到满足,提高了访问缓存的命中率,实现整个vma遍历的时间复杂度为O(n),从而提高了vma的查询效率。

Description

虚拟内存区域的查询、遍历方法及装置
技术领域
本发明实施例涉及通信技术,尤其涉及一种虚拟内存区域的查询、遍历方法及装置。
背景技术
目前,Linux技术通常采用红黑树形式查询虚拟内存区域(virtualmemory area,以下简称:vma)。
具体来说,对于查询第n个vma的过程来说,查询函数find_vma获得内存描述信息(mm)读信号量,从地址m开始,确认地址m对应的vma是否在缓存vma的地址范围内,若是,也即本次查询命中缓存,则通过访问缓存vma来查询地址m对应的vma,并释放读信号量,若否,从根节点开始通过常规方式遍历红黑树来查询地址m对应的vma,并释放读信号量。
由于查询函数find_vma在没有命中缓存时,必须从根节点开始通过遍历的方式查询vma,因此,现有技术的查询效率较低。
发明内容
本发明实施例提供一种虚拟内存区域的查询、遍历方法及装置,以提高vma的查询效率。
本发明实施例提供了一种虚拟内存区域的查询方法,包括:
确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
若是,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。
本发明实施例还提供了一种虚拟内存区域的遍历方法,包括:
获得内存描述信息mm的读信号量,确定查询地址n对应的vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
若是,则通过线索红黑树的节点上的线索查询所述查询地址n对应的vma,释放读信号量,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;
将当前的缓存vma的地址范围更新为所述查询地址n对应的vma的地址范围(vma_start,vm_ end),并将查询地址n+1更新为所述查询地址n对应的vma的vma_end,其中,所述vma_start为所述查询地址n对应的vma的的首地址,所述vma_end为所述查询地址n对应的vma的尾地址;
获得mm的读信号量,确定所述查询地址n+1对应的vma是当前的缓存vma的后相邻vma,通过线索红黑树的节点上的线索查询所述当前缓存vma的后继节点,并根据所述后继节点查询所述查询地址n+1对应的vma;
循环重复上述步骤,直到遍历至少一部分地址空间。
本发明实施例还提供了一种虚拟内存区域的查询装置,包括:
确定模块,用于确定与查询地址对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
线索查询模块,用于所述确定模块确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树上的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。
本发明实施例还提供了一种虚拟内存区域的遍历装置,包括:
确定模块,用于确定与查询地址n对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
线索查询模块,用于所述确定模块确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;
缓存更新模块,用于根据所述线索查询模块查询的查询地址n对应的vma,将当前的缓存vma更新为所述查询地址n对应的vma的地址范围(vma_start,vma_end),并将查询地址n+1更新为所述查询地址n对应的vma的vma_end,其中,所述vma_start为所述查询地址n对应的vma的的首地址,所述vma_end为所述查询地址n对应的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。
若要遍历n个vma,即查询n个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,因此,每一次都需要从根节点通过常规方式去遍历红黑树的形式查询新的地址对应的vma。
从上述现有技术公开的技术方案中可以看出,发明人认为现有技术中至少存在如下问题:
现有技术使用红黑树查询方式遍历vma时,每一次查询新地址对应的vma,都将当前缓存vma更新为上一个查询地址对应的vma,因此在查询下一个新的vma时,可以确认下一个新的vma肯定不在更新后的缓存的vma地址范围内,也就是说,对vma红黑树中的访问缓存命中率几乎为0,若需要遍历n个vma,实际上就是n次从根节点通过常规方式查询红黑树的方式查询vma的过程,由于每次从根节点通过常规方式遍历红黑树的形式查询vma的时间复杂度是O(logn),所以整个遍历的时间复杂度变成O(nlogn),无疑增加了遍历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)的读信号量,确认地址n对应的vma是否在缓存的vma的地址范围内,若是,则执行步骤202,若否,则执行步骤203。
步骤202、通过访问缓存的vma直接查询所述地址n对应的vma,并释放读信号量。
步骤203、确认地址n对应的vma是否在缓存vma的相邻vma范围内,若是,则执行步骤204,若否,则执行步骤205。
在本步骤中,本发明实施例二提供的所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围。所述缓存vma的相邻范围的示意图如图3所示,因为vma地址范围的半包含性,即vma_end不在该vma的地址范围内,所以在设置缓存vma的相邻范围时,将缓存vma的前相邻vma的前相邻vma的尾地址作为该缓存vma相邻范围的起始地址,并将缓存vma的后相邻vma的尾地址作为该缓存vma相邻范围的结束地址。
当需要确定与查询地址n对应的vma是否在缓存vma的相邻范围内时,可以通过确认所述查询地址n是否在缓存vma的相邻vma的地址范围内,若所述查询地址n是在缓存vma的的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的前相邻vma;若所述查询地址n在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的后相邻vma。
这里需要指出,通过确认查询地址n是否在缓存vma的相邻vma的地址范围内来确认缓存vma的相邻vma的方法只是其中的一个实现方案,但缓存vma的相邻范围的确认并不局限于此方案。
步骤204、通过线索红黑树的节点上的线索查询所述地址n对应的vma。
在本步骤中,本发明实施例二提供的所述线索红黑树的结构示意图如图4所示,通过在原***中的vma红黑树上的每一个vma节点处增加指向其前驱节点和后继节点的的线索,将原红黑树扩展为线索红黑树,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。
若确定与查询地址n对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索找到缓存的vma的前驱节点,并根据所述前驱节点查询地址n对应的vma,并释放读信号量;若确定地址n对应的vma是缓存的vma的后相邻,则通过线索红黑树的节点上的的线索找到缓存的vma的后继节点,并根据所述后继节点查询地址n对应的vma,并释放读信号量。
步骤205、从根节点通过常规方式遍历线索红黑树查询地址n对应的vma,并释放读信号量。
本实施例,通过预先设置缓存vma的相邻范围并将原红黑树扩展为线索红黑树,在现有技术确认查询地址对应的vma是否是缓存vma的基础上,增加了缓存vma的相邻范围的确认,若确定查询地址对应的vma是缓存vma的相邻vma,则通过线索红黑树的节点上的线索查找所述查询地址对应的vma;相较于现有技术只通过缓存vma的确认的方法,在一定程度上提高访问缓存的命中率,进而提高了vma的查询效率,同时,在本实施例中,由于查询所述地址n对应的vma时要释放读信号量,因此,保证了在查询vma时可以对所述vma进行读操作以外的其他操作,如对所述vma可以修改。
图5为本发明虚拟内存区域的遍历方法实施例一的流程图,如图5所示,本实施例的方法可以包括:
步骤501、获得内存描述信息mm的读信号量,确定查询地址n对应的vma是否在缓存vma的相邻范围内。
其中,缓存vma的相邻范围包括缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围。
步骤502、若是,则通过线索红黑树的节点上的线索查询所述查询地址n对应的vma,释放读信号量,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针。
在本步骤中,若确定所述查询地址对应的vma刚好是缓存vma,则直接访问缓存vma查询所述查询地址对应的vma;若不是,则进一步确认所述查询地址n对应的vma是否在缓存vma的相邻范围内,若确认所述查询地址n对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索找到缓存vma的前驱节点,并根据所述前驱节点查询所述查询地址n对应的vma;若确认所述查询地址n对应的vma是缓存vma的后相邻vma,则通过线索红黑树的节点上的线索找到缓存vma的后继节点,并根据所述后继节点查询所述查询地址n对应的vma。
步骤503、将当前的缓存vma的地址范围更新为所述查询地址n对应的vma的地址范围(vma_start,vma_end),并将地址n+1对应的vma的查询地址更新为所述查询地址n对应的vma的vma_end,其中,所述vma_start为所述查询地址n对应的vma的的首地址,所述vma_end为所述查询地址n对应的vma的尾地址。
步骤504、获得mm的读信号量,确定所述查询地址n+1对应的vma是当前的缓存vma的后相邻vma,通过线索红黑树的节点上的线索查询所述当前缓存vma的后继节点,并根据所述后继节点查询所述查询地址n+1对应的vma;
循环重复上述步骤,直到遍历至少一部分地址空间。
本实施例,通过预先设置缓存vma的相邻范围并将原红黑树扩展为线索红黑树,在确定查询地址n对应的vma是缓存vma的相邻vma,通过线索红黑树的节点上的线索查询所述查询地址n对应的vma,并将当前缓存vma更新为所述地址n对应的vma,将对地址n+1对应的vma的查询地址更新为更新后的缓存vma(地址n对应的vma)的地址范围,由于缓存vma相邻范围的设置,毫无疑问,可以确定地址n+1对应的vma是缓存vma(地址n对应vma)的后相邻vma,重复步骤505,依次类推,下一个地址对应的vma总是缓存vma(上一个地址对应的vma)的后相邻vma,因此,都可以通过线索红黑树的节点上的线索查询所述vma,相较于现有技术对访问缓存命中率技术为0,本发明实施例提供的vma遍历方法对访问缓存的命中率几乎为百分之百,因次,提高了vma遍历的效率。
另外,本发明实施例的应用不限于在遍历全部vma的时候,对于地址空间中任意连续的地址,遍历其vma都可以通过本发明实施例提供的方法,如预先对地址空间中连续的地址n+m对应的vma进行相邻vma范围的设置,vma相邻范围的设置如上所述,这里不再赘述,在进行vma遍历时,首先通过本发明实施例提供的技术方案查询所述地址n对应的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,并释放读信号量。
步骤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的后相邻vma。
步骤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的查询,依此类推,若要遍历n个vma,由于vma相邻范围的设置和线索红黑树的扩展,使得对缓存的vma的相邻vma的确认总能得到满足,并通过线索红黑树的节点上的线索都可以查询下一个vma。
但是,现有技术在通过红黑树查询方式遍历vma时,只确认查询地址对应的vma是否是缓存vma的地址范围,由于更新后的缓存vma总是查询地址对应的vma的上一个vma,毫无疑问可以确认查询地址对应的vma肯定不在更新后的缓存的vma地址范围内,也就是说,对vma红黑树中的访问缓存命中率几乎为0,没有充分利用访问缓存的命中效率。若通过红黑树形式遍历n个vma,由于访问缓存的命中率为0,因此,n个vma的查询过程实际上是n次从根节点通过常规方式查询红黑树的形式查询vma的过程,由于每次从根节点通过常规方式遍历红黑树的形式查询vma的时间复杂度是O(logn),所以整个遍历的时间复杂度变成O(nlogn),无疑增加了遍历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,用于确定与查询地址n对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
线索查询模块22,用于所述确定模块21确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;
缓存更新模块23,用于根据所述线索查询模块22查询的查询地址n对应的vma,将当前的缓存vma更新为所述查询地址n对应的vma的地址范围(vma_start,vma_end),并将查询地址n+1更新为所述查询地址n对应的vma的vma_end,其中,所述vma_start为所述查询地址n对应的vma的的首地址,所述vma_end为所述查询地址n对应的vma的尾地址。
本实施例的装置可以用于执行图5所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。
图10为本发明虚拟内存区域的遍历装置实施例二的结构示意图,如图10所示,本实施例的装置在图9所示装置的基础上,进一步地,还可以包括:存储模块24,该存储模块24,用于存储所述缓存vma的相邻范围,所述缓存vma的相邻范围的起始地址为所述缓存vma的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。
确定模块21,具体进一步包括:第一确定单元211和第二确定单元212,其中,所述第一确定单元211,用于若所述查询地址n在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的前相邻vma;所述第二确定单元212,用于若所述查询地址n在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的后相邻vma。
线索查询模块22,具体进一步包括:第一查询单元221和第二查询单元222;其中,所述第一查询单元221,用于若所述第一确定单元211确定与查询地址n对应的vma是前相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma。所述第二查询单元222,用于若所述第二确定单元212确定与查询地址n对应的vma是后相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的后继节点,并根据所述后继节点查找所述vma。
本实施例的装置可以具体用于执行图6所示方法实施例的方法,其实现原理和技术效果类似,此处不再赘述。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (18)

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的读信号量,确定查询地址n对应的vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
若是,则通过线索红黑树的节点上的线索查询所述查询地址n对应的vma,释放读信号量,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;
将当前的缓存vma的地址范围更新为所述查询地址n对应的vma的地址范围(vma_start,vma_end),并将查询地址n+1更新为所述查询地址n对应的vma的vma_end,其中,所述vma_start为所述查询地址n对应的vma的首地址,所述vma_end为所述查询地址n对应的vma的尾地址;
获得mm的读信号量,确定所述查询地址n+1对应的vma是当前的缓存vma的后相邻vma,通过线索红黑树的节点上的线索查询所述当前缓存vma的后继节点,并根据所述后继节点查询所述查询地址n+1对应的vma;
循环重复上述步骤,直到遍历至少一部分地址空间。
7.根据权利要求6所述的方法,其特征在于,所述缓存vma的相邻范围的起始地址为所述缓存vma的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。
8.根据权利要求7所述的方法,其特征在于,所述确定与查询地址n对应的vma是否在缓存vma的相邻范围内,包括:
若所述查询地址n在所述缓存vma的相邻范围的起始地址和所述缓存vma的相邻范围的结束地址之间,则确定所述查询地址n对应的vma在所述缓存vma的相邻范围内。
9.根据权利要求8所述的方法,其特征在于,所述确定与查询地址n对应的vma是否在缓存vma的相邻范围内,包括:
若所述查询地址n在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的前相邻vma;
若所述查询地址n在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的后相邻vma。
10.根据权利要求9所述的方法,其特征在于,所述通过线索红黑树的节点上的线索查询所述vma,包括:
若与查询地址n对应的vma是缓存vma的前相邻vma,则通过线索红黑树的节点上的线索查找所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma;
若与查询地址n对应的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.一种虚拟内存区域的遍历装置,其特征在于,所述装置包括:
确定模块,用于确定与查询地址n对应的虚拟内存区域vma是否在缓存vma的相邻范围内,所述缓存vma的相邻范围包括所述缓存vma的至少一个前相邻vma的地址范围和至少一个后相邻vma的地址范围;
线索查询模块,用于所述确定模块确定所述vma在所述缓存vma的相邻范围内,则通过线索红黑树的节点上的线索查询所述vma,所述节点为所述缓存vma对应的节点,所述线索为指向所述线索红黑树上每个节点的前驱节点和后继节点的指针;
缓存更新模块,用于根据所述线索查询模块查询的查询地址n对应的vma,将当前的缓存vma更新为所述查询地址n对应的vma的地址范围(vma_start,vma_end),并将查询地址n+1更新为所述查询地址n对应的vma的vma_end,其中,所述vma_start为所述查询地址n对应的vma的的首地址,所述vma_end为所述查询地址n对应的vma的尾地址。
16.根据权利要求15所述的装置,其特征在于,还包括:
存储模块,用于存储所述缓存vma的相邻范围,所述缓存vma的相邻范围的起始地址为所述缓存vma的前相邻vma的前相邻vma的尾地址,所述相邻vma范围的结束地址为所述缓存vma的后相邻vma的尾地址。
17.根据权利要求16所述的装置,其特征在于,所述确定模块包括:
第一确定单元,用于若所述查询地址n在缓存vma的前相邻vma的前相邻vma的尾地址和缓存vma的前相邻的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的前相邻vma;
第二确定单元,用于若所述查询地址n在缓存vma的尾地址和缓存vma的后相邻的vma的尾地址之间,则确定所述查询地址n对应的vma为缓存vma的后相邻vma。
18.根据权利要求17所述的装置,其特征在于,所述线索查询模块包括:
第一查询单元,用于若所述第一确定单元确定与查询地址n对应的vma是前相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的前驱节点,并根据所述前驱节点查找所述vma;
第二查询单元,用于若所述第二确定单元确定与查询地址n对应的vma是后相邻vma,则根据所述线索红黑树的节点上的线索查找到所述缓存vma的后继节点,并根据所述后继节点查找所述vma。
CN201180002151.5A 2011-09-02 2011-09-02 虚拟内存区域的查询、遍历方法及装置 Active CN102369520B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2011/079293 WO2012149723A1 (zh) 2011-09-02 2011-09-02 虚拟内存区域的查询、遍历方法及装置

Publications (2)

Publication Number Publication Date
CN102369520A true CN102369520A (zh) 2012-03-07
CN102369520B CN102369520B (zh) 2014-02-19

Family

ID=45761452

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180002151.5A Active CN102369520B (zh) 2011-09-02 2011-09-02 虚拟内存区域的查询、遍历方法及装置

Country Status (4)

Country Link
US (1) US9003120B2 (zh)
EP (1) EP2743833B1 (zh)
CN (1) CN102369520B (zh)
WO (1) WO2012149723A1 (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102880555A (zh) * 2012-07-28 2013-01-16 福州大学 面向实时***的内存算法
CN104035822A (zh) * 2014-05-28 2014-09-10 中国科学院计算技术研究所 一种低开销的高效内存去冗余方法及***
CN104346294A (zh) * 2013-07-31 2015-02-11 华为技术有限公司 基于多级缓存的数据读/写方法、装置和计算机***
CN104424117A (zh) * 2013-08-20 2015-03-18 华为技术有限公司 内存物理地址查询方法和装置
CN106648932A (zh) * 2016-12-19 2017-05-10 四川长虹电器股份有限公司 基于Python扩展模块的多进程共享***及方法
CN111090614A (zh) * 2019-12-03 2020-05-01 深信服科技股份有限公司 Rom快照的读取方法、装置和存储介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105843750A (zh) * 2016-03-22 2016-08-10 深圳森格瑞通信有限公司 一种提升线性数据结构查询效率的方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101162469A (zh) * 2007-11-09 2008-04-16 清华大学 基于快照的细粒度文件与目录版本管理方法
US20100223432A1 (en) * 2009-02-27 2010-09-02 Red Hat, Inc. Memory sharing among computer programs
CN102024020A (zh) * 2010-11-04 2011-04-20 曙光信息产业(北京)有限公司 一种分布式文件***中高效的元数据访存方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100594497C (zh) * 2008-07-31 2010-03-17 中国科学院计算技术研究所 一种实现网络查询缓存的***和查询方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101162469A (zh) * 2007-11-09 2008-04-16 清华大学 基于快照的细粒度文件与目录版本管理方法
US20100223432A1 (en) * 2009-02-27 2010-09-02 Red Hat, Inc. Memory sharing among computer programs
CN102024020A (zh) * 2010-11-04 2011-04-20 曙光信息产业(北京)有限公司 一种分布式文件***中高效的元数据访存方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
《宿州学院学报》 20100831 张海洋 "红黑树在Linux虚拟内存区域管理中的应用" 50-53 1-18 第25卷, 第8期 *
张海洋: ""红黑树在Linux虚拟内存区域管理中的应用"", 《宿州学院学报》, vol. 25, no. 8, 31 August 2010 (2010-08-31), pages 50 - 53 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102880555A (zh) * 2012-07-28 2013-01-16 福州大学 面向实时***的内存算法
CN102880555B (zh) * 2012-07-28 2016-02-24 福州大学 面向实时***的内存算法
CN104346294A (zh) * 2013-07-31 2015-02-11 华为技术有限公司 基于多级缓存的数据读/写方法、装置和计算机***
CN104346294B (zh) * 2013-07-31 2017-08-25 华为技术有限公司 基于多级缓存的数据读/写方法、装置和计算机***
US9864696B2 (en) 2013-07-31 2018-01-09 Huawei Technologies Co., Ltd. Multilevel cache-based data read/write method and apparatus, and computer system
CN104424117A (zh) * 2013-08-20 2015-03-18 华为技术有限公司 内存物理地址查询方法和装置
CN104424117B (zh) * 2013-08-20 2017-09-05 华为技术有限公司 内存物理地址查询方法和装置
US10114762B2 (en) 2013-08-20 2018-10-30 Huawei Technologies Co., Ltd. Method and apparatus for querying physical memory address
CN104035822A (zh) * 2014-05-28 2014-09-10 中国科学院计算技术研究所 一种低开销的高效内存去冗余方法及***
CN106648932A (zh) * 2016-12-19 2017-05-10 四川长虹电器股份有限公司 基于Python扩展模块的多进程共享***及方法
CN111090614A (zh) * 2019-12-03 2020-05-01 深信服科技股份有限公司 Rom快照的读取方法、装置和存储介质

Also Published As

Publication number Publication date
EP2743833B1 (en) 2016-12-21
CN102369520B (zh) 2014-02-19
EP2743833A4 (en) 2014-10-08
US9003120B2 (en) 2015-04-07
US20140181401A1 (en) 2014-06-26
EP2743833A1 (en) 2014-06-18
WO2012149723A1 (zh) 2012-11-08

Similar Documents

Publication Publication Date Title
CN102369520A (zh) 虚拟内存区域的查询、遍历方法及装置
CN108038002B (zh) 一种嵌入式软件内存管理方法
US9075813B2 (en) Saving a snapshot of free space of a file system on persistent storage
CN103164408B (zh) 基于垂直搜索引擎的信息存储、查询方法及其装置
CN108279943B (zh) 索引加载方法和装置
KR20070075640A (ko) 요구 페이징 기법을 적용한 시스템에서 페이지 교체 수행시간을 단축시키는 방법 및 장치
CN105760199A (zh) 一种应用资源加载方法及其设备
CN105718319B (zh) 一种内存池版图解析方法和内存池装置
CN103412754A (zh) 动态语言代码执行方法和装置
CN104899159B (zh) 高速缓冲存储器Cache地址的映射处理方法和装置
CN105069059A (zh) 数据库同步方法及装置
CN102227717B (zh) 用于数据储存和访问的方法和设备
WO2015033551A1 (ja) ストアマージ処理装置、ストアマージ処理システム、ストアマージ処理方法、及び、記憶媒体
KR100622114B1 (ko) 임베디드 시스템에서의 효율적인 동적 메모리 관리방법 및그 시스템
CN104424117A (zh) 内存物理地址查询方法和装置
CN105677252A (zh) 读数据的方法、数据处理方法及相关存储设备
CN111177021A (zh) Java卡碎片管理方法及其存储装置
CN108353335B (zh) 路由方法、装置、nfcc以及dh
CN112685417B (zh) 数据库操作方法、***、装置、服务器及存储介质
CN110008030A (zh) 一种元数据访问的方法、***及设备
US11256630B2 (en) Cache address mapping method and related device
CN103761060B (zh) 一种数据处理方法及服务器
US11692846B2 (en) Map presentation device
CN102981964B (zh) 数据存储空间的管理方法及***
CN104378747A (zh) 一种利用短号码呼叫对端设备的方法和设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant