首页> 中国专利> 创建和使用预内在化程序文件的方法和设备

创建和使用预内在化程序文件的方法和设备

摘要

一个设备(45)接收新的程序文件(46),并使用预内在化的映像以避免在每次程序执行出现时必须内在化一个程序文件。在一种实施例中,该设备中的一个软件虚拟机(50)用于执行所述预内在化。一旦将所述程序文件预内在化以创建存储在该设备的永久性存储器(56)内的映像,则随后在不必执行一个预内在化操作的情况下可以执行所述映像。此外,减少了与随后程序执行有关的动态存储器(52)的使用,并减少了新程序文件的执行时间。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-11

    未缴年费专利权终止 IPC(主分类):G06F9/455 授权公告日:20070321 终止日期:20171218 申请日:20011218

    专利权的终止

  • 2007-03-21

    授权

    授权

  • 2005-01-26

    专利申请权、专利权的转移专利申请权的转移 变更前: 变更后: 登记生效日:20041224 申请日:20011218

    专利申请权、专利权的转移专利申请权的转移

  • 2004-10-27

    实质审查的生效

    实质审查的生效

  • 2004-08-25

    公开

    公开

说明书

发明领域

本发明一般涉及以高级语言编写的程序文件的处理,尤其涉及以能够动态加载的高级编程语言编写的程序文件。

背景技术

随着手持式和其它电子设备的数量和种类不断增加,在这些设备上运行和与之接口的应用程序也相应地增加,并且所期望的用户添加特定程序和功能的灵活性也增加。这些设备有时称作“内嵌式设备”,因为它们包括一个执行指令的处理器、特定的功能单元和提供所期望的功能的指令。内嵌式设备通常是独立设备,它们具有自己的电源,但是通常包括与其它系统接口的能力。例如,诸如蜂窝电话机、寻呼机和个人数字助理(PDA)的内嵌式设备通常包括一个用于执行在该设备内存储的计算机程序的中央处理单元(CPU)和一个允许移动性的电池。在一个内嵌式设备制造之后,个人用户可能希望通过添加特定的功能或应用程序来定制它们的设备。希望使用以高级编程语言编写的计算机程序或代码,所述高级编程语言例如是JavaTM,一种由Sun微系统公司开发的语言,它便于用户提供程序的随后安装。Java是很有吸引力的,因为它是独立于平台的,这意味着它并不专用于一种操作系统或者硬件结构。

为内嵌式设备开发编码的一种限制是有限的存储容量,这降低了设备能够存储的编码数量,同时也影响设备的计算能力。因此,为内嵌式设备设计编码的一个主要目的是最大化存储效率和所安装的应用程序的速度。当前,存在若干种提高内嵌式应用程序存储效率的方法,然而,这些方法通常并不涉及用户随后安装附加的应用程序。

Java具体而言是一种面向对象的编程语言,它是可移植的、易于编程和结构中性的。面向对象的设计集中于称作“对象”的数据以及与对象的接口。Java程序能够在一个包括多种处理单元和操作系统结构的网络内任何位置处执行。

Java程序是编译和解译的。编译一旦完成,将编译后的Java编程代码称作“Java字节码”(JBC)。JBC是一种结构中性或独立于平台的中间语言。Java解释器在处理器上解析和运行JBC指令。解译在每次执行程序时出现。一个称作类文件的Java二进制文件包括用于给定程序的JBC以及诸如符号数据的支持信息。一个类文件或者程序文件包括与类有关的“项目”或信息,例如字段、方法、JBC阵列和一个符号引用表格。具体地说,一个Java程序包括一个或多个Java文件,它们在编译时生成一个或一组类文件。

JBC是用于一个“Java虚拟机”(Java VM)的有效机器代码指令。每个Java解释器,例如Java开发环境或者支持Java的网页浏览器,使用一个Java VM工具。通常,这些工具将使用已经安装在一个系统上的Java VM,或者可以与一个Java VM捆绑在一齐。应当指出Java VM也可以用硬件来实现。以这种方式,可以在任意一个具有Java编译器的机器上编译程序,并可以在Java VM的任意一个工具上运行由此获得的JBC。

为了使以Java编写的应用程序可移植,保存了大量的符号信息。在JBC的普通Java VM执行过程中,由Java VM使用符号数据来执行动态捆绑,由此获得到引用结构的实际指针。例如,每个到一个函数的引用通过下述符号信息来表示,即:类名、函数名和签名。类名识别包含方法说明的类对象。这些方法识别可用于该类的各种函数,JBC阵列是实现一个方法所执行的程序。函数名和签名一齐识别其类中的给定函数。签名描述传送给一个函数和由一个函数返回的参数的组成和类型。符号信息加大了Java二进制文件,并且这种加大产生了存储器的存储问题。在执行过程中,维持两个JBC和符号信息的复本:第一个复本存储在永久性存储器内;第二个复本以易于Java VM控制的格式存储在动态存储内。对于小型内嵌式设备来说,例如寻呼机、蜂窝电话机和PDA,动态存储器是非常有限的。因此,希望减少动态存储器的使用。另一个问题是在执行过程中由于使用处理符号引用的高成本检查表所导致的延迟。

为了解决这些问题,使用允许压缩和格式化Java类文件的工具以更有效地使用存储器。“预内在化”是将Java类文件信息重新格式化成在放入存储器时表示一个类对象的格式的一个处理。内在化在类文件加载过程中出现,是从类文件中提取类信息和将这些信息存储在动态存储器内结构中的过程。预内在化处理消除了符号引用和类加载,减少了动态存储器的需要,并加速了应用程序的执行。预内在化文件的格式专用于每个Java VM工具。

预内在化出现在编译之后但是在JBC的普通加载和执行之前。预内在化的类目标被重新构造以消除将它们存储在动态存储器内的需要,并因此可以保存在永久性存储器内。这释放了更多的用于在执行过程中创建动态目标的动态存储器。将用于保存状态以及动态对象的信息和结构存储在所谓的“Java堆栈”中。预内在化产生一个问题,即因为将类信息存储在永久性存储器内,导致不能在执行过程中更新该信息。

现在的解决方案通过要求在目标设备上类安装之前解析所有的符号引用,避免了在动态存储器内存储符号信息。解析引用涉及用被引用项的位置即地址来替代该引用。在预内在化一组类文件或“类文件单元”时存在一个问题,其中引用已经安装在设备上的多个类,并且被引用项的位置是未知或者不可靠的。为了避免复制被引用的类信息,将所安装的类从设备上删除,并与该组新文件一起重新包装。

图1图示处理程序文件也称作类文件的现有技术的处理方法6。由预处理器10加载标记有“类1”、“类2”和“类3”的程序文件8。预处理器10生成格式化的类文件信息12。该格式化将每个程序文件,类1,类2和类3,转换成在执行过程中使用的类对象,其中这些类对象专用于所使用的JVM工具。预处理器10是可以用软件或硬件实现的工具。格式化后的类文件信息12被构建以存储在一个目标设备中,其中该设备同时具有动态和永久性存储器。编译器和链接器16组合格式化的类文件信息12和Java VM源代码14。Java VM源代码14专用于在目标设备中实现的Java VM。编译器和链接器16的输出是Java VM映像18,它具有两个部分:第一部分存储Java VM 19;第二部分存储预加载的类信息20。预加载的类信息20是格式化类文件信息的编译形式。

此时,Java VM映像18存储在目标设备的设备存储器22内。在这种情况下,该设备存储器22包括动态存储器26和永久性存储器24。在一种实施例中,使用RAM实现动态存储器26,使用ROM和/或闪存实现永久性存储器24。在存储中间数值和变量的执行过程中使用动态存储器26。永久性存储器24包括多个部分:第一部分28,用于存储一个类加载程序;第二部分30,用于存储一个JBC解释程序;和第三部分32,用于存储预加载的类信息20。部分28的类加载程序用于格式化Java VM使用的二进制类信息,但是预加载的类信息20并不需要它来格式化,因为它们在预处理和编译过程中格式化。在设备存储器22中存储的Java VM映像18用于运行Java程序文件,程序文件8中的类1,类2和类3。因此,在一个设备内实现设备存储器22,所述设备例如是一个手持式设备或者其它的应用设备。

在制造商已经执行处理方法6之后经常希望从永久性存储器24中删除程序文件。不幸地是,一旦将类文件8存储在永久性存储器24内,在没有设备制造商的帮助下,用户不能删除所存储的程序文件。所述帮助采用的形式是将设备返送给制造商或者从制造商接收所有与处理方法6有关的工具。制造商并不愿意向用户发布或许可这样的专有工具。

而且,经常希望向设备存储器22内的Java VM映像添加附加的程序文件。程序文件8通常描述一个应用的基本功能,但是用户自由地添加辅助功能,例如增强设备的用户专用或者应用专用的附加功能。存在多种方式来添加程序文件。在第一种已知的处理方法中,再次使用程序文件8所包括的附加程序文件来执行处理方法6。因此,所获得的Java VM映像18包括用于程序文件8和附加文件中所有程序文件的预加载类信息。因为这种方法需要用户到制造商处获得该处理方法中所包括的新程序文件,或者该方法需要制造商将程序文件8提供给用户并允许用户执行该处理方法,所以这种方法不够灵活。根据第二种现有技术的方法,如图2所示,将包括标记有“类4”、“类5”和“类6”的程序文件的附加程序文件42存储在附加永久性存储器40内,例如闪存。然后,由存储在永久性存储器24的部分28内的类加载程序在执行时将程序文件42装载到动态存储器26。在动态存储器26中存储所加载的程序文件类4、类5和类6的需要减少了Java堆栈可用的空间。动态存储器空间的损失产生这样一种情况,即使将所有的附加程序文件42存储在动态存储器26中,剩余的可用动态存储器空间也不足以存储执行过程中的变量,即程序无法执行。因为动态存储器空间一般是有限的,最大化Java堆栈可用的空间量在许多应用中都是至关重要的。

而且,类加载或者内在化附加程序文件42的需要必需在每次执行附加程序文件时执行。换句话说,程序文件不是永久性内在化的。这样的应用程序有时被称作“暂时应用程序”。重复地内在化显然降低了程序的执行速度。还应当指出这个由一个运行时间加载程序内在化的处理并不专用于Java编程环境。

附图的简要描述

通过例子,并且不限制于附图来说明本发明,在附图中相同的参考标号代表相似的元件,在附图中:

图1以方框图的形式图示处理在设备存储器内永久性存储程序文件的一种已知方法;

图2以方框图的形式图示将应用程序的专用程序文件添加给如图1所示的设备存储器的一种已知方法;

图3以方框图的形式图示根据本发明用于接收一个程序文件和创建该程序文件的可执行映像的一个便携式设备;

图4以方框图的形式图示图3的便携式设备的程序文件存储结构的细节;

图5以流程图的形式图示一个根据本发明创建和处理预内在化文件的处理方法;

图6以流程图的形式图示根据本发明的脱离客户(off-client)创建和处理预内在化文件的一个处理方法;

图7以方框图的形式图示一个用于执行图6流程图的客户/脱离客户的系统;和

图8以方框图的形式图示根据本发明的一个设备的实施例。

技术人员将理解附图中的单元是为了简单和清楚而图示的,没有必要按比例绘制。例如,附图中一些单元的大小可能相对于其它的单元被放大,以帮助理解本发明的实施例。

具体实施方式

为了便于说明,将Java编程语言用作一个示例;然而,本发明也可以应用于其它的编程语言。将在此针对一个具有内嵌Java程序的系统使用若干术语。存储器是指只读存储器(ROM)、可写入存储器和可读写存储器。可读写存储器可以是随机访问存储器(RAM)、电可擦除可编程存储器(EEPROM)、包括一次性PROM(OTPROM)和可擦除PROM(EPROM)的可编程存储器(PROM)、闪存、等等。术语“动态存储器”用于指动态地分配和在设备断电时不保持所存储的信息或数据的存储器,例如RAM。术语“永久性存储器”用于指在执行过程中视为只读的和当设备断电时保持所存储的信息或数据的存储器,例如ROM。

本发明提供一种创建和使用能够动态加载的以高级语言编写的预内在化程序文件的方法或处理方法。如在此所使用的,术语“方法”和“处理”是同义词。存在这样一个需要,即在不减少可用于执行的动态存储器容量的情况下,一种允许添加或删除用户专用程序文件以提高附加程序文件的随后执行速度的处理程序文件的方法。

在图3中图示一个示范性的编程环境44,包括一个设备45和附加程序文件46,所述附加程序文件具有任意数目n个类文件,其中n是一个整数。每个类文件是任意大小的,并代表用户希望添加给设备45的一组程序文件中的一个程序文件。应当理解,设备45的原制造商并未使用所图示的附加程序文件46对设备45编程。

设备45通过一个应用程序管理器48连接到附加程序文件46。双向连接到应用程序管理器48的是动态存储器52、永久性存储器56和虚拟机(VM)50。动态存储器52的一种形式是一个随机访问存储器(RAM),永久性存储器56可以被实现为一个闪存。永久性存储器56存储附加文件46的预内在化映像。在所图示的形式中,虚拟机50分别连接到每个动态存储器52和永久性存储器56。应当完全理解响应于虚拟机50通过未图示的导体在动态存储器52和永久性存储器56之间在设备45内传输信息。在所图示的形式中,虚拟机50具有类加载器61、类解析器62、类验证器63、资源管理器64、动态存储器管理器65、字节编码解释器66、预内在化器67和多个预加载应用程序和程序库68,所有这些都驻留在永久性存储器69内。虚拟机50还具有一个驻留在动态存储器70内的Java堆栈54。

在操作中,设备45由制造商预先编程以具有在预加载应用程序和程序库68内包含的预先确定的程序文件。当执行这样的预加载应用程序时,虚拟机50以第一或普通模式执行和处理它的永久性存储器69之外的应用程序。然而,假设设备45的用户希望从设备45外部的任何一个信息源添加附加文件46。应用程序管理器48用于协助将附加文件46放置在动态存储器52或永久性存储器56内。选择使用哪一个存储器是应用程序确定的,与本发明没有密切关系。应用程序管理器48以第二或者预内在化模式启动虚拟机50,这将把程序文件预内在化成虚拟机本身的存储结构。为了清楚起见,在此使用的术语“本身的存储结构”应当指该操作专用于在此讨论的特定虚拟机,与任何其它的虚拟机相对比。一个本身的存储结构是指一个特定的虚拟机,其中该虚拟机是该设备上虚拟机的一个具体例子。预内在化模式的结果是随后存储在永久性存储器56中的程序文件的预内在化映像。因为这个预内在化的映像现在驻留在永久性存储器内,所以该预内在化映像是一个可重复使用的可执行映像,假设需要执行新引入的应用程序,随后不需要重复预内在化。而且,现在可以删除放置在动态存储器52或永久性存储器56内附加文件46的原始复本,从而明显地节省存储器。

虚拟机50是一个标准虚拟机,已经修改从而能够执行预内在化功能。现有的虚拟机并不执行预内在化。已经修改类加载器61和类解析器62以执行普通模式或者预内在化模式。而且,类加载器61已经扩展以识别预内在化的类。已经扩展字节编码解释器66以支持预内在化器67创建的新的字节编码。

为了清楚起见,预内在化的处理包括类文件的处理。一开始,由类加载器61将这些类装入虚拟机50。类加载器61创建与附加程序文件46的每个类有关的虚拟机专用数据结构。在普通模式中,由类加载器61加载应用程序使用所确定的类。在预内在化的过程中,扫描虚拟机专用数据结构以确定在附加类的执行过程中引用的附加文件内部或者外部的其它的类。在普通模式中,在类加载过程中可能需要执行类初始化的方法,因此需要调用字节编码解释器66。字节编码解释器66执行任意一个专用于一个预先确定的类的初始化。这些类例如包括静态初始化程序。在为了安装预内在化的过程中,不执行静态初始化程序。静态初始化程序的执行仅当正在执行应用程序时才出现。虚拟机50的类解析器62用于以与所公布的Java引用平台相一致的常规方式来解析每个类的常数存储库内的条目。一旦解析完成,将Java字节编码(JBC)(通过地址指针)更新到现在所解析引用的位置。而且,由虚拟机50的类验证器63在预内在化的过程中以常规方式验证这些类。为了以后执行附加文件,消除了这些类的验证。验证是Java编程语言中的常规功能,将不对验证进行进一步的讨论,资源管理器64存储与附加文件有关的资源以使资源与附件程序文件相关。在整个处理中使用动态存储器管理器65来在动态存储器内创建与类相关的数据结构。将所获得的数据结构统称为一个内在化映像。然后,将最终的映像写入永久性存储器56。总之,预内在化器67是一小段编码,它控制虚拟机50的组件执行这些预内在化的步骤。

在图4中图示在预内在化两个程序文件之后图3的永久性存储器的进一步的细节。包括第三组程序文件74的多个程序文件73连接到Java应用程序管理器(JAM)76。JAM 76在永久性存储器92内保存一个动态预内在化应用程序的列表。将预内在化的应用程序称作“动态的”是因为在虚拟机的制造和销售之后将这些应用程序添加给虚拟机。

JAM 76连接到一个具有与图3的虚拟机50相同组件的虚拟机72。为了便于图示,在图4中未详细图示虚拟机的所有组件。虚拟机72具有一个在VM处于执行的第一或普通模式时使用的一个字节编码解释器79、一个在VM处于执行的第二或预内在化模式时使用的预内在化器80和程序文件的预加载类81。虚拟机72连接到一个永久性存储器84,所述永久性存储器84包含第一组程序文件的预内在化映像86、第二组程序文件的预内在化映像88以及用于其它程序文件的空间90。

在操作中,当主要使用它的字节编码解释器79以第一或者普通模式操作时,JAM 76控制虚拟机72执行预加载类81和/或预内在化映像86和/或预内在化映像88。通过主要使用它的预内在化器80,JAM76控制虚拟机72预内在化第三组程序文件74。以与所描述的图3的预内在化器67相同的方式,预内在化器80用于执行第三组程序文件74的预内在化。预内在化器80创建第三组程序文件74的映像,然后将其存储在用于其它程序文件的空间90内。另外,JAM 76控制虚拟机72从永久性存储器84内删除第二组程序文件88。JAM 76通过使用在永久性存储器92内存储的一个动态预内在化应用程序列表来维持预内在化映像的相关信息。在预内在化一组应用程序之前,JAM 76从以第二模式操作的虚拟机72获得用于其它程序文件90的空间的容量。这协助JAM 76确定是否可以预内在化一个程序文件组。在一个添加一组程序文件74或者删除已经预内在化的映像88的请求之后,以第二模式操作的虚拟机72也将它的成功或者失败的指示返送给JAM76。

应当指出在图3和图4所示的实施例中,通过第二模式或者预内在化模式重复使用虚拟机的核心组件。因此,虚拟机在本发明中被增强以允许存储已经完全转换成存储器资源地址的映像。

在图5中图示一个处理方法100,说明与虚拟机有关的Java应用程序管理器的各种程序应用执行选项。该处理方法开始于一个开始步骤101。在步骤103,一个用户或者另一个信号源从一组可用程序文件中选择一个程序文件。所选择的程序文件可能已经以预内在化映像的形式存在于该设备上的存储器内,或者也可能不存在。该组程序文件包含预加载的类和/或预内在化的映像和/或虚拟机外部的程序文件。应当理解在图5中未详细图示预加载的类的处理。在步骤105中,确定是否已经创建一个预内在化的应用程序映像。如果已经创建,则该映像将驻留在该包含虚拟机的设备上的永久性存储器内。如果步骤105的结果为“是”,则步骤107提供两个选择:(1)运行程序文件;或者(2)从永久性存储器的预内在化空间中删除这些程序文件。在一种形式中,可以从一个用户接收用户请求以确定所做的选择。假设一开始用户或者其它信号源选择运行这些程序文件。因为这些程序文件存在于永久性存储器的预内在化空间内,所以在步骤109中,由Java应用程序管理器调用普通模式的虚拟机来执行预内在化的映像。一旦执行结束,则抵达与程序文件执行有关的结束步骤100。假设用户或者其它信号源选择从包含虚拟机的设备的永久性存储器中删除程序文件。则在步骤112中,Java应用程序管理器调用第二模式的虚拟机以删除预内在化的映像。应当指出当虚拟机以预内在化模式操作时,删除预内在化的映像是预内在化程序的一个附加功能。一旦删除,则抵达结束步骤113。Java应用程序管理器还将更新永久性存储器内动态预内在化的程序文件的列表。

返回步骤105,假设先前未出现所关注的预内在化的映像。如果步骤105的结果为“否”,则步骤114提供两个选项:(1)运行程序;或者(2)向永久性存储器的预内在化空间添加程序文件。在一种实现方式中,可以响应于用户请求运行该程序文件还是进入预内在化模式来实现上述选择。另一个实施例可以使用一个自动运行的程序来实现这一选择。如果用户或者其它信号源决定运行这些程序文件,则执行步骤116。应当指出步骤116与将由图2的设备执行的未预内在化的程序文件的执行是相同的。步骤116包括一个第一步骤118,其中当以第一或普通模式操作时由虚拟机预内在化这些程序文件。注意到虚拟机的预内在化程序并未用于这个预内在化功能。相反,虚拟机使用各种功能部件,例如验证器、解析器等等来执行预内在化。在步骤120中,在步骤118中已经出现预内在化之后由虚拟机执行这些程序文件。步骤121结束程序的执行。应当指出因为该程序并非一个所存储的预内在化映像,每次为执行选择程序文件时都必需执行步骤118。返回步骤114,如果用户或者其它的信号源选择预内在化这些程序文件,则执行步骤124而不是步骤116。在步骤124中,Java应用管理器调用第二或者预内在化模式的虚拟机以通过上面参考图3所述的方式创建一个预内在化的映像。一旦创建所述的预内在化的映像,将该映像存储在该设备的永久性存储器内。应当指出如果在步骤105为了执行再次选择程序文件,则不需要再次执行步骤124,因为步骤105随后将该处理引导到步骤107。

在图6中图示了另一个可选的实施例处理方法130。处理130开始于步骤131。在步骤131,用户或者其它信号源从一组可用的程序文件中选择一个或多个程序文件。在一种形式中,用于这个选择的可能的“其它信号源”可以包括一个脱离设备的(off-device)程序文件服务器或者另一个脱离设备的信号源。在步骤135中,判断在是否已经在该设备上创建一个预内在化映像。将“在设备上”的标准添加给步骤135的原因在于因为这个实施例说明从一个脱离设备的信号源接收一个已经预内在化的映像的情况以及预内在化程序如何处理这种情况。如果回答为“是”,则步骤137、140、141、143和144分别与图5的步骤107、109、100、112和113完全相同。响应于用户请求执行一个运行或者删除操作,可以确定步骤137。如果回答为“否”,则执行步骤146,其中确定是否已经在其它地方为该设备创建一个预内在化的映像。如果对这个查询的回答为“否”,则步骤148、150、151、152、153、156和158分别与图5的步骤114、116、118、120、121、124和125完全相同。响应于用户请求执行一个运行或者一个预内在化的操作,可以确定步骤148。如果对这个查询的回答为“是”,则执行步骤157。在步骤157中,由Java应用程序管理器调用虚拟机,并不预内在化该映像,而仅将预内在化的映像复制和贴补在该设备的永久性存储器的特定位置上。一旦完成步骤157,抵达结束步骤160。

参考图7,将进一步说明从脱离设备的信号源接收映像的处理方法。这个实施例针对这样的需要即通过显著地减少预内在化的时间来进一步减少应用程序的执行时间。换句话说,可以在用作一个服务器的设备上实现本发明。因此,优点在于在一个脱离设备的服务器或者在类似于现有设备的一个脱离设备的客户机(对等的)上运行Java虚拟机环境。一个脱离设备的映像和一个由设备的虚拟机创建的映像的不同之处在于该映像在该设备的存储器内的存储位置。

一个系统180通常具有第一客户机设备182、带有客户设备仿真的第二客户机设备或服务器181,和未以可重复使用可执行映像的形式驻留在设备182上的应用程序集184。客户机设备182通常包括应用程序管理器204、动态存储器206、永久性存储器220和虚拟机210。在一种形式中,设备181和182的结构与图3的设备45相同。显然可以创建替代的实施例和修改的结构来执行在此所教导的功能。可以使用设备182外部的可选存储设备200来存储附加文件的预内在化的映像,所述存储设备是永久性存储器。

在操作中,由设备181和182外部的一个信号源创建附加文件184。由客户设备仿真181使用它的应用程序管理器185将附加文件184载入设备或者服务器。由工作在第二模式的虚拟机188将这些附加文件预内在化到它的永久性存储器190中。虚拟机188使用动态存储器187支持这一模式。所存储的映像可以也可以不由设备181来执行。如果设备181是一个客户设备,则这个应用程序映像将可能由设备181执行。如果设备181是一个带有客户设备仿真的服务器,则设备181仅用于创建预内在化的映像(即设备181用作一个应用程序服务器)。当设备181用作一个带有客户设备仿真的服务器时,映像可以选择存储在可能位于系统设计选择内任意位置上的永久性存储器200中。当第一客户设备182的应用程序管理器204从永久性存储器200或者从应用程序管理器185接收预内在化的映像时,则仅必需出现预内在化的最后一个步骤。最后一个步骤是图6的步骤157,涉及将预内在化的映像复制和贴补到永久性存储器220内。因此,系统180的作用显然是使设备182不必执行所有的预内在化处理步骤。使用处理能力和动态存储器空间非常有限的低端客户设备,与独立设备相比,本发明能够使用非驻留的应用程序来配置低端客户设备。另外,与每次需要执行非内在化程序时都要执行整个预内在化处理的现有设备相比,在此所教导的低端客户结构更快。

在图8中图示一个实现本发明的设备300。设备300包括处理器300和存储器304。存储器304可以被构成以具有多种不同的结构,图8仅图示与结合现有技术的图所讨论的结构相类似的结构。一个I/O双向连接到处理器302和存储器304,后面两者同样被双向连接。在所图示的形式中,存储器304包括Java应用程序管理器310、虚拟机312、动态存储器314和永久性存储器316。

在操作中,处理器执行预先确定的指令。存储器304的第一部分连接到处理器302,用于向处理器提供指令和数据。在一种形式中,存储器304的第一部分是虚拟机312。存储器304至少包含第一、第二和第三组的一个或多个指令。将要讨论的每组指令是否都包含一个或者多个指令是设计和编程选择的问题,并取决于相对于软件功能需要多少硬件功能。仅为了讨论的目的,在下述关于指令功能的讨论中将假设使用多个指令以最小化硬件的实现。然而,如果希望,在此将要描述的指令功能也可以用单个指令来实现。第一组指令用于接收第一程序文件。第二组指令用于将第一组程序文件预内在化成虚拟机本身的存储结构以创建第一程序文件的可重复使用的可执行的映像。第三组指令用于在存储器304的第二存储部分中存储预内在化的程序文件映像或者可重复使用的可执行的映像。可重复使用的可执行的映像能够在执行之前未内在化的情况下由虚拟机312执行。

图8的存储器304还可以包括第四组指令,用于接收和在存储器内存储一个可重复使用的可执行的映像。当可重复使用的可执行的映像被存储时,由一个内置结构来更新存储器指针以允许在同一设备存储器内到处移动这些映像。因此,存储可重复使用的可执行映像的存储器能够进行动态的存储器调解以有效地使用存储器,并协调存储器以有效地使用可用的地址。这一处理允许对象在设备上移动以创建第二可重复使用的可执行的映像。在将一个可重复使用的可执行的映像存储在一个设备中之后,更新该可重复使用的可执行的映像内的存储器地址以反映它的当前存储器地址。存储器304还可以包括当处理一个用户请求时执行的多个独立的指令,其中响应于用户请求,虚拟机以预内在化模式操作。多个独立的指令可以在存储器304内,用于引起从第二存储器传输预内在化的程序文件映像,所述第二存储器可位于该设备的内部或者外部。存储器304内的另外多个指令可以通过从存储器移动或者全部删除一个预内在化的程序文件来执行用户请求的处理。

通过将一个程序文件预内在化成虚拟机312本身的存储结构来预先创建可重复使用的可执行的映像。在这样一个例子中,虚拟机312能够在执行之前不内在化可重复使用的可执行的映像的情况下执行该可重复使用的可执行的映像。存储器304还可以存储多个独立的指令,用于将可重复使用的可执行的映像移动到该存储器内的一个不同位置上。而且,存储器304可以存储另一组指令,它们能够更新可重复使用的可执行的映像或者预内在化的程序文件映像内的存储器地址。应当理解存储器304还可以存储执行图5和图6的处理的指令。

本发明尤其有利于在便携式无线设备中使用。能够实现本发明的这种便携式设备的例子包括各种设备,例如电话机、互连网络设备(便携式和/或非便携式的)、个人数字助理(PDA)、寻呼机、照相机、摄像机(照相机/录音机)、便携式电视机以及组合多种通信功能的产品。

在上述描述中,已经参考Java编程语言和具体实施例描述了本发明。然而,本领域的普通技术人员将理解在不脱离权利要求书中所述的本发明保护范围的情况下,可以进行各种修改和改变。例如,本发明可应用于能够动态加载的其它高级编程语言。而且,在此教导的软件(例如图3的虚拟机50的软件实现)可以内嵌在一个或多个计算机硬盘、软盘、3.5英寸盘、计算机存储磁带、磁鼓、静态随机访问存储器(SRAM)单元、动态随机访问存储器(DRAM)单元、电可擦除(EEPROM、EPROM、闪存)单元、非易失性单元、铁电或铁磁存储器、压缩盘(CD)、激光盘、光盘和任何类似的计算机可读介质。因此,说明书和附图将被视为说明性的,而非限制性的,所有这些修改将包括在本发明的范围内。

上面已经针对具体实施例描述了利益、其它优点和问题的解决方法。然而,利益、优点、问题的解决方法和可能导致出现任何利益、优点或解决方法或者变得更显然的任何单元都不会被解释为任何或所有权利要求的关键、必需或者基本的特征或单元。如在此所使用的,术语“包括”或者它的任何同义词都是指非排除性的包含,例如包含一个单元列表的处理、方法、产品或者设备并不仅包含这些单元,还可以包含未明确列出或者并非这些处理、方法、产品或设备固有的其它单元。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号