提供模块化本机方法启用系统的方法和装置的制作方法

文档序号:6655384阅读:129来源:国知局
专利名称:提供模块化本机方法启用系统的方法和装置的制作方法
技术领域
本公开一般地涉及受管理运行时环境(managed runtime environment),并且更具体地,涉及提供模块化本机方法启用(native method invocation)系统的方法和装置。
背景随着应用向受管理运行时环境(MRTE)(例如Java虚拟机(JVM)和Microsoft.NET提供的公共语言运行时(CLR))移植,非受管理应用组件可能需要集成到新的基于MRTE的系统中或与之共存。具体地,受管理代码(managed code)是在MRTE的控制下执行的代码(例如,任何用Microsoft的C#(“C-sharp”)或者Visual Basic.NET编写的代码),而非受管理代码(unmanaged code)是在MRTE之外执行的代码(例如,COM组件和WIN32应用程序接口(API)函数)。然而,低级的平台组件和传统应用组件可能与新的基于MRTE的系统不兼容。即,一些传统应用组件被保持在MRTE之外(即非受管理代码),因为目前的MRTE不能理解传统应用组件的某些平台专用特征。将一些传统应用组件保持在MRTE之外的另一个原因是将传统应用组件转换成受管理代码过程中涉及到的高成本。
例如平台启用(platform invoke)的本机方法启用(NMI)是使受管理代码能够调用在例如MicrosoftWIN32 API的动态链接库(DLL)中实现的非受管理函数的服务。典型地,NMI组件在公共语言基础结构(CLI)运行时(runtime)期间被用来改善处理器系统(即平台)的性能。具体地,NMI组件与虚拟机的许多不同的数据结构交互以处理受管理代码和非受管理代码。然而,目前不存在针对NMI组件的实现的标准,从而从一个虚拟机到另一个,与NMI组件相关联的信息可以被定制用于优化。
附图简要说明

图1是在现有系统中配置的示例性本机方法启用(NMI)系统的框图表示。
图2是根据本文公开的本发明的教导的实施方法所配置的示例性模块化NMI系统的框图表示。
图3是示出如图2中的示例性模块化NMI系统的额外细节的框图表示。
图4是与NMI相关联的示例性代码的代码表示,所述NMI可以被用于实现如图3中的示例性模块化NMI系统。
图5是示例性的机器可访问指令的流程图表示,所述机器可访问指令可以被执行以实现如图3中的示例性模块化NMI系统。
图6是可以被用来实现如图3中的示例性模块化NMI系统的示例性处理器系统的框图表示。
详细描述虽然以下公开了示例性系统,所述示例性系统包括,除其他组件以外,在硬件上被执行的软件和固件,但是,应该注意到,这样的系统仅仅是描述性的,并且不应被视为是限制性的。例如,可以预期,所公开的硬件、软件和/或固件的一些或全部可以被排他地实施在硬件中、排他地实施在软件中、排他地实施在固件中,或是被实施在硬件、软件和/或固件的某种组合中。
参照图1,以已知方式配置的NMI系统100通常包括虚拟机(VM)110和NMI组件120。VM 110是工作为编译器和处理器系统(例如图6的处理器系统1000)中处理器之间的接口的执行环境(即,运行时),例如Java虚拟机(JVM)和Microsoft.NET提供的公共语言运行时(CLR)。具体地,VM 110包括编排语言(marshaling language,ML)桩(stub)112、元数据114、垃圾回收器(GC)116和预备桩(prestub)118。使用在这里,“桩”是指在方法执行期间完成各种任务的动态生成的代码的一部分。使用在这里,术语“方法”是指用于操纵数据的一个或更多个应用、程序、函数、例程或子例程。元数据114(即NMI信息)包括本机方法签名、方法返回类型,以及例如用于生成ML桩112的本机库路径和/或本机库名称的调用点信息。本领域普通技术人员将容易意识到,GC 116恢复不再被方法使用的存储器储存空间,从而该存储器储存空间对该方法的其他进程(process)和/或其他方法可用。预备桩118包括在运行时期间将对方法的NMI调用指示到入口点的代码。一般地,如果处理器以其本机代码来操作,那么处理器的性能可以被优化,因为本机代码是被编译成用特定处理器运行的代码。因此,当本机方法被VM 110启用时,预备桩118调入(call into)NMI组件120以生成本机方法的本机桩。
NMI组件120通常包括多个NMI桩150和NMI缓存(cache)160。如以下详细描述的,所述多个NMI桩150包括已编译桩154、已解释桩156和平台专用桩158。NMI缓存160包括ML桩缓存162和本机桩缓存164。ML桩缓存162储存ML桩112,而本机桩缓存164储存为执行本机方法而基于ML桩112生成的本机桩(未示出)。
一旦NMI组件120通过预备桩118被VM 110调用,NMI组件120在运行时期间基于VM 110的元数据114来生成用于启用本机方法的ML桩112。具体地,NMI组件120将ML桩112翻译成作为本机桩的部分的本机指令(即数据编排)。如果数据编排是简单的(例如只有同构(isomorphic)的类型参数存在),ML桩112可以被编译成本机指令(即已编译桩154)。可替换地,如果数据编排是复杂的,ML桩112可以在运行时被解释(即已解释桩156)。GC 116在本机桩的执行期间被禁用(disable),并且在本机桩的执行之后被使能(enable),以确保被传递到本机方法的NMI方法签名的参数在存储器(例如图6的主存储器1030)中未被移动。在基于ML桩112生成本机桩之后,本机桩被储存在本机桩缓存164中。结果,在方法的后续调用期间,NMI组件120可以从本机桩缓存164取得本机桩。
在图2的实施例中,图示的模块化NMI系统200包括被一般性地示为VM#1212、VM#2214和VM#n 216的一个或更多个VM 210、模块化NMI组件220和NMI适配器230。一般地,NMI适配器230工作为VM 210和模块化NMI组件220之间的接口,以解决任何不匹配/兼容性问题,从而模块化NMI组件220可以被插入(plug into)到不同的VM 210的任何一个中。和连同图1描述的VM 110和模块化NMI组件120直接与彼此交互形成对照,VM 210和模块化NMI组件220与NMI适配器230交互。NMI适配器230作为VM 210和模块化NMI组件220之间的包装器(wrapper)。
在示例性的操作中,VM#1 212可以调用NMI适配器230来启用模块化NMI组件220。NMI适配器230将从VM#1 212接收到的NMI信息翻译成模块化NMI组件220的API。此外,模块化NMI组件220可以请求NMI适配器230从VM 210取得额外的信息。NMI适配器230将模块化NMI组件220与不同的VM实现分开,从而模块化NMI组件220独立于任何特定的VM(即独立的NMI组件)。在不同VM 210中使用的数据结构与模块化NMI组件220是不相关的,因为模块化NMI组件220通过NMI适配器230从不同VM 210中的任何一个取得信息,所述NMI适配器230以模块化NMI组件220知道的方式格式化取得的数据。即,NMI适配器230允许模块化NMI组件220被插入到不同VM 210中的任何一个。因此,模块化NMI组件220可以连同VM#1 212、VM#2 214、VM#n 216和/或任何其他适当的执行环境一起操作。
在图3的实施例中,图示的VM 312包括元数据314、GC 316和预备桩318。模块化NMI组件320包括NMI桩管理器340、多个NMI桩350和NMI缓存360。NMI桩管理器340是模块化NMI组件320中的核心组件,因为NMI桩管理器340处理来自VM 312的通过NMI适配器330的NMI调用。具体地,NMI桩管理器340从NMI适配器330接收请求完成NMI调用的VM请求,从应用和VM取得运行中后台(background)信息,并且分析该VM请求和运行中后台信息,以动态地从多个NMI桩350中选择合适的桩(即,已编译桩354、已解释桩356和/或平台专用桩358)来处理NMI调用。和连同图1描述的NMI组件120形成对照,模块化NMI组件320而不是VM 312生成ML桩352,因为NMI适配器330允许模块化NMI组件320定制关于VM 312的优化。在运行时期间,模块化NMI组件320基于ML桩352生成本机桩以执行本机方法。NMI缓存360包括ML桩缓存362和本机桩缓存364。模块化NMI组件320在ML桩缓存362中储存ML桩352,并且在本机桩缓存364中储存基于ML桩352生成以执行本机方法的本机桩。
在图4的实施例中,图示的代码400包括用于生成ML桩352的“DllImport”函数410和“外部”方法声明420,以通过模块化NMI组件320执行来自VM 312的NMI调用。具体地,模块化NMI组件320将控制传递到“DllImport”函数410,以定位“mylib.dll”中的本机代码库(例如DLL),并且将DLL加载到存储器(例如图6的存储器1030)中。此外,模块化NMI组件320定位本机方法在存储器中的地址,并将参量(argument)(例如整数、字符串、数组、结构等)推入栈中。“外部”方法声明420指示与NMI调用相关联的本机方法(例如方法“foo”)在VM 310外。结果,在将控制转移到本机方法之前,模块化NMI组件320可以生成ML桩352,以生成本机桩。
回头参照图3,模块化NMI组件320实现多个NMI桩350以执行不同的优化策略。即,所述多个NMI桩350中的每一个对应于特定的优化策略。具体地,已编译桩354将ML桩352解析并编译成本机指令,从而在ML桩352中没有运行时支持函数(runtimesupport function)。已编译桩354可以比已解释桩356运行得更快,但是可能包括对正被编排的参数的限制。当NMI调用正在执行时,已解释桩356解析和解释ML桩352。已解释桩356包括许多用于完成栈操纵和数据编排的运行时支持函数。平台专用桩358应用与具体平台相关的优化。例如,可以使用流式SIMD扩展(SSE)和/或SSE2指令,以改善使用IntelPentium(奔腾)技术、IntelItanium(安腾)技术和/或Intel个人因特网客户体系结构(personal Internet client architecture,PCA)技术中的一种或更多种来实现的处理器系统的性能。
表示可以被处理器执行以提供模块化NMI系统的机器可访问指令的流程图500在图5中被图示。本领域的普通技术人员将意识到,所述指令可以使用许多不同的编程代码中的任何代码以许多种不同方式中的任何方式来实现,所述编程代码储存在许多种计算机可访问介质的任何一种上,所述计算机可访问介质例如易失性或非易失性存储器或者其他大容量储存设备(例如,软盘,CD和DVD)。例如,机器可访问指令可以被实施在诸如可擦除可编程只读存储器(EPROM)、只读存储器(ROM)、随机访问存储器(RAM)、磁介质、光介质和/或任何其他适当类型的介质的机器可访问介质中。可替换地,机器可访问指令可以用可编程门阵列和/或专用集成电路(ASIC)实施。此外,尽管图5示出特定的动作顺序,但是本领域的普通技术人员将意识到,这些动作可以以其他时间顺序完成。再者,结合图3的示例性模块化NMI系统,流程图500仅被提供和描述为提供模块化NMI系统的一种方式的实施例。
在图5的实施例中,流程图500以NMI适配器330接收与由VM 312发起的NMI调用相关联的NMI信息开始(方框510)。例如,NMI信息可以包括本机方法签名、方法返回类型、本机库路径和本机库名称。相应地,NMI适配器330为模块化NMI组件320翻译NMI信息(框520)。NMI适配器330将翻译的NMI信息转发到NMI组件320以生成ML桩352(即数据编排)(框530)。基于ML桩352,模块化NMI组件320生成与NMI调用相关联的本机桩(框540)。在本机桩的执行期间,NMI适配器330禁用GC 316(框550)。如上面注意到的,NMI适配器330禁用GC 316,从而传递到本机方法的NMI方法签名的参数在存储器中不被移动。在本机桩执行后,NMI适配器330再次使能GC 316,从而GC 316可以提供其服务(框560)。此外,模块化NMI组件320在本机桩缓存364中储存本机桩(框570)。结果,模块化NMI组件320和NMI适配器330提供不同执行环境中定制的优化。
此处公开的方法和装置完全适合使用欧洲计算机制造商协会(ECMA)公共语言基础结构(CLI)(第二版,2002年12月)和ECMA C#语言规范(第二版,2002年12月)实现的源代码。然而,本领域的普通技术人员将意识到,本公开的教导可以应用于以其他的标准和规范的源代码。
图6是适于实现此处公开的方法和装置的示例性处理器系统1000的框图。处理器系统1000可以是桌面型计算机、膝上型计算机、笔记本式计算机、个人数字助理(PDA)、服务器,因特网应用设备(appliance)或任何其他类型的计算设备。
图6中示出的处理器系统1000包括芯片组1010,所述芯片组1010包括存储器控制器1012和输入/输出(I/O)控制器1014。众所周知,芯片组通常提供存储器和I/O管理功能,以及可被处理器1020访问或使用的多个通用和/或专用寄存器、计时器等。处理器1020用一个或更多个处理器实现。例如,处理器1020可以用IntelPentium(奔腾)技术、IntelItanium(安腾)技术、IntelCentrinoTM(迅驰)技术和/或IntelXScale技术中的一种或更多种来实现。可替换地,其他处理技术可以用于实现处理器1020。处理器1020可以包括缓存1022,如本领域的普通技术人员将容易意识到的,缓存1022可以用一级统一缓存(L1),二级统一缓存(L2),三级统一缓存(L3)和/或任何其他适合的结构实现以储存数据。
常规地,存储器控制器1012完成使处理器1020能够经由总线1040访问主存储器1030并与之通信的功能,所述主存储器1030包括易失性存储器1032和非易失性存储器1034。所述易失性存储器1032可以用同步动态随机访问存储器(SDRAM)、动态随机访问存储器(DRAM)、RAMBUS动态随机访问存储器(RDRAM)和/或任何其他类型的随机访问存储器设备来实现。非易失性存储器1034可以用闪存存储器、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)和/或其他期望类型的存储器设备来实现。
处理器系统1000还包括耦合到总线1040的接口电路1050。接口电路1050可以用任何类型的已知接口标准来实现,所述接口标准例如以太网接口、通用串行总线(USB)、第三代输入/输出接口(3GIO)接口和/或任何其他适当类型的接口。
一个或更多个输入设备1060可以被连接到接口电路1050。一个或多个输入设备1060允许用户向处理器1020输入数据和命令。例如,一个或多个输入设备1060可以用键盘、鼠标、触摸敏感显示器、跟踪板、跟踪球、指向柱(isopoint)和/或语音识别系统实现。
一个或更多个输出设备1070也被连接到接口电路1050。例如,一个或多个输出设备1070可以用显示设备(例如,发光二极管显示器(LED),液晶显示器(LCD),阴极射线管(CRT)显示器,打印机和/或扬声器)实现。因此,除其他设备外,接口电路1050一般包括图形驱动器卡。
此外,处理器系统1000还可以包括一个或更多个大容量储存设备1080以储存软件和数据。这样的一个或多个大容量储存设备1080的实施例包括软盘和驱动器、硬盘驱动器、致密盘和驱动器,以及数字多用途盘(DVD)和驱动器。
接口电路1050还可以包括例如调制解调器或网络接口卡的通信设备,以便于经由网络与外部计算机交换数据。处理器系统1000和所述网络之间的通信链路(link)可以是任何类型的网络连接,例如以太网连接、数字用户线(DSL)、电话线、蜂窝电话系统、同轴电缆等。
对一个或多个输入设备1060、一个或多个输出设备1070、一个或多个大容量储存设备1080和/或所述网络的访问一般由I/O控制器1014以常规的方式控制。具体地,I/O控制器1014完成使处理器1020能够经由总线1040和接口电路1050与一个或多个输入设备1060、一个或多个输出设备1070、一个或多个大容量储存设备1080和/或所述网络通信的功能。
尽管图6中示出的组件被描绘成处理器系统1000内的分离的方框,但是由这些方框中的一些来完成的功能可以被集成到单个半导体电路中,或者可以用两个或更多个分离的集成电路实现。例如,虽然存储器控制器1012和I/O控制器1014被描绘成芯片组1010内的分离的方框,但是本领域的普通技术人员将容易地理解,存储器控制器1012和I/O控制器1014可以被集成到单个半导体电路内。
虽然这里已描述了某些示例性方法、装置和制品,但是本专利的覆盖范围不限于此。相反,本专利覆盖正好落入所附权利要求书在字面上或者在等同原则下的范围内的所有方法、装置和制品。
权利要求
1.一种方法,包括从一个或更多个虚拟机接收与本机方法启用(NMI)调用相关联的NMI信息;通过NMI适配器翻译所述NMI信息;以及向模块化NMI组件提供所述翻译的NMI信息以生成本机桩。
2.如权利要求1所定义的方法,其中从所述一个或更多个虚拟机接收与所述NMI调用相关联的NMI信息的操作包括从所述一个或更多个虚拟机接收与平台启用函数调用相关联的信息。
3.如权利要求1定义的方法,其中从所述一个或更多个虚拟机接收与所述NMI调用相关联的NMI信息的操作包括接收本机方法签名、方法返回类型、本机库路径和本机库名称中的一个。
4.如权利要求1所定义的方法,其中从所述一个或更多个虚拟机接收与所述NMI调用相关联的NMI信息的操作包括从Java虚拟机和公共语言运行时中的一个接收与所述NMI调用相关联的NMI信息。
5.如权利要求1所定义的方法,其中向NMI模块提供所述翻译的NMI信息的操作包括向平台启用模块提供所述翻译的NMI信息。
6.如权利要求1所定义的方法,还包括控制与所述一个或更多个虚拟机相关联的垃圾回收器。
7.如权利要求1所定义的方法,还包括基于通过所述NMI模块的所述翻译的NMI信息生成编排语言桩,并且将所述编排语言桩储存在所述NMI模块内。
8.一种具有指令的机器可访问介质,当所述指令被执行时,导致机器从一个或更多个虚拟机接收与本机方法启用(NMI)调用相关联的NMI信息;通过NMI适配器翻译所述NMI信息;以及向NMI模块提供所述翻译的NMI信息以生成本机桩。
9.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器通过从所述一个或更多个虚拟机接收与平台启用函数调用相关联的信息来从所述一个或更多个虚拟机接收与所述NMI调用相关联的NMI信息。
10.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器通过接收本机方法签名、方法返回类型、本机库路径和本机库名称中的一个来从所述一个或更多个虚拟机接收与所述NMI调用相关联的NMI信息。
11.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器通过从Java虚拟机和公共语言运行时中的一个接收与所述NMI调用相关联的NMI信息来从所述一个或更多个虚拟机接收与所述NMI调用相关联的NMI信息。
12.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器通过向平台启用模块提供所述翻译的NMI信息来向NMI模块提供所述翻译的NMI信息。
13.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器控制与所述一个或更多个虚拟机相关联的垃圾回收器。
14.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器基于通过所述NMI模块的所述翻译的NMI信息生成编排语言桩,并且将所述编排语言桩储存在所述NMI模块内。
15.如权利要求8所定义的机器可访问介质,其中所述机器可访问介质包括可编程门阵列、专用集成电路、可擦除可编程只读存储器、只读存储器、随机访问存储器、磁介质和光介质中的一个。
16.一种装置,包括一个或更多个虚拟机,所述一个或更多个虚拟机提供与本机方法启用(NMI)调用相关联的NMI信息;NMI模块,所述NMI模块生成本机桩;以及耦合到所述虚拟机和所述NMI模块的NMI适配器,所述NMI适配器接收所述NMI信息,翻译所述NMI信息并且向所述NMI模块提供所述翻译的NMI信息。
17.如权利要求16所定义的装置,其中所述NMI适配器控制与所述虚拟机相关联的垃圾回收器。
18.如权利要求16所定义的装置,其中所述虚拟机包括Java虚拟机和公共语言运行时中的一个。
19.如权利要求16所定义的装置,其中所述NMI模块包括平台启用模块。
20.如权利要求16所定义的装置,其中所述NMI模块基于通过所述NMI模块的所述翻译的NMI信息生成编排语言桩,并且将所述编排语言桩储存在所述NMI模块内。
21.如权利要求16所定义的装置,其中所述NMI信息包括本机方法签名、方法返回类型、本机库路径和本机库名称。
22.一种处理器系统,包括动态随机访问存储器(DRAM);以及耦合到所述DRAM的处理器,所述处理器识别来自一个或更多个虚拟机的与本机方法启用(NMI)调用相关联的NMI信息,通过NMI适配器翻译所述NMI信息,并且向模块化NMI组件提供所述翻译的NMI信息以生成本机桩。
23.如权利要求22所定义的处理器系统,其中所述NMI适配器控制与所述一个或更多个虚拟机相关联的垃圾回收器。
24.如权利要求22所定义的处理器系统,其中所述虚拟机包括Java虚拟机和公共语言运行时中的一个。
25.如权利要求22所定义的处理器系统,其中所述模块化NMI组件包括平台启用模块。
26.如权利要求22所定义的处理器系统,其中所述处理器基于通过所述NMI模块的所述翻译的NMI信息生成编排语言桩,并且将所述编排语言桩储存在所述模块化NMI组件内。
27.如权利要求22所定义的处理器系统,其中所述NMI信息包括本机方法签名、方法返回类型、本机库路径和本机库名称。
全文摘要
本文描述了提供模块化本机方法启用(NMI)系统的方法和装置。在示例性的方法中,从一个或更多个虚拟机接收与NMI调用相关联的NMI信息。所述NMI信息通过NMI适配器被翻译。为了生成本机桩,翻译的NMI信息被提供给模块化NMI组件。
文档编号G06F9/455GK1934532SQ200580009245
公开日2007年3月21日 申请日期2005年1月14日 优先权日2004年2月2日
发明者H·赵, 海兰·玛丽·芒廷, 柯克·邓萨维奇, G·朱 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1