CN1392482A - 透明地转换和执行应用程序的客户端-服务器结构 - Google Patents
透明地转换和执行应用程序的客户端-服务器结构 Download PDFInfo
- Publication number
- CN1392482A CN1392482A CN02141347.9A CN02141347A CN1392482A CN 1392482 A CN1392482 A CN 1392482A CN 02141347 A CN02141347 A CN 02141347A CN 1392482 A CN1392482 A CN 1392482A
- Authority
- CN
- China
- Prior art keywords
- code
- client
- server
- cache
- code segment
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及在一个客户端-服务器环境中应用程序的执行。提供一个服务器(12),包含:一个把该服务器(12)耦合到一个网络(16)的网络接口,该网络反过来与一个客户端(14)相耦合;存储一个客户端应用程序的一个应用程序代码源(18);以及一个与应用程序代码源(18)和网络接口相耦合的服务器代码管理器,其中该服务器代码管理器从应用程序代码源(18)中导出以客户端CPU(32)所需要的一个本地执行格式的本地二进制代码段,而且一旦从客户端(14)中接收到请求,就将该本地二进制代码段传送到客户端(14)。
Description
本发明的技术领域
本发明涉及在一个客户端一服务器环境中应用程序的执行。更具体地说,本发明涉及一种客户端一服务器结构,其中一个应用程序驻留在一个服务器上,而且部分应用程序由该服务器转换到可由一个客户端执行的本地代码,并且被传输到该客户端、缓存在客户端中,并由该客户端执行。
相关技术的描述
在计算技术领域,由一个网络连接在一起的服务器和客户端经常协作以执行应用程序。在该技术领域中有许多已知的模型有助于以这种方式执行应用程序。例如,长期以来所知的是使用一个文件服务器储存数据和应用程序。设法使用这个模式执行应用程序的一个客户端以类似于存取在该客户端本机硬盘上的文件的方式,简单地存取在该服务器上的文件。另外,长期以来所知的是使用进程间通信来连接分布式应用程序,诸如一个数据库应用程序在服务器上执行而一个客户端应用程序在一个客户端上执行。这些模型传统上在专用的高带宽网络配置中,诸如在一个中等规模商业应用中连接客户端和服务器的一个以太网中,是很流行的。在这样的环境中,与计算平台多样性和安全性有关的问题是可管理的。
令人遗憾的是,当这些模型在更大、更多样化的网络,诸如Internet中使用时,被证明是不切实际的。一个问题是带宽。许多客户端使用相对慢的方法、诸如拨号调制解调器连接Internet。即使是高速的连接、诸如数字用户线(DSL)和电缆调制解调器一般比一个以太网连接慢一两个数量级。
另一个问题是安全性。上百万的电脑连接到Internet,而且恶意的企图强行进入客户端和服务器是普遍的。此外,软件侵权是一个经常涉及的问题。如果一个应用程序在Internet上可用,供应商控制该应用程序的分发是困难的。最后,连接到Internet的设备种类是很多样化的。不仅有许多种类的计算平台连接到Internet,而且有许多种类的允许Internet的网络应用正变得流行。我们能够想象,与管理一个经由Internet、使用服务器和客户端的应用程序的执行有关的问题是令人气馁的。
已经发展了三个流行的模型来解决这些问题。这些在此处将会涉及的模型为服务器执行模型、下载和安装模型、以及虚拟机模型。在服务器执行模型中,该应用程序代码保持驻留在该服务器上,而且在该服务器上执行。遵循该服务器执行模型的一个应用程序的例子是用于Web的QuickenTurboTax?,其是Intuit有限公司的一个产品。这个应用程序的一个用户使用一个浏览器,诸如微软公司的一个产品Internet Explorer,或者NetscapeCommunications公司的一个产品Netscape?来访问该TurboTax网站。用于Web的TurboTax是一个交互的在线税预备工具,其使用保持在一个安全网站上的软件。不同于在一个零售店购买并且安装在一台计算机上的软件产品,用于Web的TurboTax不用下载任何软件到一台计算机上就可以工作。当该应用程序的一个用户回答问题时,该数据被存储在一个服务器上,而且该服务器执行所有准备该用户的税表所必需的操作。
服务器执行模型具有许多优点。首先供应商很容易的维护该应用程序,因为该应用程序在该服务器上在任何时候更新。并且,这个模型提供了极好的安全性并且防软件侵权,因为该应用程序代码从不被传输到该客户端。最后,这个模型提供了客户端平台无关性,因为客户端全部需要的仅仅是一个能够与该服务器交互的网络浏览器。
不幸的是,该服务器执行模型具有几个缺点。所有的用户数据必须被存储在该服务器上,这增加了该服务器需要的存储器资源的数量。此外,某些用户可能会对把个人信息存储在一个供应商的服务器上感到不安。此外,取决于该应用程序,这个模型可能需要大量的带宽。例如,如果使用一个服务器执行模型实现了一个电子表格应用,而且如果一个用户企图创造该电子表格数据的一个图,该图形数据必须被传输到该客户端,这能够是费时的。此外,必须在该服务器和客户端之间一直存在一个可靠的连接。最后,并且或许是重要的,这个模型具有弱的可扩展性。当附加的客户试图访问该应用程序时,该必须为每个客户端执行该应用程序。
或许最通用的模型是下载并且安装模型。在这个模型中,应用程序存储在该服务器上,并且被下载和安装在该客户端上。传统上,该服务器为每种客户端平台维护一个单独的应用程序版本。例如,如果一个用户希望安装一个应用程序,诸如Netscape,该用户访问一个由Netscape Communications公司维护的网站,并且下载设计成能利用该用户的计算机系统操作的应用程序版本到一个目录里,并且安装该应用程序。此外应用程序插件遵循该下载并且安装模型。例如,如果一个用户试图使用Internet Explorer播放一个编码供RealNetworks公司的一个产品RealPlayer?使用的音频文件,该用户将会被导向到一个下载并且安装该RealPlayer插件到Internet Explorer中的网站。
该下载并且安装模型还可以在某种程度上是自动的。例如,最近微软公司的产品Windows?操作系统版本包含一个自动更新特征,其为自动地检查一个Microsoft网址来获得对该操作系统的更新。如果发现了一个更新,该用户被给于下载并且安装该更新的选项。
该下载并且安装模型的一个优点是它是高度可扩展的,而且不需要在该客户端和服务器之间的一个连接来执行该应用程序。一旦应用程序被下载和安装了,客户端提供存储器和执行资源,而且不再需要和服务器的相互作用。因此,许多客户端能够访问该应用程序,而不需要附加的服务器资源。当然,这个优点提供了几个缺点。例如,该应用程序以一个持久的形式存储在该客户端上,因此把该应用程序暴露到软件侵权上,而且削弱了按使用收费商业模型的适用性。
此外,软件管理的负担被推给客户。更新应用程序,安装补丁,以及通过卸载老的、不需要的应用程序来释放资源是复杂的任务,而且期望在该客户端避免这些任务。例如,许多国际互联网用户都熟悉与这样的事件有关的问题,这样的事件为点击某个需要某个插件的连接、并且发现当前安装在用户的计算机上插件的版本是过时的。
该下载并且安装模型此外需要在客户端上大量的存储器资源,因为客户端必须存储全部下载的应用程序。这对于具有有限资源的客户端、类似嵌入、便携、或者移动系统来说能够是一个壁垒。
虚拟机模型解决了该下载并且安装模型的一些局限性。一个遵循该虚拟机模型的流行技术是Java?,其是Sun Microsystems公司的商标。考虑一个希望从一个网络浏览器访问一个Java应用程序的用户。对该Java应用程序的引用可以嵌入到一个网页中。当该用户点击一个连接以调用该Java应用程序时,该应用程序被透明地和安全地下载到该用户的计算机。然后该应用程序由一个建入到该网络浏览器中的Java虚拟机处理。该虚拟机一般执行一系列安全性检查然后通过解释该Java代码,以把这个代码转换到由该用户客户端计算机的中央处理器(CPU)执行的本地指令里,来执行该应用程序。该虚拟机起在各种计算机和操作系统上的一致接口作用,以便使相同的Java小程序在IBM兼容PC、Macintoshe、UNIX?工作站、网络计算机、及其他设备上的浏览器中运行。通过使用一个“运行时编译执行”(JIT)编译程序能够提高虚拟机代码的性能。该JIT编辑器把该虚拟机代码编译到比解释的代码更有效地、在该用户客户端计算机上执行的本机代码中。
该虚拟机模型是与平台无关的。因此,一个适当编写的应用程序能够在任何具有一个解释器或者一个JIT编译器的平台上操作。此外,因为每当访问在该服务器上的应用程序时能够下载该应用程序,管理该应用程序的负担能够容易地从用户传递到该应用程序供应商。此外,虚拟机模型应用程序趋向于更抵抗软件侵权。然而,侵犯版权仍然是一个问题,因为该虚拟机代码被传递到了客户端。虽然该虚拟机模型与服务器执行模型相比具有更好的可扩展性,因为执行出现在客户端,但是和该下载和安装模型相比是具有更差的可扩展性,因为每当执行它时,一般访问在服务器上的的虚拟机模型应用程序。此外注意:根据一个虚拟机模型的应用程序是如何实现的,在该服务器和客户端之间的一个可靠连接可以是或者可以不是需要的。
虚拟机模型仍然具有几个缺点。例如,许多应用程序在一个虚拟机格式中是不可用的。此外,在某些领域、诸如嵌入式设备,Java的接受性仍然是一个未解决的问题。此外,虚拟机总是引入某些性能开销(解释或者编译),其在某些情况中是不受欢迎的。最后,该虚拟机模型不支持传统代码应用程序,这些程序一般为在一个专用计算机平台上本地执行而编码。
此外虚拟机解释器使用了在客户端中不多数量的资源。例如,一个典型的Java虚拟机能够需要300到1000千字节的持久存储器,其能够包含可获得用于在一个嵌入设备中存储代码的存储器的一个重要部分。注意到,一个典型的嵌入设备可能仅仅具有16兆字节的存储器。此外,JIT编译器一般需要明显较大数量的持久存储器。
从以上的讨论能够看出,这些模型没有一个对与一个客户端和服务器协作来执行一个应用程序有关的问题提供了一个完全可接受的解决方案。在该技术领域所需要的是单个结合服务器执行模型的软件侵权、客户端存储器需求、应用程序代码维护、和平台无关性的属性,下载并且安装模型的可扩展性、传统代码支持和性能属性,该下载并且安装模型的客户-服务器连接属性,以及该虚拟机模型的可扩展性、应用程序代码维护、平台无关性属性的模型。
发明概述
本发明是一个客户端-服务器结构,其中一个应用程序驻留在该服务器上。当一个客户首先设法执行该应用程序时,该服务器经由一个网络连接传送本地二进制码部分到该客户端。该客户端在一个代码高速缓存中缓存该部分并且从该高速缓存中本地地执行这部分。
该服务器包含一个应用程序代码源和一个服务器代码段管理器。如果该应用程序代码源不是以该客户端的本地二进制格式的话,该服务器还可以包含一个应用程序代码转换管理器。该应用程序代码转换管理器把该应用程序源编译或者转换到该客户端所需要的本地二进制格式中。该服务器能够是在该技术领域已知的任何类型的服务器,诸如一个文件服务器或者一个网络服务器。
客户端能够是在该技术领域已知的任何类型的客户端、诸如一个计算机工作站、一个嵌入设备、一个网络应用、一个个人数字助理(PDA)、一个蜂窝电话、或者一个外围设备。该客户端包含一个客户端代码段管理器、一个代码高速缓存链接器和管理器、一个代码高速缓存、和一个中央处理器(CPU)。该网络表示在该技术领域已知的任何类型网络、诸如一个专用以太网或者Internet。
该服务器代码段管理器负责经由该网络提供来源于该应用程序代码源的二进制代码部分到该客户端。在该客户端内,当启动一个应用程序时,该客户端代码段管理器要求来自该服务器的服务器代码管理器的代码段。客户端该代码段,并且传递该代码段到代码高速缓存链接器和管理器。该代码高速缓存链接器和管理器把该代码段和任何其他保存在该代码高速缓存中的部分连接在一起,并且把该部分发送到该代码高速缓存中。在该部分被发送到该代码高速缓存中之后,控制转到在该代码高速缓存中代码段的入口点,然后该客户端CPU开始执行该代码段。
在该代码高速缓存中的代码段由该客户的CPU本地执行,直到获得一个到不在该代码高速缓存里的一个代码段的分支为止。在这一点处,控制传递回该客户代码段管理器,其从该服务器请求包含该分支目标地址的代码段。然后该服务器传送需要的代码段到该客户端,该代码高速缓存链接器和管理器把新接收的代码段连接到该代码高速缓存中,而且该客户端的CPU继续执行在该代码段中新接收的代码段。这个处理过程继续进行直到该应用程序已经完成执行为止。
本发明把现有技术的客户-服务器执行模型的最佳属性组合到一个单一的执行模型中。特别地,本发明是高度可扩展的,因为执行发生在客户端上。此外,因为在客户端发生的执行使用保存在一个代码高速缓存的本地二进制码段中,本发明可能比现有技术的虚拟机(VM)解释器快得多。然而,由于该应用程序保存在服务器端,用户被免除了应用程序管理的负担。
本发明能够用任何类型的客户端CPU操作。此外,应用程序能够以各种代码源格式,诸如一个本地二进制格式、一种程序设计语言的源代码文本格式、或者一个VM代码格式,存在于服务器上,由此允许本发明支撑传统的应用程序以及现在和将来的应用程序。因此,本发明最好地定位于提供一个能够与一个不断增加的CPU指令集合和应用程序代码格式系列一起工作的、有价值的客户-服务器执行模型。
附图简要说明
图1是一个根据本发明,说明由一个网络连接在一起的一个客户端和一个服务器的简化框图。
图2A、2C和2B,合起来是一个流程图,说明根据本发明一个应用程序是如何执行的。
图3是图1的服务器的一个框图,并且说明该本发明如何能够管理各种应用程序代码源格式以便于在各种客户端CPU上执行。
图4说明了以图1的客户端的本地二进制格式的一个应用程序,如同驻留在图1的服务器上的应用程序。
图5说明了在图4的应用程序已经完成在该客户端上执行了之后,并假定从该服务器检索的代码段还没有从该代码高速缓存中清除,保存在图1的客户端的一个代码高速缓存中的代码段。
最佳实施例的详细说明
本发明是一个客户端-服务器结构,其中一个应用程序驻留在该服务器上。当一个客户首先设法执行该应用程序时,服务器传送本地二进制代码段到该客户端,该客户端在一个代码高速缓存中缓存该段并且从该高速缓存中本地执行该段。该应用程序源能够以各种格式,诸如一个编程语言的源代码文本格式、一个本地二进制代码格式、或者一个虚拟机格式,在服务器上提供。如果在该服务器上的应用程序源不是以该客户端的本地二进制格式,则该服务器把该源码转换到由该客户端所需的本地二进制格式中。在该应用程序开始在该客户端上执行之后当该应用程序试图转移到一个没有被高速缓存的代码段时,客户端从该服务器请求代码段,并且服务器传送一个或多个附加的代码段。该代码段的粒度能够被容易地调节以平衡服务器端和客户端执行以及网络带宽效率、以及客户端存储器要求。
本发明拥有几种用于管理在客户端上的段的配置。在一个配置中,所有包含该应用程序的段能够被传输到该客户端并且被锁定在该客户端的高速缓存中。这个例如,在一个具有到Internet的蜂窝连接的个人数字助理(PDA)中将是合符需要的。设想这样的一个设备的一个用户将要搭乘一辆飞机。在登机之前,用户能够选择一个该用户希望在飞行的同时使用的应用程序(诸如一个游戏),并且该应用程序将经由该蜂窝连接被传输到客户端并且被锁定在该客户端的高速缓存中。在飞机出发之后,该用户将能够在飞行的同时执行该应用程序,而不使用该蜂窝连接。在飞机到达且该PDA恢复蜂窝连接之后,在该客户端代码高速缓存中的段能够被解锁并且变得适于替换。
在其他配置中,仅仅包含该应用程序的段的一个子集被传输到该客户端。例如,设想一个汽车嵌入设备具有到Internet的一个蜂窝连接。这样的一种设备可以提供对各种应用程序的访问,这些应用程序诸如在线地图和方位、维护并且向厂家报告状态、电子邮件、或者游戏及其他类型用于旅客的娱乐。在汽车中到一个客户端的一个蜂窝连接的一个特征是,当该汽车正行进时,当该汽车穿过隧道、在高山及其他障碍物附近、或者在一个蜂窝发送器的范围之外时,该连接可以断开一段时间。因此仅仅在该客户端的代码高速缓存中锁定部分应用程序也许是合符需要的。例如,假定该用户正在执行一个提供到一个目的地的方向的在线地图应用程序。该客户端能够请求所有指导该用户到目的地所需要的段,以及所有在该用户的当前位置和目的地之间需要的地图数据。在行进到目的地的同时该汽车将会丢失该蜂窝连接,该应用程序能够继续执行直到该汽车到达目的地为止。
最后,对于具有一个持久和可靠的到服务器的连接的客户端,诸如一个经由一条DSL线或者一个电缆调制解调器与Internet相连的计算机工作站,在该高速缓存中锁定任何段不是必要的。在全部应用程序不存在该客户端中的配置中,本发明对软件侵权是高度抵抗的,而且因此理想地适合于按使用付费的商业模式。虽然复制该应用程序理论上未必是不可能的,但是它将是很难的,因为一个试图捕获该应用程序的人将需要确保服务器传送每个段、然后该段将已经从该客户端的中提取出来和重建到一个可执行的应用程序中。即使在所有段已经在该客户端中缓存的配置中,仍然有可能通过使用其他技术,诸如加密键和过期代码,来阻止盗版。最后,从该客户端的代码高速缓存中提取拆散的段比从存储器的一个区域或者一个硬盘驱动器中复制一个连续的现有技术应用程序要难得多,其中该代码高速缓存一般将包含来自以一个相对随机池段形式的其他应用程序的段。
本发明的另一个优点是由于该应用程序驻留在服务器上,用户被免除了应用程序管理的负担。此外,由于该代码由客户端而不是服务器执行,所以本发明是高度可扩展的。嵌入式处理器继续变得更强大,而且本发明非常适合于利用在该技术领域的这个趋势。虽然服务器仍然必须传送段到每个客户端,在该客户端中高速缓存该段最小化这个负担。此外,通过在该客户端中高速缓存段,本发明理想地适合于与间断的网络连接,诸如在Internet和一个移动客户端之间的蜂窝连接,一起使用。
如将在下文中看到的那样,本发明能够适合于支持在各式各样的平台上执行各式各样的代码格式,由此允许本发明提供平台无关的执行。因此,本发明组合了上面讨论到的服务器执行模型、下载并且安装模型、以及虚拟机模型的最好属性。
图1是一个说明了根据本发明的一个客户端-服务器配置10的简化框图。配置10包含一个服务器12以及一个客户端14,它们通过网络16连接在一起。服务器10能够是在该技术领域已知的任何类型的服务器,诸如一个文件服务器或者一个网络服务器,并且包含应用程序代码源18、应用程序代码转换管理器20、以及服务器代码段管理器22。客户端14能够是在该技术领域已知的任何类型的客户端、诸如一个计算机工作站、一个嵌入设备、一个网络应用、一个个人数字助理(PDA)、一个蜂窝电话、或者一个外围设备。客户端14包含应用程序启动接口24、客户端代码段管理器26、代码高速缓存链接器和管理器28、代码高速缓存30、以及本地指令执行单元32、其一般是该客户端的中央处理单元(CPU)。网络16能够表示在该技术领域已知的任何类型网络、诸如一个专用以太网或者Internet。
在服务器12内,块18表示该应用程序代码源。如上所述,以及如下面将要更详细讨论的那样,应用程序代码源18能够以各种格式提供,诸如一种程序设计语言的源代码文本格式、编译的二进制代码、或者虚拟机代码。
应用程序代码转换管理器20与应用程序代码源18相连,并且负责把应用程序代码源16的段转换到能够由该客户端本地执行的二进制代码段中。如果应用程序代码源16已经是以该客户端的本地二进制格式、诸如在一个IBM兼容PC客户端上执行的X86代码,需要最少的转换。然而,如下文将看见的那样,管理器20还可以具有一个把一种程序设计语言的源代码文本格式转换到本地二进制代码中的编译器、把代码从一个二进制格式转换到一种由该客户端使用的本地二进制格式的一个代码转换引擎、或者把VM代码转换到由该客户端使用的本地二进制格式中的一个虚拟机(VM)运行时编译执行(JIT)编译器。
服务器代码段管理器22与应用程序代码转换管理器22和网络16相连。管理器22负责把从应用程序代码源18导出的二进制代码段提供到客户端14。
在客户端14内,应用程序启动接口24表示一个允许一个应用程序被启动的接口。接口24表示在该技术领域已知的启动应用程序的方法,诸如点击一个图标以启动一个应用程序、从一个网络浏览器中启动一个帮助应用程序、一个启动一系列应用程序的批处理文件、或者任何其他启动一个在该技术领域已知的应用程序的方法。在现有技术中,当启动一个应用程序时,一般一个包含本机代码的文件被载入到存储器中,和在在存储器中的该应用程序的入口点处开始执行。相反,在本发明中,当接口24设法启动一个应用程序时,接口24发信号通知客户端代码段管理器26。
客户端代码段管理器26与应用程序启动接口24、代码高速缓存链接器和管理器28、代码高速缓存30、以及本地指令执行单元32相连。当接口24发信号通知管理器26以开始执行一个应用程序时,管理器26首先确定包含该应用程序入口点的代码段是否是在代码高速缓存30中。如果是这样的话,控制转到在代码高速缓存30中的代码段而且单元32开始执行该代码段。如果该段不在代码高速缓存30中,客户端代码段管理器26从服务器12的服务器代码管理器22请求该代码段、接收该代码段、以及传递该代码段到代码高速缓存链接器和管理器28。如上所述,客户端代码段管理器26还可以请求包含该应用程序的所有段,让该段被锁定在代码高速缓存30中,以允许当不存在一个到服务器12的网络连接时执行该应用程序。
代码高速速缓存链接器和管理器28与代码高速缓存30相连。管理器28把该段与任何其他保存在代码高速缓存30中的段连接一起,并且把该段发送到代码高速缓存30里。管理器28还执行各种各样的维护功能,诸如从代码高速缓存30中删除旧的段以及最优化该代码段并且锁定和解锁段,这将在下面进行更详细的描述。在该段被发送到该代码高速缓存30中之后,控制转到在该代码高速缓存30中代码段的入口点,然后单元32执行该代码段。
在代码高速缓存30中的代码段由单元32执行直到取得一个到不在代码高速缓存30中的代码段的跳转为止。当这个转移被发送到高速缓存30中时,改变该转移的目标地址以传递控制回到客户端代码段管理器26。管理器26从服务器12请求包含该目标地址的代码段,服务器12传送需要的代码段到客户端14,代码高速缓存链接器和管理器28连接新接收的代码段到代码高速缓存30里,并且在代码高速缓存30中继续新接收段的本地执行。
当执行代码段时,至少一部分代码缓存30必须存在于存储器中,其与本地指令执行单元32相连以允许单元32本地执行该代码段。然而,在某些配置中,此外让代码高速缓存30包含持久型的存储介质,以当客户端14被断电或者被放入一个备用模式中时,允许存储代码段。在持久的存储介质中存储代码段,最小化了当客户端14被加电或者退出备用模式时,从服务器12请求重传代码段的需要。例如,如果客户端14是一个计算机系统,配置代码高速缓存30以包含一个存储代码段的磁盘高速缓存是合符需要的。类似地,如果客户端14是一个个人数字助理(PDA),配置代码高速缓存30以在一个快擦写存储卡上存储代码段可能是合符需要的。当然,当该代码段将被执行时,该代码段必须从该持久性存储介质中载入到存储器中。如果客户端14具有一个虚拟内存管理器,则当产生一个页错误时能够由操作系统从持久性存储介质中载入代码段,如在该技术领域已知的那样。当然,其他方法可用于在存储器和持久性存储介质之间移动代码段。另一方面客户端14不需要具有持久性存储介质,因为每当需要代码段时能够从服务器12载入代码段。
由本发明使用来管理代码段的机理类似于在由Vasanth Bala、EvelynDucstcrwald、以及Sanjeev Banerjia在1999年6月、发表在HP实验室技术报告HPL-1999-77、题为“Transparent Dynamic Optimization”的文章;由VasanthBala、Evelyn Duesterwald、以及Sanjeev Banerjia在1999年6月、发表在HP实验室技术报告HPL-1999-78、题为“Transparent Dynamic Optimization:TheDesign and Implementation of Dynamo”的文章;由Vasanth Bala、EvelynDuesterwald、以及Sanjeev Banerjia在Proceedings of the Association forComputing Machinery Special Interest Group on Programming Language′sConference on Programming Language Design and Implementation,2000,第1到12页发表的、题为“Dynamo A Transparent Dynamic Optimization System”的文章中公开的机理。这三篇文章在此被包含在内作为参考。
这三篇文章描述了一个称作Dynamo的动态优化方案。基本上,Dynamo通过解释本地二进制代码开始执行。在解释该代码的同时,Dynamo标识“热的”代码段以及标识某些优化时机。然后“热的”代码段被优化以及被发送到一个段高速缓存中,在该高速缓存中本地执行该“热的”代码段。很少执行的代码段继续通过解释执行。因此,一个应用程序由Dynamo使用本地执行和解释的一个混合来执行。在本发明中,用于管理该代码段的技术是类似的,但是适合于支持在一个客户端和服务器配置中的执行。
如上所述,该代码段的粒度能够被容易地调节以平衡服务器端和客户端执行以及网络带宽效率、以及客户端存储要求。当然,最小可能的代码段是单个二进制指令。然而,许多指令不转移,并且继续执行在该序列中的下一个指令。因此,本发明的一个实现将一般不挑选单个指令粒度。
实际上,一个实现本发明的人将选择的最小代码段尺寸是一个指令的基本块。一个基本块是一组由转移指令或者入口点界定的指令。因此,在一个基本块中的指令总是作为一个组被执行,该组从在一条第一转移指令之后的入口点或者一条指令开始并且结束于一条与一第二转移指令有关的指令。基本块级别的粒度仍然是十分小的。在典型二进制代码中,平均起来每5或者6条指令就有一条转移指令。因此,实现本发明的一个人可以选择使用一个大的代码段粒度。做为选择,服务器12的服务器代码段管理器22能够从使用基本块粒度开始,并且当趋向于一起执行的基本块被标识了时增加该代码段尺寸。然后使用来自上述Dynamo优化方案的技术能够优化更大的代码段。此外能够在每个客户端的基础上调整该代码段尺寸,来平衡服务器端和客户端端执行开销和网络带宽效率、以及该单独客户端的存储器资源。
图2A、2C和2B,合起来是一个流程图34,说明根据本发明一个应用程序是如何执行的。在框图34中,实线字块描述了执行该应用程序需要的步骤。点线方框对应于在图1中相似地标住方框,而且说明该步骤被执行的地方。
从图2A开始,方框36表示在客户端14中启动应用程序执行。控制然后转到块38,其确定包含该应用程序入口点的代码段是否存在于代码高速缓存30中,以及如果存在的话,判断该代码段是否是当前的。确定该代码段是否是当前能够以许多方式进行。整个应用程序或者单个代码段能够用一个过期值标记。如果该应用程序或者单个代码段已经到期了,则能够从服务器12请求新的代码段。做为选择,块38能够和服务器12通讯来确定该应用程序或者单个代码段是否是当前的。
块38表现了本发明的一个重要特征,因为块38为本发明提供了下载并且安装模型的可扩展性和性能属性,以及该虚拟机模型和服务器执行模型的应用程序代码维护属性。具体地说,如果该应用程序是当前的、先前已经执行了、并且代码高速缓存30是足够大的,则第一个代码段将在代码高速缓存30中。因此,应用程序开始本地执行,就好像它已经被下载和安装了一样。在另一方面,如果该代码段不存在于高速缓存30中或者不是当前的,将从服务器12检索该代码段的最新版本,由此把应用程序管理的负担推给服务器12,如同在虚拟机和服务器执行模型中那样。
如果第一个代码段是在高速缓存30中并且是当前版本,则获取到块40的“HIT”转移。块40反过来跳转到在高速缓存30中开始代码段的入口点。此后,客户端14的执行单元32执行来自代码高速缓存30的应用程序直到执行一条具有一个不在代码高速缓存30中的目标的转移指令为止。如下面将要讨论的那样,这个转移的目标将已经被调整为从代码高速缓存30中跳出并且在块44请求需要的代码段。
现在假定第一个代码段是在代码高速缓存30中,但不是当前版本。在这个情况中,使用较低到框42的“MISS”转移。块42与代码高速缓存30相连并且从高速缓存30中删除旧的代码段。注意:由块42执行的功能还可以由图2C的代码高速缓存维护块56执行,如下面描述的那样。在已经从代码高速缓存30中删除了旧的代码段之后,控制转到块44。返回到块38,如果第一个代码段不存在于高速缓存30中的话,直接使用上面到块44的“MISS”转移。
块44经由网络16从服务器12请求需要的代码段。就在上面的讨论说明了如何启动一个应用程序。因此,使用了术语“第一个代码段”。然而,当执行一条在代码高速缓存30中、设法转移到一个不在高速缓存30中的目标代码段的转移指令时,也能够到达块44。因此,在适当的环境中,在下面将使用术语“需要的代码段”以及“接收的代码段”。当然,如果已经从块38或者42到达块44,则术语“需要的代码段”以及“接收的代码段”等同于术语“第一代码段”。
服务器12必须知道正在执行哪个应用程序,以及客户端14需要的本地二进制格式。假定这个信息已经经由一个先前初始化的会话提供到服务器12,该请求能够简单为向服务器12提供客户端14正设法执行的目标地址。控制然后转到图2B的块46。
图2B中,块46经由网络16从客户端14的客户端代码管理器26接收请求。控制然后转到块48,其创建并且优化来自应用程序代码源18的一个代码段用于在客户端14上本地二进制执行。如在下面将被更详细讨论的那样,应用程序代码源18能够是ASCII源代码、一种本机代码格式(要么以客户端14需要的格式要么另一种格式)、或者一种虚拟机格式。此外,如上讨论,该代码段的粒度能够被动态地修整以平衡服务器端和客户端端执行以及网络带宽效率、以及客户端端存储器需求,并且能够基于预计的代码段使用或者先前的代码段使用记录来优化该粒度。控制然后转到块50,其经由网络16传送请求的代码段到客户端14的客户端代码段管理器26。控制然后转到图2C的块52。
虽然在图2A和2C中显示了代码高速缓存30来更好地说明本发明,但是在图2A、2B和2C的流程图34中仅仅有代码高速缓存30的单个实例。在图2C中,块52经由网络16从服务器12的服务器代码段管理器22接收该代码段。接下来控制转到块54。块54把接收的代码段连接到代码高速缓存30中,发送该代码段到代码高速缓存30里,并且转移到在高速缓存30中接收的代码段。
为了把该接收的代码段和已经在代码高速缓存30中的代码段连接在一起,块54必须修改转移指令的目标。首先,考虑当前在代码高速缓存30中的转移目标或者转移指令。在接收该新代码段之前,在保存在代码高速缓存30中的代码段中、需要转移到新接收的代码段的任何转移目标,先前已经被调整为从代码高速缓存30转移出到块44以请求需要的代码段。现在这个代码段将在代码高速缓存30中,这些转移指令的目标必须被调整为转移到在该接收的代码段中的适当位置。
接下来,考虑在新接收的代码段中、转移指令的转移目标。任何在该新接收的代码段中、具有转移到当前在代码高速缓存30中的代码段的转移目标的转移指令需要被调整,以转移到在高速缓存30中合适的代码段。此外,任何在新接收的代码段中、具有转移到不在代码高速缓存30中的代码段的转移目标的转移指令需要被调整,以从代码高速缓存30中跳转到块44来请求包含期望n目标地址的代码段。
在已经调整了转移目标之后,接收的代码段被发送到代码高速缓存30,控制转到接收的代码段,而且本地指令执行单元32执行接收的代码段(以及可能的其他代码段),直到到达一个需要转移到一个当前不在代码高速缓存30中的代码段为止。如上所述,这个转移指令将已经被调整为传递控制到块44来从服务器12检索需要的段。为了如上所述调整转移指令目标,代码高速缓存链接器和管理器28维护一个转移指令和转移目标的表格。
注意到:当块54试图连接和发送新接收的代码段到代码高速缓存30里时,高速缓存30可以是满的。在这种情况下,块54发信号通知代码高速缓存维护块56以删除不需要或者旧的代码段。一般地,块56将使用一个替换算法来确定哪个代码段适合于替换。块56还可以独立于块54操作,通过连续地删除旧的或者不需要代码段来在代码高速缓存30中维护一定数量的自由空间。
在该技术领域已知的一种替换算法是最近最少使用(LRU)算法。使用LRU算法,没有被使用最长一段时间的段被首先替换。然而,还有可能让块54使用一种更复杂的方法来在代码高速缓存30中管理段。在一种方法中,使用和上述Dynamo相同的技术,块50概述该执行以更好地理解该应用程序“热路径”的相对重要性和形状。通过概述在代码高速缓存30中代码的执行,有可能基于先前的历史进行该应用程序将来执行路径的预计,因此做出关于要替换哪个段的更好决定。当然,这个方法产生一定数量的开销。
另一种方法(其在原则上是相反的)试图通过每当替换的数目到达某一阈值时定期刷清整个高速缓存,来最小化高速缓存管理开销。这个方法是非常简单的,而且有效地获得了程序“纪元”(完全不同的应用程序阶段,其中每个使用一个不同的代码段集合)。
如上所述,有可能让客户端14在代码高速缓存30中锁定所有或者一部分包含一个应用程序的本地二进制代码段,以确保如果到服务器12的网络连接临时是不可用时能够继续执行该应用程序。在上面讨论的一个例子中,一个用户能够请求包含一个应用程序的所有段被载入到代码高速缓存30中并且被锁定。在这个例子中,图1的应用程序启动接口24能够向用户给出这个选项,图2A的块44能够从服务器12的服务器代码段管理器22请求所有段,而且当这些段被发送到代码高速缓存30中时,图2C的块28能够设置一个与每个段有关的“锁定位”。在上述讨论到另一个例子中,一个应用程序可以请求该应用程序的某些被锁定在代码高速缓存30中,诸如引导一辆汽车驾驶员从当前位置到一个目的地需要的全部应用程序段和数据。在这个例子中,图2A的块44能够具有一个应用程序接口(API)以允许该应用程序请求某些段被载入到代码高速缓存30中并且被锁定。
如果本发明具有在代码高速缓存30中锁定段的能力,则图2C的代码高速缓存维护块56将管理该锁定的段。在一个配置中,作为该高速缓存替换方案的一部分,块56能够管理锁定的段。例如,块56能够通过首先替换未锁定的段保持全部锁定的段高速缓存30变满为止,然后使用如上所述的一种替换算法替换锁定的段。做为选择,块56能够产生一个到该用户的警告,指示在缓存的和锁定的应用程序被明确解锁之前不能够启动新的应用程序。注意:块56还能够具有一个API以允许一个应用程序解锁不再需要的段。在上面的例子中,当该驾驶员到达目的地时,在线地图应用程序能够发信号通知块56以解锁用于引导该驾驶员到目的地的全部段。
在以上的讨论中,注意:本地二进制代码段被保存在代码高速缓存30中。然而,包含数据的段还能够被保存在代码高速缓存30中,如在上述的在线地图应用程序例子中那样。本领域技术人员将会理解:在这里公开的技术能够被很容易地扩展到同时包含数据段。为了理解如何能够进行这个考虑由一个执行的应用程序通常使用的三种不同类型的数据“对象”。
第一种数据对象的类型被与该应用程序一起静态编译的数据。为了处理这类数据对象,客户端代码段管理器26能够具有一个在高速缓存30中管理数据段的数据缓存管理器。基本上,当启动一个应用程序时,该CPU被配置为:当该应用程序做出一个访问该应用程序期望数据被存储的存储器区域时,产生一个页错误。这些页错误由数据缓存管理器服务,其从服务器载入数据段、在高速缓存30中存储数据段、并且把该应用程序数据存取映射到在高速缓存30中的区域。注意到:能够使用类似于那些由一个虚拟内存管理器提供的功能来提供这些功能。当高速缓存30到达某一用于数据段的阈值时,在新的数据段能够被载入高速缓存30之前,脏的段必须要么被移到其它类型的存储器中,要么被写回到服务器。
第二类型的数据对象是由该应用程序动态分配的数据。在这种情况下,适合于和本发明一起使用的低级系统调用能够由服务器12连接到应用程序。例如,Unix函数sbrk由一个应用程序调用,来改变分配给与该调用的应用程序有关的数据段的空格符数量。因此,在代码段被传输到之前、在服务器12处,定制用来在客户端14中分配存储器、一个版本的sbrk函数被连接到该应用程序。当这个函数调用由客户端14执行时,客户端14将分配用于该数据段的存储器。注意:该存储器可以在高速缓存30内或者外面分配,而且可以使用上述的高速缓存政策。
第三种类型的数据对象涉及保存在文件中的数据。一个处理这样对象的方法是让每个应用程序在一个“联网块设备”上安装它自己的文件系统,同时让该“网络块设备”在该数据缓存管理器的控制之下。因此,对一个文件的访问产生一个由该数据缓存管理器服务的故障,该数据缓存管理器反过来从服务器12载入文件数据到客户端14的存储器中。
注意:该应用程序(或者与该应用程序连接的低级函数)会提供对第一种和第二种数据对象类型的支持,但是对第三种对象类型的应用程序支持能够提供其他机理,诸如对联网对象的随机存取、在NFS级别共享、或者其他联网文件存取机理。
图3是服务器12的一个框图,并且说明该本发明如何能够管理各种应用程序代码源格式以便于在各种客户端CPU上执行。在图3中,显示了两种不同的CPU类型,类型I和类型II。例如,类型ICPU能够是一个通常在MicrosoftWindows?兼容的台式计算机中发现的X86 CPU,而类型IICPU能够是一个32位的Hitachi SH3处理器,其在Hewlett-Packard Jomada 500系列袖珍型PC中使用,或者一种StrongARM?RISC处理器,其为一种由ARM有限公司许可的处理器核心并且用于许多嵌入设备。
用于该应用程序的代码源被保存在应用程序代码源18中。在块58中显示了应用程序A,其表示以一种用于CPU类型I的本地二进制格式的一种应用程序代码源,诸如一个传统的X86应用程序。在块60中显示了应用程序B,其表示以一种程序设计语言,诸如C++,的源代码文本格式的应用程序代码源。最后,在块62中显示了应用程序C,其表示一个在一种虚拟机格式的应用程序代码源、诸如一个Java?应用程序。
应用程序代码转换管理器20负责把每一个应用程序A、B、和C转换到用于CPU类型I和II的本地二进制格式中,而且服务器代码段管理器22以用于每个CPU类型的本地二进制格式存储每个应用程序。首先,考虑具有一个客户端具有类型I的CPU而且设法执行应用程序A。因为应用程序A已经在由该客户端所需的格式中,该代码源从块58通过应用程序代码转换管理器20流动,而不用转换服务器代码段管理器22的块64。块64表示以CPU类型I的本地二进制格式的应用程序A。
接下来考虑一个客户端具有一个类型II的并且设法执行应用程序A。应用程序A不在该客户端的本地二进制格式中,所以该代码源流向管理器20的块66,其为CPU类型I到CPU类型II的转换引擎。在应用程序已经被变成CPU类型II的本地二进制格式之后,该代码流向管理器22的块68,其表示以CPU类型II的本地二进制格式的应用程序A。把代码一种二进制格式转换另一种的引擎在该技术领域是已知的。在本技术领域已知的一种这样的转换引擎是在CrusoeTM系列处理器中存在的代码变形软件层,其为Transmeta公司的一个产品。基本上一个Crusoe处理器的代码变体软件层是一种动态翻译系统,其把来自X86指令集的指令编译到用于一个超长指令字(VLIW)指令集的指令里,该指令集时Crusoe处理器内核的本地指令集。一个Crusoe处理器的代码变体软件层在题为“The Technology Behind CrusoeTM Processors:Low-Power X86-Compatible Processors Implemented with Code MorphingTMSoftware”、由Alexander Klaiber所著,在2000 1月发表的文章中进行了更详细的描述,这篇文章通过引用包含在此。
接下来,考虑一个客户端设法执行应用程序B。这个应用代码源在一种程序设计语言源代码文本格式、诸如C++源代码或者Visual Basic?源代码提供。Visual Basic?是微软公司的一个商标。如果该客户端具有一个类型I的CPU,则源代码从块60流到管理器20的块70,其表示一个把该应用程序编译和连接到用于CPU类型I的本地二进制代码中的编译器。该编译的代码然后流向块72,其表示以CPU类型I的本地二进制格式的应用程序B。类似地,如果该客户端具有一个类型II的CPU,则源代码从块60流到管理器20的块74,其表示一个把该应用程序编译和连接到用于CPU类型II的本地二进制代码中的编译器。该编译的代码然后流向块76,其表示以CPU类型II的本地二进制格式的应用程序B。
最后,考虑一个设法执行应用程序C的客户端。这个应用程序代码源以一种虚拟机(VM)格式提供,诸如一个Java应用程序。如果该客户端具有一个类型I的CPU,则VM代码从块62流到管理器20的块78,其表示一个把该VM应用程序编译和连接到用于CPU类型I的本地二进制代码中的运行时编译执行(JIT)编译器。该编译的代码然后流向块80,其表示以CPU类型I的本地二进制格式的应用程序C。类似地,如果该客户端具有一个类型II的CPU,则源代码从块62流到管理器20的块82,其表示一个把该VM应用程序编译和连接到用于CPU类型II的本地二进制代码中的JIT编译器。该编译的代码然后流向块84,其表示以CPU类型II的本地二进制格式的应用程序C。
注意:上述讨论的步骤能够在一个客户端请求一个代码段之前、或者在由该客户端要求时执行。块86表示从应用程序A、B、和C传送应用程序段到具有CPU类型I和II的客户端的服务器代码段管理器22。块86表示由在图2B中的块46和50执行的功能。
图4说明了当应用程序88驻留在服务器12上时,在服务器代码段管理器22中、以客户端14的本地二进制格式的应用程序88。而图5说明了在应用程序88已经完成在客户端14执行上之后保存在客户端14的代码高速缓存30中的段,并且假定从服务器12检索的段还没有从高速缓存30中删掉。在图4中,程序88包含段A、B、C、D、E、F、G、H、I、以及J。连接这些段的线表示可能的执行路径。实线表示实际上由客户端14经历的执行路径,而虚线表示不由客户端14经历的执行路径。
因此,执行从块90开始,其表示图2A的块36。首先,从服务器12检索段A并且把它发送到代码高速缓存30。注意:段A能够流向段B或者C,所以在高速缓存30中调整这些出口点以便传递控制回到在图2A中的块44来请求下一个段。在这个例子中,使用路径92,这样从服务器12检索段B。当段B被发送到高速缓存30中时,调整从段A到B的路径92以转移到在代码高速缓存中的段B。此外,段B能够流向段C或者D,所以在高速缓存30中调整这些出口点以便传递控制回到块44来请求下一个段。继续这个进程,使用路径94检索段C、使用路径96检索段D、以及使用路径98检索段E。
段E能够流向段B或者F。由于段B已经在高速缓存30中,调整路径100以流向在代码高速缓存30中的段B,以及调整程102以传递控制回到块44来检索段F。现在假定经由路径100、94、96、以及98通过段B、C、D、以及E的回路被执行多次。这个回路将由客户端14从代码高速缓存30中执行,而不用不得不从服务器12检索任何附加的段。
当该回路终止时,将使用路径102来检索段F、将使用路径104来检索段I、以及将使用路径106来检索段J。最后,在结束块108处终止程序执行。注意:段G和H从不被执行,因此从不从服务器12中传送到客户端14。
图5显示了在程序88已经完成执行之后,并且假定这些段没有从高速缓存30中被清除时,客户端14的代码高速缓存30的内容。注意在图4中,能够从段C和F到达段G。由于段G从不被载入到高速缓存30中,段C和F仍然具有已经被调整以传递控制到块44来从服务器12检索段G的出口点。类似地,能够从段G和J到达段H。段G不在高速缓存30中。然而,段J仍然具有一个已经被调整以传递控制到块44来从服务器12检索段H的出口点。
还要注意在代码高速缓存30中,段不仅由实际上使用的执行路径连接起来,而且还由不被使用的、连接在高速缓存30中的段的可能执行路径连接起来。因此,当下一次客户端14设法执行程序88时,能够完全从代码高速缓存30中开始执行直到要么段G要么段H被需要为止。
本发明分别地使用的许多优点,能够在现有技术的客户端-服务器执行模型的一个中找到。然而,让本发明与现有技术不同的地方是本发明在单个执行模型中组合了现有技术的客户端-服务器执行模型的最好属性。特别地,因为执行发生在客户端上,本发明是高度可扩展的。此外,由于在客户端进行的执行使用保存在一个代码高速缓存中的本地二进制码段,本发明可能比现有技术的虚拟机(VM)解释器快得多。
由于代码段能够存储和锁定在客户端的代码高速缓存中,如果到该服务器的网络连接被临时中断的话,执行能够继续进行。如上所述,被传输到客户端的应用程序对软件侵权是高度抵抗的,使得本发明很适合按使用付费的商业模型。此外,由于该应用程序保存在服务器端,用户被免除了应用程序管理的负担。
本发明能够用任何类型的客户端CPU操作。此外,应用程序能够以各种代码源格式,诸如一个本地二进制格式、一种程序设计语言的源代码文本格式、或者一个VM代码格式,存在于服务器上,由此允许本发明支撑传统的应用程序以及现在和将来的应用程序。因此,本发明很好地定位于提供一个能够与一个不断增加的CPU指令集合和应用程序代码格式系列一起工作的、有价值的客户-服务器执行模型。
虽然已经参考最佳实施例对本发明加以描述,在本技术领域的工作人员将意识到:可以在形式和细节中进行改变而不背离本发明的精神和范围。
Claims (14)
1.一个服务器(12),包含:
一个把该服务器(12)耦合到一个网络(16)的网络接口,该网络反过来与一个客户端(14)相耦合;
存储一个客户端应用程序的一个应用程序代码源(18);以及
一个与应用程序代码源(18)和网络接口相耦合的服务器代码管理器,其中该服务器代码管理器从应用程序代码源(18)中导出以客户端CPU(32)所需要的一个本地执行格式的本地二进制代码段,而且一旦从客户端(14)中接收到请求,就将该本地二进制代码段传送到客户端(14)。
2.如权利要求1所述的服务器,其特征在于:该服务器代码管理器包含:
与该应用程序代码源(18)相耦合的一个应用程序代码转换管理器(20),用于把该客户端应用程序从一个第一格式转换到本地执行格式;
以及一个与该应用程序代码转换管理器(20)相耦合的服务器代码段管理器(22),用于把以本地执行格式的客户端应用程序分解成为经由网络(16)传输到客户端(34)的代码段。
3.如权利要求2所述的服务器(12),其特征在于:第一种格式是一种不同于该客户端CPU(32)所需要的本地执行格式的本地执行格式,而且该应用程序代码转换管理器(20)包含一个把该客户端应用程序从第一种格式转换到由该客户端CPU(32)所需的本地执行格式的转换引擎。
4.如权利要求2所述的服务器(12),其特征在于:第一种格式是一种程序设计语言的源代码文本格式,而且该应用程序代码转换管理器(20)包含一个编译并且连接该客户端应用程序到由一个客户端CPU(32)所需要的本地二进制格式中的编译器。
5.如权利要求2所述的服务器(12),其特征在于:第一种格式是一种虚拟机格式,而且该应用程序代码转换管理器(20)包含一个编译并且连接该客户端应用程序到由一个客户端CPU(32)所需要的本地二进制格式中的运行时编译执行的编译器。
6.一个客户端(14)包含:
一个把该客户端(14)连接到一个网络(16)的网络接口,该网络反过来与一个服务器(12)相耦合;
一个CPU(32),用于本地执行从存储在服务器(12)上的客户端应用程序中导出的代码段;
一个与CPU(32)相耦合的代码高速缓存(30),用于存储代码段;以及
与代码高速缓存(30)相连的一个客户端代码管理器,其中该客户端代码管理器通过以下过程启动该客户端应用程序:请求服务器(12)传送一个代码段到客户端(14)、从服务器12)接收代码段、在该代码高速缓存(30)中存储该代码段、以及使用该CPU(32)执行该代码段直到该代码段试图传递控制到一个需要的、不保存在该代码高速缓存(30)中的代码段为止,在这一点处控制传递回到客户端代码管理器以从服务器(12)检索需要的代码段、并让该CPU(32)继续执行需要的代码段。
7.如权利要求6所述的客户端,其特征在于该客户端代码管理器包含:
与网络(16)和代码高速缓存(30)相耦合的一个客户端代码段管理器(26),其中该客户端代码管理器(26)从服务器(12)请求需要的段;以及
一个与代码高速缓存(30)和客户端代码段管理器(26)相耦合的一个代码高速缓存链接器和管理器(28),其中该代码高速缓存链接器和管理器(28)把从该服务器(12)中接收的代码段连接到该代码高速缓存(30)中,发送接收的代码段到该代码高速缓存(30)里,以及转移到在该代码高速缓存(30)中接收的代码段。
8.如权利要求7所述的客户端(14)其特征在于:该代码高速缓存链接器和管理器(28)调整任何在保存在该代码高速缓存(30)中的代码段中、需要转移到该接收的代码段、而且先前已经被调整为转移出该代码高速缓存(30)到该客户端代码段管理器(28)的转移目标,以现在转移到在接收的代码段中的合适位置;调整任何在接收的代码段中、具有转移到当前在该代码高速缓存(30)中的代码段的转移目标的转移指令,以转移到在该代码高速缓存(30)中适当的代码段;并且调整任何在接收的代码段中、已经需要转移到不在该代码高速缓存(30)中的代码段的转移目标的转移指令,以从该代码高速缓存(30)中转移出到客户端代码段管理器(26)以请求包含该转移目标的代码段。
9.如权利要求7所述的客户端(14),其特征在于:该代码高速缓存链接器和管理器(28)包含一个与该代码高速缓存(30)相耦合的代码高速缓存维护单元(56),用于从该代码高速缓存(30)中删除旧的和不需要的代码段、当该代码高速缓存(30)到达某一阈值时用新接收的段替换更旧的段、并且优化在该代码高速缓存(30)中的代码段。
10.一种在联网系统(10)中执行一个应用程序的方法(34),包含:在一个客户端(14)处:
通过一个网络(16)发布一个代码段请求(44)到与该客户端(14)相连的一个服务器(12);
在服务器(12)处:
从该客户端(14)接收该代码段请求(46);
从一个应用程序代码源(18)中导出以该客户端(14)所需要的本地执行格式的一个代码段(48);并且传送该代码段(50)到该客户端(14);
以及在该客户端(14)处:
接收该代码段(52);
调整在该代码段(56)中、具有不在该客户端(14)的一个代码高速缓存(30)中的目标的转移,以导致从该服务器(12)请求包含该目标的代码段;
发送该代码段(54)到该代码高速缓存(30)中;以及
从该代码高速缓存(30)中本地执行该代码段(32)。
11.如权利要求10所述的方法(34)其特征在于:从一个应用程序代码源(18)中导出以一个由该客户端(14)所需要的本地执行格式的一个代码段(48)包含,把该应用程序源从一种不同于该客户端所需要的本地执行格式转换到由该客户端所需要的本地执行格式。
12.如权利要求10所述的方法(34)其特征在于:从一个应用程序代码源(18)中导出一个以由该客户端(14)所需要本地执行格式的代码段(48)包含,把该应用程序源从一种程序设计语言的代码文本编译和连接到由该客户端所需要的本地执行格式。
13.如权利要求10所述的方法,其特征在于:从一个应用程序代码源(18)中导出一个以由该客户端(14)所需要的本地执行格式的一个代码段(48)包含,使用一个运行时编译执行编译器把该应用程序源从一种虚拟机格式编译到由该客户端所需要的本地执行格式。
14.如权利要求10所述的方法,其特征在于:该代码段是一个第一代码段,而且从该代码高速缓存中本地执行该代码段(32)包含:
在该客户端(14)处:
执行一个在该第一代码段中、设法转移到不在该代码高速缓存(30)中的第二代码段的转移指令;以及
发布一个对第二代码段的代码段请求到服务器(12);
在服务器(12)处:
从该客户端(14)接收用于第二代码段的代码段;
从该应用程序代码源(18)中导出以该客户端(14)所需要的本地执行格式的第二代码段;以及
传送第二代码段到该客户端(14);以及在客户端(14)处:
接收第二个代码段;
调整任何在保存在该代码高速缓存(30)中的第一代码段中、需要转移到第二代码段并且先前已经被调整为导致从该服务器(12)请求第二代码段的转移指令,现在转移到在第二个代码段内的适当位置;
调整任何在第二代码段中、具有在该代码高速缓存(30)的第一代码段中的目标的转移指令,以转移到在该第一代码段内的适当位置;
调整任何在第二代码段(56)中、具有不在代码高速缓存(30)的代码段中的转移目标的转移指令,以导致从该服务器(30)中请求不在代码高速缓存(30)中的代码段;
发送第二个代码段到一个代码高速缓存(30)中;在第二代码段中、在第一代码段试图转移的位置处继续执行。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/874170 | 2001-06-04 | ||
US09/874,170 US7640153B2 (en) | 2001-06-04 | 2001-06-04 | Networked client-server architecture for transparently transforming and executing applications |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1392482A true CN1392482A (zh) | 2003-01-22 |
Family
ID=25363138
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN02141347.9A Pending CN1392482A (zh) | 2001-06-04 | 2002-06-04 | 透明地转换和执行应用程序的客户端-服务器结构 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7640153B2 (zh) |
EP (1) | EP1265137A3 (zh) |
CN (1) | CN1392482A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104050007A (zh) * | 2013-03-15 | 2014-09-17 | 英特尔公司 | 基于qos的二进制翻译和应用流送 |
CN111464316A (zh) * | 2012-03-30 | 2020-07-28 | 英特尔公司 | 用于处理sha-2安全散列算法的方法和设备 |
Families Citing this family (50)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9009060B2 (en) * | 1999-09-21 | 2015-04-14 | Ameranth, Inc. | Information management and synchronous communications system |
GB0121064D0 (en) * | 2001-08-31 | 2001-10-24 | Transitive Technologies Ltd | Obtaining translation of generic code representation |
US7251811B2 (en) * | 2002-01-02 | 2007-07-31 | Intel Corporation | Controlling compatibility levels of binary translations between instruction set architectures |
JP2003324770A (ja) * | 2002-05-07 | 2003-11-14 | Hitachi Ltd | 携帯端末、サーバ及びプログラム実行システム |
US20040001476A1 (en) * | 2002-06-24 | 2004-01-01 | Nayeem Islam | Mobile application environment |
JP2004038876A (ja) * | 2002-07-08 | 2004-02-05 | Hitachi Ltd | プログラム等のデータ形式変換方法及び装置、並びにそのデータ形式変換装置を用いたコントローラ管理システム |
US8090761B2 (en) * | 2002-07-12 | 2012-01-03 | Hewlett-Packard Development Company, L.P. | Storage and distribution of segmented media data |
US20080313282A1 (en) | 2002-09-10 | 2008-12-18 | Warila Bruce W | User interface, operating system and architecture |
US20040123278A1 (en) * | 2002-12-23 | 2004-06-24 | Murthi Nanja | Persistent cache apparatus and methods |
US7337434B2 (en) | 2003-04-29 | 2008-02-26 | Sony Ericsson Mobile Communications Ab | Off-device class/resource loading methods, systems and computer program products for debugging a Java application in a Java micro device |
US7562353B2 (en) * | 2003-05-16 | 2009-07-14 | Hewlett-Packard Development Company, L.P. | Methods and systems for transforming Java applications of behalf of another device |
US7694301B1 (en) * | 2003-06-27 | 2010-04-06 | Nathan Laredo | Method and system for supporting input/output for a virtual machine |
US7363620B2 (en) * | 2003-09-25 | 2008-04-22 | Sun Microsystems, Inc. | Non-linear execution of application program instructions for application program obfuscation |
US7415618B2 (en) * | 2003-09-25 | 2008-08-19 | Sun Microsystems, Inc. | Permutation of opcode values for application program obfuscation |
US8220058B2 (en) * | 2003-09-25 | 2012-07-10 | Oracle America, Inc. | Rendering and encryption engine for application program obfuscation |
US20050069138A1 (en) * | 2003-09-25 | 2005-03-31 | Sun Microsystems, Inc., A Delaware Corporation | Application program obfuscation |
US7353499B2 (en) * | 2003-09-25 | 2008-04-01 | Sun Microsystems, Inc. | Multiple instruction dispatch tables for application program obfuscation |
US7424620B2 (en) * | 2003-09-25 | 2008-09-09 | Sun Microsystems, Inc. | Interleaved data and instruction streams for application program obfuscation |
US20050165837A1 (en) * | 2004-01-22 | 2005-07-28 | International Business Machines Corporation | System and method for embedded java memory footprint performance improvement |
US20050183077A1 (en) * | 2004-02-12 | 2005-08-18 | International Business Machines Corporation | System and method for JIT memory footprint improvement for embedded java devices |
US20050257268A1 (en) * | 2004-04-29 | 2005-11-17 | Microsoft Corporation | Security center |
US8171479B2 (en) | 2004-09-30 | 2012-05-01 | Citrix Systems, Inc. | Method and apparatus for providing an aggregate view of enumerated system resources from various isolation layers |
US7680758B2 (en) | 2004-09-30 | 2010-03-16 | Citrix Systems, Inc. | Method and apparatus for isolating execution of software applications |
US8095940B2 (en) | 2005-09-19 | 2012-01-10 | Citrix Systems, Inc. | Method and system for locating and accessing resources |
JP2006178912A (ja) * | 2004-12-24 | 2006-07-06 | Fujitsu Ltd | 情報処理方法及びプログラム |
US7735136B2 (en) * | 2005-04-18 | 2010-06-08 | Vmware, Inc. | 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security |
CN101278260B (zh) | 2005-06-07 | 2012-07-18 | 威睿公司 | 使软件程序免于弱点和攻击的约束注入方法 |
US11276130B2 (en) | 2005-07-26 | 2022-03-15 | Ameranth, Inc. | Information management and synchronous communications system |
US20070050678A1 (en) * | 2005-08-25 | 2007-03-01 | Motorola, Inc. | Apparatus for self-diagnosis and treatment of critical software flaws |
US7779034B2 (en) | 2005-10-07 | 2010-08-17 | Citrix Systems, Inc. | Method and system for accessing a remote file in a directory structure associated with an application program executing locally |
US8131825B2 (en) | 2005-10-07 | 2012-03-06 | Citrix Systems, Inc. | Method and a system for responding locally to requests for file metadata associated with files stored remotely |
US20070174429A1 (en) | 2006-01-24 | 2007-07-26 | Citrix Systems, Inc. | Methods and servers for establishing a connection between a client system and a virtual machine hosting a requested computing environment |
US7561081B2 (en) * | 2006-07-12 | 2009-07-14 | Qualcomm Incorporated | Method and apparatus for optimization of SigComp UDVM performance |
US20080127102A1 (en) * | 2006-09-14 | 2008-05-29 | Glen J Anderson | Technique to visually present memory location and usage during code execution |
US9230068B2 (en) * | 2006-10-03 | 2016-01-05 | Salesforce.Com, Inc. | Method and system for managing license objects to applications in an application platform |
US8601467B2 (en) | 2006-10-03 | 2013-12-03 | Salesforce.Com, Inc. | Methods and systems for upgrading and installing application packages to an application platform |
US8171483B2 (en) | 2007-10-20 | 2012-05-01 | Citrix Systems, Inc. | Method and system for communicating between isolation environments |
US8578056B1 (en) * | 2008-03-31 | 2013-11-05 | Symantec Corporation | Optimized application streaming for just in time compiled components |
US20100153644A1 (en) * | 2008-12-11 | 2010-06-17 | Bauchot Frederic J | On demand java application manager |
US8090797B2 (en) | 2009-05-02 | 2012-01-03 | Citrix Systems, Inc. | Methods and systems for launching applications into existing isolation environments |
CA2783829C (en) * | 2009-12-11 | 2018-07-31 | Aerial Robotics, Inc. | Transparent network substrate system |
US8972994B2 (en) | 2009-12-23 | 2015-03-03 | Intel Corporation | Method and apparatus to bypass object lock by speculative execution of generated bypass code shell based on bypass failure threshold in managed runtime environment |
US20120110558A1 (en) * | 2010-10-29 | 2012-05-03 | Microsoft Corporation | Customized binaries on-the-fly |
CN102571860A (zh) * | 2010-12-29 | 2012-07-11 | 北京新媒传信科技有限公司 | 一种管理插件的方法、装置及系统 |
US8930940B2 (en) * | 2011-08-19 | 2015-01-06 | Yongyong Xu | Online software execution platform |
CN105531668B (zh) * | 2013-08-08 | 2019-04-23 | 英派尔科技开发有限公司 | 用于执行进程的迁移的方法、迁移器及计算机可读介质 |
US9811324B2 (en) * | 2015-05-29 | 2017-11-07 | Google Inc. | Code caching system |
US11593167B2 (en) * | 2019-05-09 | 2023-02-28 | International Business Machines Corporation | Thread embedded cache management |
US11722560B2 (en) * | 2021-10-26 | 2023-08-08 | Vmware, Inc. | Reconciling host cluster membership during recovery |
US11770304B1 (en) | 2023-03-14 | 2023-09-26 | Ameranth, Inc. | Adaptable computing network with real time, intelligent, 4D spherical scalability, tech stack awareness, tech stack integration, automatic bi-directional communications channel switching and order equilibrium—for large enterprise, time sensitive event/transaction driven applications |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5613098A (en) * | 1991-03-07 | 1997-03-18 | Digital Equipment Corporation | Testing and debugging new Y architecture code on existing X architecture system by using an environment manager to switch between direct X code execution and simulated Y code execution |
US5339422A (en) * | 1991-03-07 | 1994-08-16 | Digital Equipment Corporation | System and method for jacketing cross-domain calls in a multi-code execution and debugging system within a multi-architecture environment |
US6000028A (en) * | 1996-01-29 | 1999-12-07 | Digital Equipment Corporation | Means and apparatus for maintaining condition codes in an unevaluated state |
US6026238A (en) * | 1997-08-18 | 2000-02-15 | Microsoft Corporatrion | Interface conversion modules based upon generalized templates for multiple platform computer systems |
US5931900A (en) * | 1997-08-25 | 1999-08-03 | I2 Technologies, Inc. | System and process for inter-domain interaction across an inter-domain connectivity plane |
JP2000215181A (ja) * | 1999-01-21 | 2000-08-04 | Fujitsu Ltd | ネットワ―クコンピュ―タシステム及び代理コンパイルサ―バ装置 |
-
2001
- 2001-06-04 US US09/874,170 patent/US7640153B2/en not_active Expired - Fee Related
-
2002
- 2002-05-30 EP EP02253813A patent/EP1265137A3/en not_active Withdrawn
- 2002-06-04 CN CN02141347.9A patent/CN1392482A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111464316A (zh) * | 2012-03-30 | 2020-07-28 | 英特尔公司 | 用于处理sha-2安全散列算法的方法和设备 |
CN111464316B (zh) * | 2012-03-30 | 2023-10-27 | 英特尔公司 | 用于处理sha-2安全散列算法的方法和设备 |
CN104050007A (zh) * | 2013-03-15 | 2014-09-17 | 英特尔公司 | 基于qos的二进制翻译和应用流送 |
US10469557B2 (en) | 2013-03-15 | 2019-11-05 | Intel Corporation | QoS based binary translation and application streaming |
CN104050007B (zh) * | 2013-03-15 | 2019-12-03 | 英特尔公司 | 基于qos的二进制翻译和应用流送方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
EP1265137A2 (en) | 2002-12-11 |
EP1265137A3 (en) | 2004-10-20 |
US20020184618A1 (en) | 2002-12-05 |
US7640153B2 (en) | 2009-12-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1392482A (zh) | 透明地转换和执行应用程序的客户端-服务器结构 | |
US9848031B2 (en) | Application server for delivering applets to client computing devices in a distributed environment | |
US8539038B2 (en) | Method and system for preloading resources | |
CN1173284C (zh) | 向计算机网络的用户分配内容的方法 | |
CN1961307A (zh) | 用于渐进式安装软件应用程序的系统和方法以及api | |
US7117216B2 (en) | Method and apparatus for runtime merging of hierarchical trees | |
EP0438571B1 (en) | Method and system for open file caching in a networked computer system | |
CN1416057A (zh) | 用于应用程序执行的动态java类的加载 | |
CN1959658A (zh) | 本地供应便携式设备的设备驱动的方法和系统 | |
US20110307597A1 (en) | Method for creating global distributed namespace | |
CN1735862A (zh) | 用于更新网络化环境中的安装组件的系统和方法 | |
CN1777867A (zh) | 使用增量压缩打补丁更新文件的系统和方法 | |
WO2009017901A1 (en) | Multi-threaded business programming library | |
US6418484B1 (en) | Method of remotely executing computer processes | |
CN1315081C (zh) | 一种预览网络资源的方法 | |
CN110334069A (zh) | 多进程间的数据共享方法及相关装置 | |
US6536039B2 (en) | Software for seamless interconnectivity between active program modules on integrated arrangement of CD drive, data server, and PC hard disk drive | |
CN1298506A (zh) | 便于访问查询服务的方法和系统 | |
CN1251079C (zh) | 实现不同系统之间数据交互的方法 | |
CN1225186A (zh) | 用于从远程站访问应用服务程序的安全系统 | |
US7861242B2 (en) | Mobile application morphing system and method | |
US7523456B2 (en) | System and method for adding local resources for use by a mobile agent object | |
CN1669000A (zh) | 在可扩展基础设施环境中演化持久存储库中的条目 | |
US7085810B1 (en) | Dynamic command sets in a computer messaging system in a method, system and program | |
CA2479630C (en) | Systems, methods and computer program products for assigning, generating and delivering content to intranet users |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |