专利名称:多任务虚拟机的堆组织的制作方法
多任务虚拟机的堆组织
背景技术:
堆组织(heap organization)是可以用于为由多任务虚拟机并发执行的 多个任务存储数据的存储区。所述数据可以包括用于所有任务的程序对象 和元数据。
常规上,有两类堆组织,即共享堆和分离堆。对于共享堆类型,多任 务虚拟机可以使用单个堆来存储可由所有任务访问的数据。对于分离堆类 型,多任务虚拟机可以使用逻辑上分离的多个堆。可以分配每个分离堆来 存储仅可由单个任务访问的数据。
在附图中,通过示例而非限制来说明本文阐述的发明。为了使说明简 洁清楚,附图中所示的元件并不一定是按照比例绘制的。例如,为了清楚, 某些元件的尺寸相对于其它元件的尺寸可能会被放大。此外,在认为适当 的情况下,在多张附图中重复使用了附图标记,以表示对应或类似的元件。
图1示出了包括多任务虚拟机的计算平台的实施例;
图2示出了多任务虚拟机的实施例;
图3示出了图2的多任务虚拟机中的堆组织的实施例;
图4示出了将任务堆添加到图3的堆组织中的方法的实施例;
图5示出了从图3的堆组织回收任务堆的方法的实施例;
图6示出了图2的多任务虚拟机中的堆组织的另一个实施例;以及
图7示出了图2的多任务虚拟机中的堆组织的又一个实施例。
具体实施例方式
下面的说明描述了用于多任务虚拟机的堆组织的技术。在以下说明中, 为了提供对本发明的更透彻的理解,阐述了许多具体细节,诸如逻辑实现、 伪代码、指定操作数的方法、资源分区/共享/复制实现、系统组件的类型和相互关系、以及逻辑分区/集成选择。但不使用这些具体细节也可以实践 本发明。在其它实例中,没有详细示出控制结构、门级电路和完整的软件 指令序列,以免对本发明造成模糊。本领域技术人员借助于该说明书就可 以实现适合的功能,而无需不当的实验。
说明书中提到的"一个实施例"、"实施例"和"示例性实施例"等表 示所述的实施例可以包括特定的特征、结构或特点,但并不是每个实施例 都必须要包括所述特定的特征、结构或特点。此外,这种短语并不一定指 代同一实施例。而且,当结合某一实施例描述该特定的特征、结构或特点 时,结合其它实施例(不管是否明确说明)来实现这样的特征、结构或特 点也被认为是在本领域技术人员的知识范围内。
可以以硬件、固件、软件或它们的任意组合来实现本发明的实施例。 还可以将本发明的实施例实现为存储在机器可读介质上的指令,所述指令 可由一个或多个处理器读取和执行。机器可读介质可以包括以机器(例如, 计算装置)可读的形式存储或传输信息的任何机制。例如,机器可读介质 可以包括只读存储器(ROM);随机存取存储器(RAM);磁盘存储媒体; 光存储媒体;闪存装置;和电、光、声或其它形式的传播信号(例如载波、 红外信号、数字信号等)等。
图1示出了包括多任务虚拟机的计算平台10的实施例。计算平台10 的示例可以包括个人计算机、工作站、服务器计算机、个人数字助理(PDA)、 移动电话、以及游戏机。
计算平台IO可以包括一个或多个处理器101、存储器102、芯片组103、 1/0装置104、固件105和可能的其它组件。 一个或多个处理器101可以经 由诸如处理器总线之类的一条或多条总线可通信地耦合到各个组件(例如 芯片组103)。可以将处理器101实现为在适当的架构(例如包括,由位于 加州Santa Clara的英特尔公司出品的英特尔^至强TM、英特尔 奔腾TM、 英特尔^安腾w架构)下的具有一个或多个可以执行代码的处理核心的集 成电路(IC)。
存储器102可以存储多个软件应用1021、多任务虚拟机1022和操作 系统1023的形式的指令和数据。存储器102的示例可以包括以下半导体装 置之一或其任意组合例如,同步动态随机存取存储器(SDRAM)装置、RAMBUS动态随机存取存储器(RDRAM)装置、双倍数据速率(DDR) 存储器装置、静态随机存取存储器(SRAM)、以及闪存装置。
可以从诸如I/O装置106之类的任何适当装置输入多个软件应用1021。 在其它实施例中,还可以通过计算平台IO中的其它组件来生成软件应用。 软件应用1021的示例可以包括JAVA应用(例如JAVA.class文件)、.NET 应用(例如.NET代码)、或可能的其它编程语言形式的应用。
多任务虚拟机1022可以运行在操作系统1023之上,以并发执行多个 软件应用1021。每个软件应用1021可以包括一个或多个任务,每个任务 可以代表单个软件应用1021的一个实例化。在JAVA虚拟机中,如果两个 "任务"共享相同的类路径(即,类文件的相同有序表),则这两个"任务" 可以属于一个应用。
多任务虚拟机1022的示例可以包括由位于加州Santa Clara的Sun微 系统公司出品的多任务JAVA虚拟机、以及由位于华盛顿州Redmond的 Microsoff公司出品的多任务.NET虚拟机。操作系统1023可以包括但不限 于不同版本的Linux 、 Microsoft Windows 、和诸如¥乂\¥0&5@之类的实 时操作系统等。
在一个实施例中,芯片组103可以提供在一个或多个处理器101、存 储器102、和诸如1/0装置104和固件105之类的其它组件之间的一条或 多条通信路径。芯片组103可以包括存储器控制中心1031、输入/输出控 制中心1032和固件中心1033。
在一个实施例中,存储器控制中心1031可以提供到处理器总线(其可 与处理器101连接)和到适当装置(诸如存储器102)的通信链路。存储 器控制中心102可以耦合到I/O控制中心1032,以提供到计算平台的I/O 装置104的接口。 1/0装置104的示例可以包括键盘、鼠标、网络接口、 存储装置、照相机、蓝牙装置和天线。
在一个实施例中,存储器控制中心1031可以经由输入/输出控制中心 1032可通信地耦合到固件中心1033。固件中心1033可以耦合到固件105, 所述固件可以存储BIOS例程和/或EFI例程,所述BIOS例程在系统启动 期间被计算平台执行,以初始化处理器101、芯片组103、以及该计算平台 的其它组件,所述EFI例程使固件105与计算机平台的操作系统通过接口进行连接并提供用于引导该操作系统的标准环境。
其它的实施例可以实现用于计算平台10的结构的其它技术。例如,多
任务虚拟机1022可以在虚拟机的一个实例化中执行一个软件应用1021。 换句话说,多任务虚拟机1022可以在虚拟机的一个实例化中并发地执行属 于一个应用的多个任务,并且所述多个任务是该应用的各个实例化。
图2示出了图1的多任务虚拟机1022的实施例。根据该实施例,多任 务虚拟机1022可以包括加载器201、执行引擎202、堆组织203、堆管理 器204和可能的其它组件。
加载器201可以加载来自各种资源的文件(包括类、接口、本地方法)。 例如,加载器201可以加载来自多任务虚拟机厂商、程序员和任何第三方 的多个软件应用1021、库、运行时环境变量、以及可能的其它文件。库可 以包括向用户程序提供基本功能的各种函数和例程,例如自举(bootstrap) 类库和非自举类库。运行时环境变量可以包括用于帮助多任务虚拟机寻找
应用资源的配置。加载器的示例可以包括类加载器、本地方法接口、和可 能的其它加载模块。
执行引擎202可以并发执行与软件应用1021相关联的多个任务。更具 体而言,执行引擎202可以并发地解释(translate)软件应用并执行经解释的 代码。
堆组织203可以存储用于多任务虚拟机1022的数据,例如元数据和程 序对象。元数据可以包括关于从加载器201或其它组件加载的文件(例如, 软件应用、库、运行时环境变量等)、来自执行引擎202的文件的经解释的 代码、以及可能的其它数据的信息。元数据的示例可以包括JAVA类、方 法、字段、字节码、JIT (即时)代码等的虚拟机内部表示。程序对象可以 包括在执行所加载的文件时生成的对象。程序对象的示例可以包括用户定 义的类加载器和类文件的实例。
例如在加载器201的帮助下,堆管理器204可以管理堆组织203。
图3示出了图2的堆组织203的实施例。
堆组织203可以包括多个在逻辑上分开的堆,其中每个堆可以包括多 个逻辑上邻接的存储块,在两个堆之间没有块重叠。
在图3的实施例中,堆组织203可以包括系统堆301、多个应用堆302^、以及多个任务堆303,.N。
系统堆可以存储可由多任务虚拟机1022执行的所有任务共享的系统 数据。在系统堆中存储的数据的寿命(lifespan)可以与多任务虚拟机1022 的一个实例化相同。系统数据的示例可以包括全局共享库(例如自举类库、 全局共享运行时环境、平台定义信息)的元数据、与多任务虚拟机的实例 化具有相同寿命的程序对象(例如在执行自举类程序时生成的对象)、和用 于该系统的可能的其它数据。在图3的实施例中,系统堆301是单例的 (singleton),并不会被回收(reclaim)甚至压縮。
可以将应用堆302,.w中的每一个分配给多个软件应用1021中的每个 "活(live)"应用,其中"活"应用可以具有由多任务虚拟机1022执行的 至少一个任务。任务可以是其应用的实例化。应用堆302,—w中的每一个可 以存储可由属于该应用并和该应用持续同样寿命的所有任务访问的应用数 据。对于JAVA虚拟机规范,如果两个"任务"属于一个应用,则这两个 "任务"可以共享相同的类路径,即它们可以共享类文件的相同有序表。 有鉴于此,应用可以代表用于其任务的可执行二进制代码(binaries)(包 括动态加载的二进制代码)和运行时环境。
在应用堆302^的每一个中存储的应用数据可以包括应用的元数据和 可以与该应用具有相同寿命的程序对象。该应用的元数据的示例可以包括 关于应用类文件、应用类文件的经解释的代码、应用库和用于解释并执行 应用类文件的运行时环境变量、以及用于该应用的可能的其它数据的信息。 程序对象的示例可以包括当初始化应用类文件时生成的对象。在图3的实 施例中,如果该应用的最后一个任务被终止,则可以回收该应用堆。
可以将任务堆303^中的每一个分配给由多任务虚拟机1022执行的每 个"活"任务。任务堆303,.w中的每一个可以存储仅可由相关任务访问的 任务数据,这意味着禁止由其它任务来访问该任务数据。任务数据可以具 有和相关任务相同的寿命。任务数据的示例可以包括当执行该任务时生成 的程序对象和用于执行该任务的运行时环境变量。在图3的实施例中,如 果相关任务被终止,则可以回收任务堆。
如图3所示,任务可以访问在其任务堆中存储的任务数据和在系统堆 中存储的系统数据。任务还可以访问在该任务所属的应用的应用堆中存储的应用数据。由于一个应用可以具有由多任务虚拟机1022正执行的多于一 个的任务,因此一个应用堆可以具有与其绑定的多于一个的任务堆。例如, 应用堆302i可以具有与其绑定的两个任务堆303,-3032。但是,任务无法访 问在该任务不属于的其它应用的其它应用堆中存储的其它应用数据。
其它实施例可以实现用于图3的堆组织203的结构的其它技术。例如, 如果多任务虚拟机1022在一个实例期间执行一个应用1023,则堆组织203 可以包括用于存储系统数据和应用数据的系统堆、以及用于存储任务数据 的多个任务堆。
图4示出了将任务堆添加到如图3所示的堆组织203中的方法的实施例。
在块401中,堆管理器204或其它适当的装置可以确定为多任务虚拟 机1022执行的任务创建任务堆。在块402中,堆管理器204或其它适当的 装置可以确定该任务所属的应用。如上所述,应用可以代表用于其任务的 可执行二进制代码(包括动态加载的二进制代码)和运行时环境,因此, 堆管理器204或其它适当的装置可以通过自检(introspect)该任务的可执 行二进制代码和运行时环境来确定该应用。
在块403,堆管理器204或其它适当的装置可以确定是否有应用堆已 被分配给该应用。在块403的一个实施例中,堆管理器204或其它适当的 装置可以维护记录着所有"活"应用的一个"活"应用表。每个"活"应 用可以具有由多任务虚拟机1022执行的至少一个任务,因此每个"活"应 用可以被分配有应用堆。通过这种方式,如果该应用被列在"活"应用表 中,则堆管理器204或其它适当的装置可以确定应用堆已被分配给该应用, 而如果没有列出,则可以确定应用堆还没有被分配给该应用。
如果该应用还没被分配有应用堆,则在块404中,堆管理器204或其 它适当的装置可以为该应用创建应用堆。在块405中,堆管理器203或其 它适当的装置可以将应用数据加载到该应用堆中。应用数据可以包括该应 用的元数据和与该应用具有相同寿命的程序对象。
在块406中,堆管理器203或其它适当的装置可以标记出所创建的应 用堆的存在。在块408的一个实施例中,堆管理器203或其它适当的装置 可以将与该应用堆相对应的应用添加到"活"应用表中。在块407中,堆管理器203或其它适当的装置可以将该在务绑定到在 块404中创建的应用堆,从而该任务可以访问该应用堆中的应用数据。在 块407的一个实施例中,堆管理器203或其它适当的装置可以将该任务添 加到为该应用维护的、记录着属于该应用的并由多任务虚拟机1022执行的 每个任务的"活"任务表中。
随后,在块408中,堆管理器203或其它适当的装置可以为由多任务 虚拟机1022执行的该任务创建任务堆。可以通过将任务堆地址、应用堆地 址和系统堆地址添加到该任务的栈中来创建任务堆,从而该任务可以访问 这些堆中的数据。最后,在块409中,多任务虚拟机1022的执行引擎202 可以在该任务的任务堆上运行该任务。
返回到块403,如果已经将应用堆分配给了与该任务相对应的应用, 则堆管理器203或其它适当的装置可以在块407中将该任务绑定到该应用 堆,在块408中为该任务创建任务堆,从而在块409中,执行引擎202可 以在该任务的任务堆上运行该任务。
图5示出了从堆组织203回收任务堆的方法的实施例。
在块501中,例如当执行引擎202完成任务的执行时,该任务可以被 终止。在块502中,堆管理器203或其它适当的装置可以释放分配给该任 务的任务堆。在块502的一个实施例中,堆管理器203可以将该任务堆的 存储区域作为整体返还给操作系统。随后,在块503中,堆管理器203或 其它适当的装置可以确定该任务是否是其所属的应用的最后一个任务。堆 管理器203或其它适当的装置可以以各种方式实现块203,例如,通过检
查上述的为该应用维护的"活"任务表来确定该任务是否是"活"任务表 中的最后一个任务。
如果该任务不是该应用的最后一个任务,则在块506中,堆管理器203 或其它适当的装置可以将该任务与分配给该应用的应用堆解除绑定。可以 通过从为该应用维护的"活"任务表中删除该任务来实现解除绑定。然而, 如果该任务是该应用的最后一个任务,则在块504中,堆管理器203或其 它适当的装置可以回收该应用的应用堆。堆管理器203或其它适当的装置 可以以各种方式实现块504,例如,通过将该应用堆的存储区域作为整体 返还给操作系统。随后,在块505中,例如通过从上述"活"应用表中删
13除对应的应用,堆管理器203或其它适当的装置可以标记该应用堆的回收。 图6示出了图2的堆组织203的另一个实施例。
堆组织203可以包括多个应用堆601^和多个任务堆602^。可以将 应用堆601^中的每一个分配给一个应用1021。每个应用堆可以包括仅可 由属于该应用并和该应用持续相同寿命的(多个)任务访问的系统数据和 应用数据。系统数据可以包括全局共享库和全局共享运行时环境的元数据 和程序对象,应用数据可以包括应用类、应用库和应用运行时环境的元数 据和程序对象。
可以将任务堆602lN中的每一个分配给由多任务虚拟机执行的每个任 务。每个任务堆可以存储仅可由相关任务访问的、并和相关任务持续相同 寿命的任务数据。任务数据可以包括该任务的程序对象和运行时环境。可 以将任务堆602^中的每一个绑定到应用堆601^其中之一,从而该任务 能够访问任务堆和应用任务中的数据。
其它实施例可以实现用于图6的堆组织的结构的其它技术。例如,可 以将系统数据复制到每个任务堆602^中,而不复制到每个应用堆601^ 中。
图7示出了图2的堆组织203的又一个实施例。
如图所示,堆组织203可以包括系统堆701和多个任务堆702^。系 统堆701可以存储可由多任务虚拟机1022执行的全部任务访问的、并和多 任务虚拟机1022的实例化持续相同寿命的系统数据。系统数据可以包括全 局共享库和全局共享运行时环境变量的元数据、以及与该多任务虚拟机的 实例化持续相同寿命的程序对象、以及可能的其它系统数据。
可以将任务堆702卜n中的每一个分配给由多任务虚拟机1022执行的每 个任务。每个任务堆可以存储仅可由相关任务访问的任务数据和应用数据。 应用数据可以包括应用类、应用库和运行时环境的元数据和程序对象,以 及该应用的可能的其它数据。任务数据可以包括该任务的程序对象和运行 时环境变量。
尽管已经结合某些实施例描述了本发明,但应当理解,可以采取各种 修改和变更,而不偏离本领域技术人员所很容易理解的本发明的精神和范 围。这样的修改和变更被认为是涵盖在本发明和所附权利要求的范围内。
权利要求
1、一种多任务虚拟机,包括执行引擎,用于并发执行多个任务;多个堆,其耦合到所述执行引擎,其中,所述多个堆包括系统堆,用于存储可由所述多个任务访问的系统数据;以及任务堆,其被分配给所述多个任务中的一个任务,以存储仅可由所分配的任务访问的任务数据。
2、 如权利要求1所述的多任务虚拟机,其中,所述系统数据包括全局 共享库和全局共享运行时环境变量的系统元数据。
3、 如权利要求1所述的多任务虚拟机,其中,所述系统数据包括程序 对象,所述程序对象的寿命与所述多任务虚拟机的寿命相同。
4、 如权利要求1所述的多任务虚拟机,其中,所述任务数据包括程序 对象,所述程序对象的寿命与所分配的任务的寿命相同。
5、 如权利要求1所述的多任务虚拟机,其中,所述多个堆还包括 应用堆,其被分配给应用,以存储所述应用的应用数据,其中,所述应用数据仅可由所述多个任务中与所述应用相关联的至少一个任务来访 问。
6、 如权利要求5所述的多任务虚拟机,其中,所述应用数据包括应用 类文件、应用库和应用运行时环境变量的应用元数据。
7、 如权利要求5所述的多任务虚拟机,其中,所述应用数据包括程序 对象,所述程序对象的寿命与所述应用的寿命相同。
8、 如权利要求l所述的多任务虚拟机,还包括堆管理器,用于如果所分配的任务被终止则回收所述任务堆。
9、 如权利要求5所述的多任务虚拟机,还包括堆管理器,用于如果与所述应用相关联的所述至少一个任务被终止则 回收所述应用堆。
10、 一种多任务虚拟机,包括-执行引擎,用于并发执行多个任务;多个堆,其耦合到所述执行引擎,其中,所述多个堆包括任务堆,其被分配给所述多个任务中的一个任务,以存储仅可由所分配的任务访问的任务数据;以及应用堆,其被分配给应用,以存储仅可由所述多个任务中的至少一个任务访问的应用数据,其中,所述至少一个任务与所述应用相关联并包括所分配的任务。
11、 如权利要求10所述的多任务虚拟机,其中,所述应用数据包括全 局共享库和全局共享运行时环境变量的系统元数据,以及应用类文件、应用库和应用运行时环境变量的应用元数据。
12、 如权利要求10所述的多任务虚拟机,其中,所述应用数据包括应 用类文件、应用库和应用运行时环境变量的应用元数据,并且其中,所述 任务数据包括全局共享库和全局共享运行时环境变量的系统元数据。
13、 如权利要求10所述的多任务虚拟机,其中,所述应用数据包括程 序对象,所述程序对象的寿命与所述应用的寿命相同。
14、 如权利要求10所述的多任务虚拟机,其中,所述任务数据包括程 序对象,所述程序对象的寿命与所述任务的寿命相同。
15、 如权利要求10所述的多任务虚拟机,还包括堆管理器,用于如果所述任务被终止则回收所述任务堆。
16、 如权利要求10所述的多任务虚拟机,还包括堆管理器,用于如果与所述应用相关联的所述至少一个任务被终止则 回收所述应用堆。
17、 一种多任务虚拟机的方法,包括提供被分配给多个任务中的一个任务的任务堆,其中,所述任务堆存 储仅可由所分配的任务访问的任务数据;以及确定是否存在被分配给应用的应用堆,其中,所述应用堆存储仅可由 所述多个任务中的至少一个任务访问的应用数据,其中,所述至少一个任 务与所述应用相关联并包括所分配的任务。
18、 如权利要求17所述的方法,其中,所述确定还包括确定与所分配的任务相关联的所述应用;以及确定所述应用是否存在于活应用表中,所述活应用表记录具有由所述 多任务虚拟机执行的所述多个任务中的至少一个任务的每个应用。
19、 如权利要求17所述的方法,还包括如果所述应用堆并不存在于所述多任务虚拟机中,则提供所述应用堆。
20、 如权利要求17所述的方法,还包括标记所述应用堆的存在。
21、 如权利要求20所述的方法,其中,所述标记还包括将所述应用添加到活应用表中,所述活应用表记录具有由所述多任务 虚拟机执行的所述多个任务中的至少一个任务的每个应用。
22、 如权利要求17所述的方法,还包括将所分配的任务绑定到所述应用堆,使得所分配的任务能够访问在所述应用堆中存储的应用数据。
23、 如权利要求22所述的方法,其中,所述绑定还包括将所分配的任务添加到所述应用的活任务表中,其中,所述活任务表 记录与所述应用相关联的并由所述多任务虚拟机执行的每个任务。
24、 一种包括多个指令的机器可读介质,所述多个指令当被执行时使多任务处理机从所述多任务虚拟机回收被分配给多个任务中的一个任务的任务堆,其中,所述任务堆存储仅可由所分配的任务访问的任务数据;以及确定是否从所述多任务虚拟机回收被分配给应用的应用堆,其中,所 述应用堆存储仅可由所述多个任务中的至少一个任务访问的应用数据,其 中,所述至少一个任务与所述应用相关联并包括所分配的任务。
25、 如权利要求24所述的机器可读介质,其中,使所述多任务虚拟机 确定是否回收所述应用堆的多个指令还使所述多任务虚拟机确定所分配的任务是否是活任务表中列出的最后一个任务,所述活任 务表记录与所述应用相关联的并由所述多任务虚拟机执行的每个任务;以 及如果所分配的任务是所述活任务表中的最后一个任务,则确定回收所 述应用堆。
26、 如权利要求24所述的方法,其中,所述多个指令还使所述多任务 虚拟机响应于确定不回收所述应用堆,将所分配的任务与所述应用堆解除绑定。
27、 如权利要求26所述的方法,其中,使所述多任务虚拟机将所述任 务解除绑定的多个指令还使所述多任务虚拟机从活任务表中删除所分配的任务,所述活任务表记录与所述应用相关联的并由所述多任务虚拟机执行的每个任务。
28、 如权利要求24所述的方法,其中,所述多个指令还使所述多任务 虚拟机从所述多任务虚拟机回收所述应用堆;以及 标记所述应用堆的回收。
29、 如权利要求28所述的方法,其中,使所述多任务虚拟机标记所述 回收的多个指令还使所述虚拟机从活应用表中删除所述应用,所述活应用表记录具有由所述多任务虚 拟机执行的所述多个任务中的至少一个任务的每个应用。
全文摘要
本文描述了多任务虚拟机的堆组织。堆组织可以包括用于并发执行多个任务的执行引擎和与该执行引擎相耦合的多个堆。在一些实施例中,所述多个堆可以包括系统堆和与该系统堆相分离的任务堆。系统堆可以存储可由所述多个任务访问的系统数据。任务堆可以存储仅可由所述多个任务中的一个任务访问的任务数据。
文档编号G06F9/44GK101484876SQ200680055340
公开日2009年7月15日 申请日期2006年7月14日 优先权日2006年7月14日
发明者B·陈, G·吴, J·彭, P·郭, X·周, Z·英 申请人:英特尔公司