硬件辅助的对象存储器迁移制造技术

技术编号:16112628 阅读:32 留言:0更新日期:2017-08-30 05:58
用于结合处理器中的垃圾收集利用存储器版本指令和技术的系统和方法。计算系统可以执行硬件辅助的垃圾收集算法,以在存储器区域之间移动存活对象。可以利用特殊的存储指令来标记每个存储器区域的即将被迁移的存活对象。执行有用的工作的转变器可以被配置为在标记用于迁移的存储器区域上进行捕捉。

【技术实现步骤摘要】
【国外来华专利技术】硬件辅助的对象存储器迁移本专利技术的背景
本专利技术涉及计算系统,并且更具体地,涉及使用已经被知晓为“垃圾收集”的技术的计算机系统的存储器管理。
技术介绍
在计算机系统领域中,在分配和管理存储器的任务上已经付出了相当大的努力。通常,存储器可以被静态地或动态地分配给数据对象(数据对象也可以被称为数据结构或记录)。一些计算机语言可能要求为程序中定义的所有变量静态地(例如在编译时)分配存储器。这种静态存储器分配可能使得难以在多个应用之间共享可用的存储器空间,尤其是对于长期存活的应用。当平台提供对动态存储器分配的支持时,例如当要分配给给定对象的存储器空间仅在运行时才确定时,遵守空间限制可能更容易。动态分配相对于静态分配具有许多优点。一个这样的优点是运行时系统能够使分配适于运行时条件。例如,程序员可以指定仅响应于特定运行时条件才为给定对象分配空间。C语言库函数malloc()和C++操作符new可以用于此目的。相反,程序员可以指定先前分配给给定对象的存储器可以被回收以用于重用的条件。C语言库函数free()和C++操作符delete导致这种存储器回收。因为动态分配提供了存储器重用,因此它便于生成大型或长期存活的应用,这些应用在其生命周期过程中可以采用对象,如果这些对象被静态绑定到存储器位置,那么这些对象的总存储器需求将大大超过可用的存储器资源。然而,必须小心地执行动态存储器的分配和回收,尤其是对于长期存活的应用。如果应用无法回收未使用的存储器——或者更糟的是,丢失了对动态分配的存储器段的地址的跟踪——那么该应用的存储器需求可能随时间增长而超过系统的可用存储器。这种错误被知晓为“存储器泄漏”。当即使应用仍然维持对存储器的引用该应用也回收该存储器以用于重用时,会发生另一种错误。如果回收的存储器被重新分配用于不同目的,那么该应用可能不经意地以多种不一致的方式操纵同一存储器。这种错误被知晓为“悬空引用(danglingreference)”。减少这种泄漏和相关错误的可能性的方式是以更自动的方式提供存储器空间回收。由系统使用的自动回收存储器空间的技术通常被称为垃圾收集。垃圾收集器通过回收它们不再认为是“存活”或“可达”的空间来操作(不可达的空间可以称为“垃圾”,这是本技术的名称来由)。由程序的全局变量表示的静态分配的对象一般被认为贯穿程序的生命周期是可达的。这样的对象通常不存储在垃圾收集器的受管理的存储器空间(例如,堆)中,但是它们可以包含对存储在垃圾收集器的受管理的存储器空间中的动态分配的对象的引用,并且这样的存储在垃圾收集器的受管理的存储器空间中的动态分配的对象被认为是可达的。显然,在处理器的调用栈中引用的对象是可达的,由寄存器内容引用的对象也是可达的。由任何可达对象引用的对象也是可达的。垃圾收集器的使用是有利的,这是因为虽然针对特定代码序列工作的程序员在任何给定时间仅使用应用的局部知识就可以在大多数方面可靠地执行该程序员的任务,但是存储器分配和回收需要该程序的全局知识。具体而言,处理给定代码序列的程序员确实往往知道存储器的某个部分是否仍然被用于该代码序列,但是他很难知道应用的其余部分正在对该存储器做什么。通过追踪来自根集合的一些保守概念(例如,全局变量、寄存器和调用栈)的引用,自动垃圾收集器以有条理(methodical)的方式获得全局知识。通过使用垃圾收集器,程序员不用再担心应用的全局状态并且可以专注于更易于管理的局部状态问题。结果是更健壮的、没有悬空引用并且具有更少存储器泄漏的应用。鉴于以上情况,期望用于执行垃圾收集的高效方法和机制。
技术实现思路
设想了用于结合垃圾收集利用存储器版本指令和技术的系统和方法。在一个实施例中,在由计算系统执行计算机程序期间,在物理存储器中分配的数据对象可以与版本号相关联。在一个实施例中,可以初始化JavaTM虚拟机(JVM),使得在对象被管理的堆区域上启用存储器版本控制(versioning)。(Java是Oracle和/或其附属公司的商标或注册商标)。可以使用操作系统(OS)调用来通知OS关于哪个虚拟地址(VA)空间应当被管理为存储器损坏检测(MCD)区域。在一个实施例中,硬件辅助的垃圾收集算法可以由计算系统执行以将存活对象(liveobject)从一个或多个存储器区域移动到另一个“清洁”区域。当对象正在被迁移时,该对象可以以紧凑的格式存储在新的“清洁”区域中以使存储器碎片最少。在一个实施例中,垃圾收集算法可以通过执行使用JVM级加载/存储指令的存活集合标记以标记每个存储器区域的即将被迁移的存活集合来完全绕过OS。垃圾收集算法可以启用与应用堆大小相一致的并发和连续的细粒度对象迁移,使得Java应用线程(或转变器(mutator))可以在对象正被迁移的同时取得进展。为了将程序中的做“有用的”工作的部分与进行垃圾收集的部分区分开来,术语转变器有时用于“有用的”部分。此外,垃圾收集算法也可以允许在巨大的存储器页面内完成垃圾收集标记。在一个实施例中,可以在计算系统中利用每线程的检查控制。可以为每个转变器线程启用MCD检查。在各个实施例中,可以存在用于每个运行线程的硬件(HW)控制寄存器(例如,由OS/管理程序(HV)管理)。在一个实施例中,即将把存活对象的集合从一个存储器区域迁移到另一个存储器区域的垃圾收集线程可以发出具有特殊/保留的MCD值的存储,使得转变器可以在该堆的那个“标记用于迁移的存活集合”的区域上进行捕捉(trap)。可以利用只存储存储器版本并使应用数据保持不变的特殊存储指令。当堆区域被定义为“MCD区域”时,可以使用MCD存储指令翻转(flip)存活对象的存储器版本信息,以避免任何OS/HV应用程序接口(API)开销。在一个实施例中,单个存储器版本值可以被保留并且被用于将被考虑用于迁移的对象标记为“已迁移或即将迁移”。在其它实施例中,多个值可以被保留并且被用于标记用于迁移的对象。当参考以下描述和附图时,这些实施例和其它实施例将变得明显。附图说明图1是示出计算系统的一个实施例的一般化框图。图2是示出进程地址空间的一个实施例的一般化框图。图3是示出存储器访问地址格式的一个实施例的一般化框图。图4是示出用于版本号失配(mismatch)的真值表的一个实施例的一般化框图。图5是示出存储器接口的一个实施例的一般化框图,该存储器接口示出存储器请求的不同来源。图6是示出用于初始化具有版本号的数组的方法的一个实施例的一般化流程图。图7是示出用于执行具有版本号的存储器访问操作的方法的一个实施例的一般化框图。图8是示出用于执行更新版本号的存储器访问操作的方法的一个实施例的一般化流程图。图9是用于执行更新版本号的存储器访问操作的方法的另一个实施例。图10是示出用于执行硬件辅助的细粒度对象存储器迁移的方法的一个实施例的一般化流程图。图11是示出用于将对象从一个存储器位置迁移到另一个存储器位置的方法的一个实施例的一般化流程图。图12是示出用于迁移存活对象的方法的一个实施例的一般化流程图。虽然本文所述的方法和机制可以有各种修改和替代形式,但是在附图中通过示例的方式示出并在本文中详细描述了具体的实施例。然而,应当理解,附图及对附图的详细描述并不旨在将本专利技术限制于所公开的特定形式,而是相反地旨在覆盖一本文档来自技高网
...
硬件辅助的对象存储器迁移

【技术保护点】
一种计算系统,包括:存储器;以及耦合到所述存储器的处理器,其中作为垃圾收集过程的一部分,所述处理器被配置为:识别所述存储器的第一区域中的用于迁移的第一对象;通过将与所述第一对象相关联的第一版本号改变为指示为对象迁移保留的值的第二版本号,标记用于从所述存储器的所述第一区域迁移到所述存储器的第二区域的所述第一对象;在所述第一区域中的所述第一对象被迁移到所述第二区域之前,检测对所述第一对象的访问,其中所述访问包括所述第一版本号;将所述第一版本号与所述第二版本号进行比较;响应于检测到所述第一版本号与所述第二版本号匹配,允许对所述第一对象的所述访问;响应于检测到所述第一版本号与所述第二版本号不匹配,停止对所述第一对象的所述访问;将所述第一对象从所述第一区域移动到所述第二区域;以及响应于完成所述第一对象到所述第二区域的迁移,从所述第一对象中移除所述第二版本号。

【技术特征摘要】
【国外来华专利技术】2014.09.27 US 62/056,524;2015.01.15 US 14/598,1661.一种计算系统,包括:存储器;以及耦合到所述存储器的处理器,其中作为垃圾收集过程的一部分,所述处理器被配置为:识别所述存储器的第一区域中的用于迁移的第一对象;通过将与所述第一对象相关联的第一版本号改变为指示为对象迁移保留的值的第二版本号,标记用于从所述存储器的所述第一区域迁移到所述存储器的第二区域的所述第一对象;在所述第一区域中的所述第一对象被迁移到所述第二区域之前,检测对所述第一对象的访问,其中所述访问包括所述第一版本号;将所述第一版本号与所述第二版本号进行比较;响应于检测到所述第一版本号与所述第二版本号匹配,允许对所述第一对象的所述访问;响应于检测到所述第一版本号与所述第二版本号不匹配,停止对所述第一对象的所述访问;将所述第一对象从所述第一区域移动到所述第二区域;以及响应于完成所述第一对象到所述第二区域的迁移,从所述第一对象中移除所述第二版本号。2.如权利要求1所述的计算系统,其中所述处理器包括存储队列,所述存储队列包括多个条目,其中所述多个条目中的每个条目被配置为存储以下中的至少一个或多个:线程标识符ID、版本号以及存储器损坏检测MCD启用状态,所述存储器损坏检测MCD启用状态指示对于由线程ID识别出的给定线程是否启用了MCD检查。3.如权利要求1所述的计算系统,其中所述第一区域是被定义为存储器损坏检测MCD区域的堆区域。4.如权利要求1所述的计算系统,其中所述处理器被配置为利用存储器损坏检测MCD存储指令来改变与所述第一对象相关联的版本号,其中MCD存储指令仅修改目标地址的版本号并且使所述目标地址的应用数据保持不变。5.如权利要求4所述的计算系统,其中所述处理器被配置为通过检测所述访问的版本号和所述第一对象的版本号之间的失配来确定所述访问发生在所述第一对象被标记用于迁移之后。6.如权利要求1所述的计算系统,其中为了移除所述第二版本号,所述处理器被配置为将所述第二版本号改变为所述第一版本号。7.如权利要求1所述的计算系统,其中所述处理器还被配置为响应于在所述第一对象被标记用于迁移之后检测到所述访问而触发捕捉例程来解决依赖性。8.一种用于处理器的方法,所述方法包括:发起垃圾收集过程,其中所述过程包括:识别存储器的第一区域中的用于迁移的第一对象;通过将与所述第一对象相关联的第一版本号改变为指示为对象迁移保留的值的第二版本号,标记用于从所述存储器的所述第一区域迁移到所述存储器的第二区域的所述第一对象;在所述第一区域中的所述第一对象被迁移到所述第二区域之前,检测对所述第一对象的访问,其中所述访问包括所述第一版本号;将所述第一版本号与所述第二版本号进行比较;响应于检测到所述第一版本号与所述第二版本号匹配,允许对所述第一对象的所述访问;响应于检测到所述第一版本号与所述第二版本号不匹配,停止对所述第一对象的所述访问;将所述第一对象从所述第一区域移动到所述第二区域;以及响应于完成所述第一对象到所述第二区域的迁移,...

【专利技术属性】
技术研发人员:Z·拉多维奇
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:美国,US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1