CN101283343B - 具有部分存储器更新的改进的机器体系结构 - Google Patents

具有部分存储器更新的改进的机器体系结构 Download PDF

Info

Publication number
CN101283343B
CN101283343B CN200680037477.0A CN200680037477A CN101283343B CN 101283343 B CN101283343 B CN 101283343B CN 200680037477 A CN200680037477 A CN 200680037477A CN 101283343 B CN101283343 B CN 101283343B
Authority
CN
China
Prior art keywords
memory location
group
machine
computing machine
memory
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.)
Expired - Fee Related
Application number
CN200680037477.0A
Other languages
English (en)
Other versions
CN101283343A (zh
Inventor
约翰·马修·霍尔特
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Waratek Pty Ltd
Original Assignee
Waratek Pty Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority claimed from AU2005905582A external-priority patent/AU2005905582A0/en
Application filed by Waratek Pty Ltd filed Critical Waratek Pty Ltd
Publication of CN101283343A publication Critical patent/CN101283343A/zh
Application granted granted Critical
Publication of CN101283343B publication Critical patent/CN101283343B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Multi Processors (AREA)

Abstract

公开一种在多计算机环境中仅更新一些存储器位置的方法,其中在所述多计算机环境中,至少一个应用程序(50)在每个均具有本地存储器的多个计算机M1、M2......Mn上同时地执行。在所述本地存储器中的存储器位置(A、B、D、E、X)被分成两组。第一组存储器位置(X1、X2、......Xn,A1、A2、......An)每个均可被其它计算机访问。第二组存储器位置(B、E)每个均仅可被具有包含所述存储器位置的本地存储器的计算机访问。仅在第一组中的存储器位置的值的变化被发送到所有其它计算机。公开一种在应用程序执行表示所述第二组中的存储器位置被第一组中的存储器位置引用(即第一组位置现在指向第二组位置)的情况下,将第二组中的存储器位置升级到第一组中的升级机制。

Description

具有部分存储器更新的改进的机器体系结构
技术领域
本发明涉及计算,尤其涉及经由通信网络互连的多个计算机的同时操作。
背景技术
以本申请人的名义公布的、公布号为WO 2005/103926的国际专利申请PCT/AU2005/000580(代理所卷号为5027F-WO)(公布号为2005-0262313的美国专利申请11/111,946与其对应)公开了被编写成仅在单计算机上执行的应用程序的不同部分如何能够在多个计算机的对应的不同计算机上基本同时地操作。该同时操作到本申请的优先权日为止尚未在商业上使用。题目为“Computer Architecture Method of Operation forMulti-Computer Distributed Processing and Co-ordinated Memory andAsset Handling”的美国专利申请11/259885所对应的国际专利申请PCT/AU2005/001641(代理所卷号为5027F-D1-WO),以及在本申请人名义下的、截至本申请的优先权日未公布的国际专利申请PCT/AU2006/000532(代理所卷号为5027F-D2-WO)还揭示了更多的细节。上述每一个在先申请的说明书内容通过交叉引用全部结合在本说明书中。
简要地说,上述专利说明书公开了被编写成仅在单计算机上操作的至少一个应用程序能够在每个均具有独立的本地存储器的若干计算机上被同时操作。该程序的操作所需的存储器位置在每个计算机的独立的本地存储器中被复制。每次在应用程序将新数据写到任一复制的存储器位置时,传输该新数据,并且将其存储在每个计算机的每个对应的存储器位置。因此,不考虑可能的传输延迟,每个计算机的本地存储器与每个其它计算机的本地存储器的内容基本相同,并且被更新以保持如此。由于所有应用程序通常读取数据比它们产生待写的新数据要频繁得多,所以上述方案使得能够在计算速度方面实现较大的优势。尤其是,该策略使得通过商用通信网络互连的两个或更多商用计算机能够同时操作,从而在被编写成仅在单计算机上执行的应用程序下运行。
在许多情况下,上述方案能令人满意地工作。这尤其适用于程序员意识到可能有更新延迟并因而可调整程序的流程以将其解决的情况。然而,存在使用陈旧的内容或值而不是最新的内容而可能引起问题的情况。
本发明的目的是期望通过减少需要更新的数据量来提高多计算机系统的操作速度。
发明内容
根据本发明的第一方面,公开一种选择多计算机环境中要同时更新的独立存储器位置的方法,在该多计算机环境中,被编写成仅在单计算机上执行的至少一个应用程序的不同部分均在所述多个计算机中的对应的不同计算机上同时地执行,所述方法包括步骤:
(i)选择第一组存储器位置,其中所述第一组存储器位置的每个存储器位置在每个计算机上被复制;
(ii)忽略第二组存储器位置,其中所述第二组存储器位置的每个存储器位置仅出现在所述计算机中的、每个第二组存储器位置物理上所在的特定计算机中;
(iii)将所述第一组存储器位置中的存储器位置开始引用(refer to)的任何存储器位置从所述第二组存储器位置改变到所述第一组存储器位置;
(iv)在所述计算机中除了当在所述第二组存储器位置中时所述改变的第二组存储器位置物理上所在的计算机之外的所有其它计算机中,复制所述改变的第二组存储器位置;
(v)将所述复制、改变的第二组存储器位置分配给所述第一组存储器位置,以及
(vi)利用对所述计算机中的任何计算机的第一组存储器位置所做的任何变化,同时地更新所述计算机中的其它计算机的所述第一组存储器位置。
根据本发明的第二方面,公开一种多计算机系统,其中被编写成仅在单个计算机上执行的至少一个应用程序的不同部分均在多个计算机中的对应的计算机上同时地执行,所述多个计算机中的每个计算机具有独立的本地存储器,并且所有计算机通过通信网络互连,其中,存在于所述本地存储器中的存储器位置被分成两组:第一组存储器位置,其中每个被复制在每个所述计算机上;以及第二组存储器位置,其中每个仅出现在所述计算机中的、每个所述第二组存储器位置物理上所在的特定计算机中,所述系统包括:经由所述通信网络把对一个计算机中的所述第一组存储器位置的存储器位置所做的任何变化更新到所述其它计算机的所有其它的对应存储器位置的存储器更新装置;以及改变装置,将所述第二组存储器位置中由于所述应用程序的执行而现在由所述第一组存储器位置的存储器位置引用的任何存储器位置从所述第二组存储器位置改变到所述第一组存储器位置。
根据本发明的第三方面,公开一种适于与至少一个其它计算机合作以执行上述方法或构成上述计算机系统的单计算机。
根据本发明的第四方面,公开一种计算机程序产品,其包括存储在存储介质中并且用于使多个计算机执行以上定义的方法的一组程序指令。
根据本发明的第五方面,公开经由通信网互连并且用于保证执行上述方法的多个计算机。
附图说明
现在将参考附图描述本发明的优选实施例,在附图中:
图1A示意性示出了被布置成运行JAVA代码从而构成单JAVA虚拟机的现有技术计算机;
图1B是类似于图1A的图,但是图解了代码的初始加载;
图1C图解了每个均为JAVA虚拟机的多个计算机形成多计算机系统的互连;
图2示意性图解了“n”个运行应用的计算机,至少一个附加的服务器机器X作为服务器与这些计算机连接;
图3是所有多个机器中的存储器位置的示意图,示出了包含类和对象的存储器位置;
图4是示出图3的各存储器位置及其被访问的能力的表;
图5是类似于图3的图,且示出了指向存储器位置A的存储器位置X的结果;
图6是对应于图5的可达性表;
图7是类似于图3的图,且示出了指向新存储器位置K的存储器位置A;
图8是对应于图7的可达性表;
图9是类似于图7的图,但是示出了指向存储器位置A的存储器位置X的结果;
图10是对应于图9的可达性表;
图11-14图解了分别对应于图4、6、8和10的单独可达性表的多个可达性表;
图15图解了又一个存储器变化;
图16和17分别图解了对应于图15的存储器变化的单个可达性表和多个可达性表;
图18图解了另一个存储器变化;
图19和20分别图解了对应于图19的存储器变化的单个可达性表和多个可达性表;
图21图解了另一个存储器变化;
图22和23分别图解了对应于图22的存储器变化的单个可达性表和多个可达性表;
图24图解了又一个存储器变化,以及
图25和26分别图解了对应于图24的存储器变化的单个可达性表和多个可达性表。
具体实施方式
各实施例将参照JAVA语言进行描述,然而,本领域技术人员应当理解,本发明不局限于该语言,特别地,可用于其它语言(包含过程性语言、声明性语言和面向对象语言),包含MICROSOFT.NET平台和体系结构(Visual Basic、Visual C和Visual C++,以及Visual C#)、FORTRAN、C、C++、COBOL、BASIC等等。
现有技术中已知的是提供通过建立图1A中所示的虚拟机来利用特定语言的应用程序的单计算机或机器(由各制造商中的任何一个所生产,并且具有以各种不同语言中的任何一种语言操作的操作系统(或者等同控制软件或其它机制))。
图1A的代码和数据以及虚拟机配置或方案采取用JAVA语言编写并且在JAVA虚拟机61内执行的应用代码50的形式。因而在应用的期望语言为JAVA语言的情况下,使用JAVA虚拟机,其中JAVA虚拟机能够运行JAVA形式的代码,而不论机器制造商和计算机或机器的内部细节如何。有关更多细节,参见由美国Sun Microsystems公司的T.Lindholm和F.Yellin所著的“The JAVA Virtual Machine Specification”第二版,其通过引用结合于此。
根据本发明的实施例,通过提供如图1B所示被方便地称为“分布式运行时”或“分布式运行时系统”DRT 71的附加设备,改进图1A的常规技术方案。
图1B和1C中,通过由箭头75或75A或75B所示的加载过程,应用代码50被加载到与分布式运行时系统71合作的JAVA虚拟机M1、M2、......、Mn上。如此处所使用的,术语“分布式运行时”和“分布式运行时系统”实质上是同义的,并且通过阐述而不是限制,通常被理解成包含支持在特定平台上运行的、用特定语言编写的软件的库代码和进程。此外,分布式运行时系统还可以包含支持在特定分布式计算环境内运行的、用特定语言编写的软件的库代码和进程。运行时系统(无论是否是分布式运行时系统)通常处理程序与操作系统之间的接口的细节,例如系统调用、程序启动和终止、以及存储器管理。为说明背景,常规的分布式计算环境(DCE)(其不提供本发明优选实施例中所使用的本发明的分布式运行时或分布式运行时系统71的能力)可以从开放软件基金会得到。该分布式计算环境(DCE)执行一种针对在机器上运行的软件的计算机到计算机的通信形式,但是除其许多限制之外,其不能实现所期望的修改或通信操作。除其功能与操作之外,优选的DRT 71协调多个机器M1、M2、......、Mn之间的特定通信。此外,优选的分布式运行时71在JAVA应用50的由箭头75A或75B所示的在图1C的每个JAVA虚拟机72或机器JVM#1、JVM#2、......、JVM#n上的加载过程期间开始运行。根据此处所提供的描述应当理解,虽然许多示例和描述被提供成与JAVA语言和JAVA虚拟机相关,以使得读者能了解具体例子的益处,但是本发明不局限于JAVA语言或JAVA虚拟机,或者任何其他语言、虚拟机、机器或者操作环境。
图1C以改进形式示出了每个如图1B所示的JAVA虚拟机的方案。显然,相同的应用代码50被加载到每个机器M1、M2...Mn上。然而,各机器M1、M2...Mn之间的通信由箭头83表示,并且虽然通过机器硬件物理上传送,但是有利地被每个机器内的各自DRT 71/1...71/n所控制。因而,实际上这可以从概念上理解成经由网络或其它通信链路53而相互通信的DRT 71/1,...71/n,而不是自身或彼此直接通信的机器M1、M2...Mn。所设想和包含的是机器M1、M2...Mn或DRT 71/1、71/2...71/n之间的这种直接通信,或者这样的通信的组合。优选的DRT 71提供独立于传送、协议和链接的通信。
一个公共应用程序或应用代码50,及其可执行版本(可能具有修改)在多个计算机或机器M1、M2...Mn上同时或并发执行。应用程序50被编写为在单机器或计算机上执行(或者在模拟单计算机操作的上述专利申请的多计算机系统上操作)。实质上,改进的结构是在每个单独机器上复制相同的存储器结构和内容。
术语“公共应用程序”应被理解为是指被编写成在单机器上操作的,且在多个计算机或机器M1、M2...Mn中的每一个上、或者可选地在所述多个计算机或机器M1、M2...Mn的某个子集的每一个上全部或部分地加载和/或执行的应用程序或应用程序代码。换句话说,具有以应用程序代码50表示的公共应用程序。其为单个拷贝,或每个均被单独修改以生成应用程序或程序代码的修改拷贝或版本的多个相同拷贝。于是每个拷贝或实例被准备以在对应的机器上执行。在它们被修改之后,从它们执行类似的操作并且彼此一致且连贯地运行的意义上来说,它们是公共的。应当理解,实现本发明的实施例的多个计算机、机器、信息设备等可以任选地连接到或耦合到未实现本发明的实施例的其它计算机、机器、信息设备等。
在每个机器上运行相同的应用程序50(例如并行合并排序、计算流体动力学应用或数据挖掘应用),但是该应用程序的可执行代码根据需要在每个机器修改,使得每个机器上的每个执行实例(拷贝或复本)使其在该特定机器上的本地操作与其它机器上的相应实例(拷贝或复本)的操作协调,使得它们以一致、连贯和协调的方式一起工作,并且看起来像应用的一个全局实例(即“元应用”)。
相同或基本相同的应用代码的各拷贝或复本,每个被加载到互操作且相连接的机器或计算机中对应的一个上。由于每个机器或计算机的特性可能不同,所以应用代码50可在加载之前被修改、在加载过程期间被修改、或者在加载过程之后被修改(虽然有一些缺点),以在每个机器上提供应用代码的定制或修改。不同机器上的程序或应用代码之间的一些不同点可以是允许的,只要能够保持本文所述的其它对互操作性、一致性和连贯性的要求。在下文将会明白,机器M1、M2...Mn中的每个机器,因而全部机器M1、M2...Mn具有相同或基本相同的应用代码50,其通常具有可以是特定于机器的修改。
在每个机器M1、M2...Mn上的应用代码50(或其相关部分)的加载之前、加载期间、或执行前的任何时候,每个应用代码50由对应的修改器(modifier)51根据相同的规则(或基本相同的规则,因为在每个修改器51/1、51/2...51/n内允许小的优化改变)来修改。
机器M1、M2...Mn中的每个机器与相同的(或基本相同或类似的)修改器51(在某些实施例中被实现为分布式运行时或DRT71,而在其它实施例中被实现为应用代码和数据50的附件,并且也能够在JAVA虚拟机自身内实现)一起操作。因而,所有的机器M1、M2...Mn都具有针对所需每个修改的相同的(或基本相同或类似的)修改器51。例如,对于存储器管理和复制、初始化、结束、和/或同步可能需要不同的修改(尽管可能不是所有实施例都需要所有这些修改类型)。
存在修改器51和分布式运行时71的可替选实现。例如,如图1C中虚线所示,修改器51可以被实现为分布式运行时71的部件,或分布式运行时71内部的部件,因此DRT 71可实现修改器51的功能和操作。可替选地,修改器51的功能和操作可以在用于实现DRT 71的结构、软件、固件或其它装置之外实现,例如在代码和数据50内,或者在JAVA虚拟机自身内。在一个实施例中,修改器51和DRT 71两者都以提供DRT和修改器的功能的单段计算机程序代码来实现或编写。在这种情况下,修改器功能和结构实际上被包含到DRT中。与其实现无关地,修改器功能和结构负责修改应用代码程序的可执行代码,而分布式运行时功能和结构负责实现各计算机或机器两者和两者以上之间的通信。在一个实施例中,通信功能通过每个机器上的DRT的计算机程序代码内的中间协议层来实现。例如,DRT可以用JAVA语言来实现通信栈,并使用传输控制协议/网际协议(TCP/IP)来提供机器之间的通信或对话。这些功能或操作可以用各种方法来实现,并且根据本文提供的描述应当理解,这些功能或操作如何确切地被实现,或者在结构和/或过程性元素之间或在计算机程序代码或数据结构之间如何被确切划分对本发明来说并不是重要或至关重要的。
然而,在图1C所示的方案中,提供了多个单独计算机或机器M1、M2...Mn,其中每个都经由通信网络53或其它通信链路互连。每个单独计算机或机器都设置有对应的修改器51。每个单独计算机还设置有连接到通信网络的通信端口。通信网络53或路径可以是任何电子信令、数据、或数字通信网络或路径,并且优选为慢速,因而成本低的通信路径,例如因特网上的、或者包含ETHERNET或INFINIBAND的任何常见组网结构及其扩展和改进上的网络连接。优选地,计算机设置有与通信网络53连接的一个或多个公知通信端口(例如CISCO Power Connect 5224交换机)。
由于上述方案,如果机器M1、M2、......、Mn中的每个机器都具有例如10MB的内部或本地存储器容量,则应用代码50整体上可用的总存储器空间并不是如所期望的那样为10MB乘以机器数量。也不是所有n个机器的内部存储器容量的加性组合。相反,其为10MB,或者大于10MB但是小于n×10MB的某个数。在各机器的内部存储器容量不同(这是允许)的情况下,于是在一个机器中的内部存储器小于至少一个其它机器的内部存储器容量的情况下,当这样的存储器(或其一部分)被作为“公共”存储器(即机器M1...Mn的每个机器上的类似等同存储器),或相反被用于执行公共应用代码时,任何一个机器的最小存储器的大小可用作各机器的最大存储器容量。
然而,尽管对待每个机器的内部存储器的方式可能最初看起来是性能的可能约束,但是,在下文中将会理解这如何导致操作和性能的提高。当然,每个机器M1、M2...Mn都有专用的(即非公共的)内部存储器容量。各机器M1,M2,...Mn的专用内部存储器容量通常近似相等,但是也不一定如此。例如,当多计算机系统是利用由不同实体所拥有或操作的现有计算机、机器或信息设备来实现或组成时,内部存储器容量可能是相当不同的。另一方面,如果正在实现一个新的多计算机系统,则每个机器或计算机优选为选择具有相同的内部存储器容量,但不一定如此。
应当理解,每个机器的独立本地存储器仅仅代表该机器总存储器中被分配给应用程序的在该机器上运行的部分的那部分存储器。因而,其它存储器将被该机器的操作系统以及与应用程序50无关的其它计算任务所占用。
原型多计算机系统的非商业操作表明,并不是该系统中每个机器或计算机都使用或需要引用(例如,具有每个可能的存储器位置的本地复本)每个可能的存储器位置。结果,只要每个机器的本地存储器对于该机器的操作是足够的,则无需每个机器的本地存储器与每个其它机器相同,就可以操作多计算机系统。也就是说,假如特定机器不需要引用(例如具有一些特定存储器位置的本地复本)一些特定存储器位置,则那些特定存储器位置在该特定机器中未被复制是无关紧要的。
选择每个机器中内部存储器的量以在每个机器中以及所连接或耦合的多个机器、计算机或信息设备M1、M2、......、Mn的星座或网络上达到期望性能等级也是有利的。在描述了这些内部和公共存储器考虑因素后,根据本文提供的描述应当理解,机器之间可以是公共的存储器的量并不是限制。
在一些实施例中,多个单独计算机或机器的一些或全部可以被包含在单个外壳或机架(例如由Hewlett-Packard Development公司,Intel公司,IBM公司等制造的所谓“刀片服务器”)、由Intel、AMD或其它公司制造的多处理器(例如对称式多处理器SMP)或多核处理器(例如双核处理器以及芯片多线程处理器)内,或者被实现在单个印刷电路板上或甚至在单个芯片或芯片组内。类似地,还包含具有多核,多CPU的或其它处理逻辑的计算机或机器。
当用非JAVA语言或应用代码环境来实现时,通用平台和/或虚拟机和/或机器和/或运行时系统能够操作该平台和/或虚拟机和/或机器和/或运行时系统环境的语言(例如,可能包含但不局限于源代码语言、中间代码语言、目标代码语言、机器代码语言以及任何其它代码语言中的任何一个或多个)的应用代码50,并且不论机器或处理器制造商以及机器的内部细节如何,利用该平台和/或虚拟机和/或机器和/或运行时系统和/或语言体系结构。还应当理解,平台和/或运行时系统可包含虚拟机和非虚拟机软件和/或固件体系结构,以及硬件和直接硬件编码的应用和实现。
对于更一般的虚拟机或抽象机环境,以及对于可不使用或要求使用类和/或对象的目前和将来的计算机和/或计算机器和/或信息设备或处理系统,本发明结构、方法和计算机程序以及计算机程序产品仍然适用。不使用类和/或对象的计算机和/或计算机器的例子例如包含由Intel公司等制造的x86计算机体系结构,由Sun Microsystems公司等制造的SPARC计算机体系结构,由IBM公司等制造的Power PC计算机体系结构,以及由Apple Computer公司等制造的个人计算机产品。
对于不使用类或对象的概念的这些类型的计算机、计算机器、信息设备以及在其上实现的虚拟机或虚拟计算环境,可概括为例如包含基本数据类型(例如整型数据类型,浮点数据类型,长整型数据类型,双精度数据类型,串数据类型,字符数据类型和布尔数据类型),结构化数据类型(例如数组和记录),派生的类型,或者过程性语言或其它语言或环境的其它代码或数据结构,如函数、指针、组件、模块、结构、引用和联合。当这些结构和过程按需要组合应用时,它们维护计算环境,其中在该计算环境下,计算机或计算环境的存储器位置、地址范围、对象、类、资产、资源或任何其它过程或结构方面,在多个单独机器M1、M2...Mn上以协调的、连贯的和一致的方式按需要被产生、维护、操作和去活或删除。
应用代码50的这种分析或细查可发生在加载应用代码50之前,或者在应用代码50加载过程期间,或者甚至在应用代码50加载过程之后(或者这些情况的某种组合)。这可被比作改写(instrumentation)、程序转换、翻译、或者编译过程,因为应用代码可用附加的指令编写,和/或由保留含义的程序操纵来修改,和/或可选地从输入代码语言翻译成不同的代码语言(例如,从源代码语言或中间代码语言转换到目标代码语言或机器代码语言)。关于这一点,应当理解,术语“编译”通常或按常规涉及代码或语言上的改变,例如从源代码到目标代码,或者从一种语言到另一种语言。然而,在这种情况下,术语“编译”(及其语法上的等同内容)未被如此限制,并且也可以包含或包括相同代码或语言内的修改。例如,将编译及其等同内容理解成包括普通编译(例如,但不限于从源代码到目标代码)和从源代码到源代码的编译,以及从目标代码到目标代码的编译,以及其中的任何变更组合。还包含所谓的“中间代码语言”,其为一种“伪目标代码”。
举例而言,但非限制性地,在一个实施例中,对应用代码50的分析或细查发生在应用程序代码的加载期间,应用程序代码的加载是例如由操作系统从硬盘或其它存储设备、介质或源中读取应用代码50,并且将其拷贝到存储器中,以及准备开始执行该应用程序代码而实现的。在另一个实施例中,在JAVA虚拟机中,分析或细查可发生在java.lang.ClassLoader.loadClass方法(例如“java.lang.ClassLoader.loadClass()”)的类加载过程期间。
可替选地,或者此外,对应用代码50(或应用代码的一部分)的分析或细查甚至可发生在应用程序代码加载过程之后,例如在操作系统已将应用代码加载到存储器中之后,或者任选地,甚至在应用程序代码的相关对应部分的执行已经开始之后,例如在JAVA虚拟机已经通过“java.lang.Classloader.loadClass()”方法将应用代码加载到虚拟机中并且任选地开始执行之后。
计算领域的普通技术人员会知道,各种可能的技术可以用于修改计算机代码,这些技术包括但不限于改写、程序转换、翻译或编译装置和/或方法。
一种这样的技术是,在无需在先或之后改变应用代码的语言的情况下,对应用代码进行修改。另一种这样的技术是将原始代码(例如,JAVA语言源代码)转换成中间表示(或中间代码语言,或伪码),例如JAVA字节代码。一旦该转换发生,就对字节代码进行修改,然后转换可被逆转。这提供了被修改JAVA代码的所期望的结果。
另一个可能的技术是直接从源代码或者通过上述中间语言或通过一些其它中间手段,将应用程序转换到机器代码。然后,在加载和执行机器代码之前修改机器代码。另一个这样的技术是将原始代码转换成中间表示,该中间表示从而被修改并且随后被转换成机器代码。
本发明包括所有这样的修改途径,以及两个、三个甚至更多这样的途径的组合。
DRT 71或其它代码修改装置负责在单独机器M1、M2...Mn中每个机器上建立或复制使得多个机器能互操作的存储器结构和内容。在一些实施例中,此复制的存储器结构相同。而在其它实施例中,此存储器结构会有部分相同,而其它部分不同。在另外的其它实施例中,存储器结构仅在格式或存储约定(如大端字节序(Big Endian)或小端字节序(Little Endian)格式或约定)方面不同。
当这些结构和过程按需要组合应用时,它们维护计算环境,其中在该计算环境下,计算机或计算环境的存储器位置、地址范围、对象、类、资产、资源或任何其它过程或结构方面,在多个单独机器M1、M2...Mn上以协调的、连贯的和一致的方式按需要被产生、维护、操作和去活或删除。
因此,术语“一个”、“单”和“公共”应用代码或程序包含以下情形,在该情形中,所有机器M1、M2...Mn操作或执行相同的程序或代码而不是不同的(和无关的)程序,换言之,相同或基本相同的应用代码的拷贝或复本被加载到互操作且相连接的机器或计算机中的每一个上。
在使用分布式软件的常规方案中,从一个机器的软件到物理上位于另一个机器上的存储器的存储器访问通常通过互连各机器的网络进行。因而,每个机器的本地存储器都能够被任何其它机器所访问,因此不能说是独立的。然而,因为对物理上位于另一个计算机上的存储器的读和/或写存储器访问需要利用互连各计算机的慢速网络,所以在这些配置中,这样的存储器访问可导致存储器读/写处理操作中的实质性延迟,可能大约为106-107个机器中央处理单元的周期(假定为同时期的处理器速度)。最终,该延迟取决于多个因素,例如通信网络的速度、带宽和/或时延。这很大程度上说明了现有技术方案中多个互连机器的低性能。
然而,在本方案中,因为所有存储器位置(或所有存储器位置的某个子集)的当前值被存储在产生读存储器需求的处理所执行的机器上,所以对存储器位置或数据的所有读取都在本地得到满足。
类似地,因为所有存储器位置(或所有存储器位置的某个子集)的当前值被存储在生成写存储器需求的处理所执行的机器上,所以存储器位置或数据的所有写入都在本地得到满足。
这样的本地存储器读和写处理操作通常在102-103个中央处理单元周期内满足。因而实际上,涉及和/或写的存储器访问的等待基本上较少。此外,每个机器的本地存储器不能被任何其它机器访问,因此可被称作是独立的。
本发明独立于传送、网络和通信路径,并且不依赖于各机器或各DRT之间的通信如何进行。在一个实施例中,甚至机器或DRT之间的电子邮件(email)交互也可以满足通信的需要。
结合以上所述,从图2中可以看出,有若干机器M1、M2、...Mn,“n”为大于或等于2的整数,图1的应用程序50在机器M1、M2、...Mn上基本上同时运行。这些机器按层次顺序被分配以数字1、2、3、......等等。该顺序通常是循环的或闭合的,使得当机器2和机器3在层次上相邻时,机器“n”和机器1也是如此。优选地,存在另一个机器X,其被提供来使各种内务处理功能(housekeeping functions)能被执行,例如充当锁服务器。特别地,所述另一个机器X可以是低价机器,并且比可能具有令人满意的属性如处理机速度的其它机器便宜很多。此外,一个附加的低价机器(X+1)优选地可用于在机器X出现故障时提供冗余。当提供两个这样的服务器机器X和X+1时,为了简单,它们优选地作为集群结构的双机器来操作。根据本发明,必要时,机器X和X+1能够作为多计算机系统来操作。然而,这一般会导致不期望的复杂度。如果未提供机器X,则其功能(例如内务处理功能)由其它机器中的一个、一些或全部机器来提供。
上述通过引用并入的说明书公开了一种系统,其中对应的存储器位置可被更新以保证除了传输延迟之外,每个本地存储器的内容基本相同。然而,由于机器数量的增加,且应用程序的复杂度也增加,所以在通信网络53上需要传送的数据量也增加。
为了克服该问题,根据本发明的一个实施例,可能需要更新的存储器位置被分成至少两个类别。第一类别由可被多个机器中的任意两个或更多机器访问,因而应当被不断更新的存储器位置构成。第二类别由仅可被存储器位置物理上所在的本地机器访问的存储器位置构成。对于这些存储器位置,首先不期望将该存储器位置的内容复制到所有其它机器上,其次不期望每当原来的本地存储器内容发生改变,就继续更新所复制存储器位置的内容。属于这两个类别的存储器位置能够容易地通过是否存在指向涉及的存储器位置的指针来区分。存在若干机制或模式,使得能够进行该分类和数据传送。
现在参照图3,多个机器M1、M2、......Mn中的每个机器(如果存在任何服务器机器X,则不同于任何服务器机器X)都具有被示意性示出的其存储器位置。对于机器M1,存在类X1和对象B。对于机器M2,存在与机器M1的相同的类X2,以及对象D。对于机器Mn,存在相同的类Xn,以及两个对象A和E。存储器位置X的内容对每个机器来说都是是一样的,并且每个机器均能够从存储器位置X中读取,以及向存储器位置X写入。为此,存储器位置X的边界用双线表示。
优选地,方便的是由图2的服务器机器X维护表,该表列出每个存储器位置以及能够访问该表中的每个存储器位置的机器。这样的表被称作可达性表,且在图4中示出。图4的表中的第一行涉及存储器位置A,其仅能够被机器Mn访问。图4的表中的第二行涉及存储器位置B,其仅能够被机器M1访问。类似地,对象D仅能够被机器M2访问,而对象E仅能够被机器Mn访问。然而,类X能够被所有机器M1、M2和Mn访问。
在上述的多机器环境中,如果类X的内容由于被各机器中的一个机器写入而改变,则有必要通过网络53将该内容变化发送给所有其它机器。然而,因为对象A、B、D和E每个仅能够被单个机器访问,所以,由于这些存储器位置仅能够被其本地机器访问,在建立或更新这些存储器位置的内容方面的考虑较少。
现在,如果在由特定机器(假定机器Mn)执行的处理期间,类Xn需要引用对象A,则类Xn被称为指向对象A。这在图5中由从类Xn指向对象A的箭头表示。对象A状态的变化意味着现在它能够被所有其它机器访问或引用。因此,在图5中,它被称为对象An,由双线作为边界,并且每个其它机器中被再生为对象A1、A2等。此外,箭头从每个对应的类X1、X2等指向对应的被引用对象A1、A2等。由于对象A的状态的这种改变,图4的可达性表的第一行被修改为如图6所示,以指示对象A现在能够被机器M1、M2和Mn访问。图2的服务器机器X使用图6的经修改的可达性表,以保证如果对象A的内容被一个机器修改,则对象A的内容经由网络3被传送给所有其它机器。
图7和8图解了进一步的修改。这里,机器Mn中的对象A由于机器Mn所执行的处理的原因而现在指向新对象K。结果,现在需要将一个附加行被插入图8中所示的可达性表中。该新的行示出对象K仅能够被机器Mn访问。
在这些情况下,如果进行了先前在上文中关于图5描述的修改,则出现图9中图解的情形。因为类Xn现在指向对象An,所以像前面那样,在每个其它机器中复制对象A。然而,因为对象An本身指向对象K,所以有必要在每个其它机器中复制每个对象K。这产生了对象K1、K2、......Kn。此外,这些对象中的每个对象可被所有机器访问,因此这些对象在图9中的由双线指示。可达性表的对应的变化在图10中指出,其中指示现在对象K可被所有机器访问。
上述详细描述涉及存储器位置,然而,其同样适用于结构、资产或资源(其在JAVA中被称为类或对象)。这些将已被分配了能够被所有机器全局使用的(全局)名字或标记(因为应当理解,不同机器的本地存储器结构可能是不同的)。因而,分配给一个机器中具体存储器位置的本地或实际名字可能不同于分配给另一个机器中对应的存储器位置的本地名字。当类或对象被最初初始化时,该全局名字分配优选地发生在加载时的编译过程期间。这通过由服务器机器X维护的表,可以非常方便地实现。该表也可以包含可达性数据。
计算领域的普通技术人员应当理解,可达性数据使结构、资产或资源(即存储器位置)能被分成两个类别或类。第一类别由能够被所有机器访问的位置构成。关于这样的存储器位置所执行的写动作有必要被分布到所有的机器,使得所有对应的存储器位置具有相同的内容(由于传输更新数据造成的延迟除外)。然而,关于第二类别,因为这些存储器位置仅可被本地计算机访问,所以对这些存储器位置的写动作不需要分布到所有其它机器,也不需要在其它机器上存在对应的存储器位置。作为该分类的结果,相当量的数据不要求从一个机器传输到其它机器,因此网络53上的流量大大减少。
在前面的描述中,提供了位于服务器机器X中并且由其维护的单个可达性表。然而,也可能无需服务器机器X而操作计算机系统,在这种情况下,期望每个机器操作其自身的可达性表。图11-14分别图解了在对应于图4、6、8和10的情况下针对各机器的各可达性表。
这样,在图11中,机器M1的表具有类X的行和对象B的行。类似地,机器M2的表具有类X的行和对象D的行。然而,机器Mn的表具有三行,类X一行,并且对象A和对象E每个一行。当发生通过比较图3和图5而示出的变化时,因为类Xn现在引用对象An,并且因而所有其它类X1、X2等现在必须引用对应的对象A1、A2等,所以所有机器现在必须在其可达性表中包含对象A的行。这就是图12中所图解的情形。其它机器被称为继承对象A的表项。
机器Mn通过查询机器Mn上类X的表项能够确定对象A需要在其它机器上复制。在所图解的情形下,机器Mn通过比较对象A和类X的表项,关于复制做出肯定的确定。如果对象A的表项包含类X的表项中的所有机器,则机器Mn可正确确定出对象A不需要进一步在任何其它机器上被复制。此外,没有表项需要被添加到其它机器,或者在其它机器上被更新。可替选地,如果对象A的表项不包含类X的表项中的全组机器,则机器Mn更新对象A的表项,以包含在类X的表项中列出的机器组,并且还指示在对象A的新表项中列出的所有机器利用机器Mn上对象A的新表项中列出的机器组来针对对象A更新它们的本地表。最后,对于在继承机器Mn上类X的机器组之前还没有出现在机器Mn上对象A的表项中的机器组,机器Mn指示那些机器(即机器M1和M2)增加对象A的本地表项,并且在存储器中创建对象A的本地复本和到类X的相关引用。
类似地,参考图7,当机器Mn创建附加的对象K时,由于机器M1和M2没有对象K的本地复本,并且如图7中所示,它们也没有对象A和K的表项,所以如图13所示,在机器Mn的可达性表中创建对象K的附加行。如图9中所示,将对象A的引用分配到类X需要对象A继承类X的表项。然而,此外,由于对象A引用对象K,对象K也必须通过继承对象A的新更新的表项而间接继承类X的表项(现在包含类X的表项的继承的值)。根据机器Mn上对象A和K的表项的更新,机器Mn指示在对象A和K的表项中列出的所有机器更新它们的本地表,并且还指示分别在对象A和K的表项中原来未出现的所有机器创建对象A和K的本地复本。所得到的各机器的表如图14所示。
图15图解了另一个例子。这里,被指定为A1和A2的对象在机器M1和M2上被共享,但是未出现在机器Mn上。在图16和17中对象A的表项中指示出这种情况,图16和17分别示出由服务器机器X使用的单个可达性表,或者由各个机器使用的多个可达性表。如图18所示,机器M2在应用程序的处理期间将对象D的引用分配到对象A。结果,DRT71/2检查机器M2上对象D和A的表项。这个对表的查询确定对象D的表项不包含在对象A的表项中列出的机器组中的所有机器。因此,更新机器M2上的对象D的表项,以包含还未在对象D的表项中出现的对象A的表项的机器,其在这种情况下是附加的机器M1。根据该操作,机器M2指示机器M1创建由现在已更新的机器M2上对象D的表项上列出的机器构成的、对象D的表项,并且创建对象D的本地复本。所得到的单个可达性表的改变以及多个可达性表的改变分别在图19和20中示出。
图21中图解了另一个例子,其中由机器M1添加分配给类X的、到对象A的引用。结果,查询类X和对象A的表以确定对象A是否在改变其可达性状态。如果对象A的表项包含类X的表项中的所有机器,则不采取附加动作。然而,如果如图21中的情况那样,类X在其表项中包含未包括在对象A的表项中的机器,则发生可达性变化。根据该变化,机器M1更新类X的项。此外,机器M1指示所有其它机器增加和/或更新它们的对象A的表项,以与机器M1上的对象A的现在已更新的表项相同。根据该操作,还未出现在对象A的表项中的任何机器被指示添加对象A的该表项,并且在本地存储器中创建对象A的复本(在这种情况下仅在机器Mn中需要如此)。然而,机器M1也知道对象A引用对象D,因此对象D必须继承对象A的可达性变化。因此,更新对象D的表项,以包含在对象A的现在已更新的表项中列出的所有机器。
除了以上所述,机器M1也指示先前未包含在对象D的表项中的所有机器(在这种情况下仅为机器Mn)用与机器M1上的现在已更新的表项值相等的值添加对象D的表项,并且在本地存储器中创建对象D的复本。此外,机器M1指示所有其它机器(在这种情况下仅为机器M2)用机器M1上所更新的新表项值更新对象D的表项。反映这些变化的单个可达性表和多个可达性表分别在图22和23中示出。
现在参照图24,在图18中图解的情形由于机器M1的类X被分配了到对象D的引用而被修改。与该情况相关联地,DRT 71/1针对可达性改变已发生的可能性,检查对象D和类X的可达性表。因此,比较对象D和类X的表项,并且如果对象D的表项包含类X的表项中列出的所有机器,则不需要采取附加动作。可替选地,如果对象D的表项不包含类X的表项中列出的所有机器,则已经发生可达性变化,并且需要相应的动作。
如图24中所示,机器M1确定对象D已经发生可达性变化。因此,机器M1首先更新其对象D的表项以包含类X的表项中的所有机器。对于先前不在对象D的表项的机器组中的每个新机器,机器M1指示每个这样的机器添加与机器M1上对象D的现在已更新的机器项相等的对象D的本地表项,并且在本地存储器中创建对象D的复本。对于每个其它机器,机器M1还指示其它机器更新其对象D的表项以与机器M1中的对象D的表项相等。反映这些变化的单个可达性表和多个可达性表分别在图25和26中示出。
前面仅描述了本发明的一些实施例,本领域的技术人员知道,在不偏离本发明的范围的情况下,可以对其进行修改。例如,图4、6、8和10的表全都示出对应于每个存储器位置的行。实际上,对于仅被其本地机器访问的存储器位置如D和E,在表中根本不必具有行。相反,如果该存储器位置变为可被一个或多个其它机器访问,才创建这样的行。类似地,提及JAVA,包含JAVA语言以及JAVA平台和体系结构。
在所有描述的修改实例中,其中应用代码50在加载之前、在加载期间、或者甚至在加载之后但在未修改的应用代码的执行开始之前被修改,应当理解,被修改的应用代码在进行的修改之后取代未修改的应用代码而被加载,以及取代未修改的应用代码而被执行。
可替选地,在修改发生在加载之后以及在未修改的应用代码的执行开始之后的情况下,应当理解,未修改的应用代码可以被对应于进行的修改、所修改的应用代码所整体替换;或者,可替选地,随着对正在执行的未修改应用代码递增地进行修改,未修改的应用代码可以被部分或者递增地替换。无论使用这样的修改途径中的哪种,被进行之后的修改都取代未修改的应用代码而执行。
针对多个机器M1、M2...Mn中的每一个机器上的所有类似等同本地对象(类,资产或资源等)使用全局标识符作为“元名字”或“元标识”的形式是有利的。例如,不必跟踪每个机器上多个类似等同对象的每个类似等同本地对象的每个唯一本地名字或标识,取而代之,可以定义或使用对应于每个机器上的多个类似等同对象的全局名字(例如“globalname7787”),在此情况下每个机器将全局名字与特定的本地名字或对象联系起来(例如“globalname7787”对应于机器M1上的对象“localobject456”,“globalname7787”对应于机器M2上的对象“localobject885”,以及“globalname7787”对应于机器M3上的对象“localobject111”等等)。
根据本文所提供的详细描述,本领域的技术人员还会明白,在由每个DRT 71当最初记录或创建所有对象中的全部或某子集的列表时创建的表、列表或其它数据结构(例如存储器位置或字段)中,对于各个机器M1、M2...Mn上的每个这样的记录的对象,存在在机器M1、M2...Mn中的每个机器上公共或类似的名字或标识。然而,在各个机器中,因为每个机器可能,并且通常会根据其自身的内部处理来存储不同存储器位置处的存储器值或内容,所以对应于指定的名字或标识的本地对象将会或者可能会随时间而变化。因而,每个DRT中的表、列表、或其它数据结构一般会具有对应于单个存储器名字或标识的不同本地存储器位置,但是每个全局的“存储器名字”或标识会具有存储在不同本地存储器位置中的相同的“存储器值或内容”。所以,对于每个全局名字,会存在一族对应独立本地存储器位置,其中在每个计算机中有一个族成员。虽然本地存储器名字可能不同,但是资产、对象、位置等基本上具有相同内容或值。所以族是连贯的。
本文所使用的术语“表”或“表格”意图包括任何列表或有组织的、无论为何种格式、并且在其内可以以有序的方式存储和读出数据的数据结构。
根据本文提供的说明,本领域的普通技术人员也应该明白,应用程序代码50在加载期间的上述修改可以用多种方法或由各种装置来实现。这些方法或装置包含但不局限于至少下列五种方法以及这五种的变型或组合,包含:
(i)加载时的再编译;
(ii)加载之前的预编译过程;
(iii)加载之前的编译;
(iv)“即时(just-in-time)”编译,或
(v)加载后的再编译(但是,例如当在分布式环境中执行相关或对应的应用代码之前)。
通常,术语“编译”意味着代码或语言方面的改变,例如从源代码到目标代码,或从一种语言到另一种语言。显然,在本说明书中,术语“编译”(及其语法上的等同内容)的使用未被如此限制,并且也可以包含或包括相同代码或语言内的修改。
计算机和/或编程技术领域的技术人员应该知道,当附加的代码或指令被插入到已有代码或指令集中以将其修改时,已有代码或指令集很可能需要进一步修改(例如通过对连续指令的再编号),使得偏移,分支、属性、标记(mark up)等被正确处理或满足。
类似地,在JAVA语言中,存储器位置包含例如字段和数组两种类型。以上所述涉及字段,并且数组类型所需的改变基本上是相同的必要变更。并且,本发明同样适用于与JAVA类似的编程语言(包含过程性的、声明性的和面向对象的语言),包括Microsoft.NET平台和体系结构(VisualBasic、Visual C/C++,以及C#),FORTRAN,C/C++,COBOL、BASIC等。
本文所使用的术语“对象”和“类”源自JAVA环境,并且意图包括源自不同环境如动态链接库(DLL),目标代码包,功能单元或存储器位置的类似术语。
关于本发明的实施例描述了各种装置,例如包含但不限于锁装置、分布式运行时装置、修改器或修改装置等。在本发明的至少一个实施例中,这些各种装置中的任何一个或每个可通过在计算机逻辑电路、处理器、ASIC、逻辑或电子电路硬件、微处理器、微控制器或其它逻辑内执行的计算机程序代码语句或指令(可能包括通过多个计算机程序代码语句或指令)来实现,以修改这样的逻辑或电路的操作来实现所述的操作或功能。在另一个实施例中,这些各种装置中的任何一个或每个可以用固件实现,而在其它实施例中,其可以用硬件实现。此外,在本发明的至少一个实施例中,这些各种装置中的任何一个或每个可由计算机程序软件、固件和/或硬件的组合来实现。
上述方法、过程和/或例程中的任何一个和每个可有利地被实现为存储在任何有形介质上或以电子、信号或数字形式存在的计算机程序和/或计算机程序产品。这样的计算机程序或计算机程序产品分别包括指令,和/或被组织成模块、程序、子程序,或者以任何其它方式组织,以便在处理逻辑如计算机、计算机器或信息设备的处理器或微处理器中执行;计算机程序或计算机程序产品修改其在上面执行的计算机的操作,或者修改与该计算机程序或计算机程序产品所在的或在上面执行的计算机相耦合、连接或者以信号通信的计算机上的操作。这样的计算机程序或计算机程序产品修改计算机、计算机器和/或信息设备的操作和体系结构性的结构,以改变计算机的技术操作,并实现本文所述的技术效果。
因此,本发明可包含一种计算机程序产品,其包括一组程序指令,其中该组程序指令存储在存储介质中,或者以任何形式电子地存在,并且可用于使多个计算机执行如本文(包括任一权利要求中)所述的方法、过程、例程等中的任何一个。
此外,本发明包含(但不局限于)多个计算机,或者与经由通信网络或其它通信链路或路径互连、并且每个可用于基本同时或并行地执行被编写成仅在单个计算机上或者在各计算机中对应的不同的计算机上操作的应用代码的相同或不同部分的单个计算机。所述计算机被编程成在被加载计算机程序产品时或者根据后续指令,执行说明书中描述的、或任一权利要求书中提出的任何方法、过程或例程。类似地,本发明在其范围内还包含被布置成与类似的、或基本类似的计算机合作以形成多计算机系统的单个计算机。
概括地说,提供一种选择多计算机环境中要基本上同时更新的独立存储器位置的方法,在该多计算机环境中,被编写成仅在单个计算机上执行的至少一个应用程序的不同部分均在所述多个计算机的对应的不同计算机上基本上同时执行,所述方法包括步骤:
(i)选择第一组存储器位置,其中每个存储器位置在每个计算机上被复制;
(ii)忽略第二组存储器位置,其中每个存储器位置仅出现在所述计算机中的、每个第二组存储器位置物理上所在的特定计算机中;
(iii)从第二组升级第一组中的存储器位置开始引用的任何存储器位置;
(iv)在所述计算机中除了当在第二组中时所述升级的第二组位置物理上所在的计算机之外的所有其它计算机中,复制所述升级的第二组位置;
(v)将复制的、升级的第二组位置分配给第一组,以及
(vi)利用对各计算机中的任何计算机的第一组位置所做的任何变化,基本同时地更新各计算机中的其它计算机的第一组位置。
优选地,所述方法还包括步骤:
(vii)从第二组存储器位置中将所升级的第二组存储器位置自身引用的任何一个或多个存储器位置升级,从而由升级的存储器位置所引用的存储器位置继承其引用存储器位置的升级。
优选地,所述方法还包括步骤:
(viii)维护列出第一组存储器位置的表。
优选地,所述方法还包括步骤:
(ix)在另一个服务器计算机上针对所有多个计算机维护一个所述表。
可替选地,所述方法还包括步骤:
(x)维护多个所述表,所述多个计算机的每个计算机中一个表。
优选地,存储器位置包含资产、结构或资源。
一种多计算机系统,其中,被编写成仅在单个计算机上执行的至少一个应用程序的不同部分均基本同时地在多个计算机中对应的不同计算机上执行,所述多个计算机中每个具有独立本地存储器,并且其中所有计算机通过通信网络互连,其中,存在于本地存储器中的存储器位置被分成两组:第一组存储器位置,其中每个被复制在每个所述计算机上;以及第二组存储器位置,其中每个仅出现在所述计算机中的、每个所述第二组存储器位置物理上所在的特定计算机中,所述系统包括:经由所述通信网络把对一个计算机中的所述第一组的存储器位置所做的任何变化更新到所述其它计算机的所有其它的对应存储器位置的存储器更新装置;以及升级装置,将所述第二组中由于所述应用程序的执行而现在由所述第一组的存储器位置引用的任何存储器位置从所述第二组升级到所述第一组。
优选地,所述升级装置包含可用于将所升级的第二组存储器位置自身引用的任一存储器位置或若干存储器位置从第二组存储器位置升级的继承装置。优选地,所述升级装置包含列出第一组存储器位置的表。
优选地,所述系统具有存在于又一个服务器计算机上的、用于所有所述多个执行应用程序的计算机的一个表。
可替选地,所述系统具有多个表,多个执行应用程序的计算机中的每个计算机一个表。
优选地,存储器位置包含资产、结构或资源。
此外,提供一种计算机程序产品,其包括存储在存储介质中并且可用于使许多个计算机执行上述方法中的任何一种方法的一组程序指令。
类似地,提供经由通信网互连并且可用于保证执行上述方法中的任何一种方法的多个计算机。
此外,还提供单个计算机,用于与至少一个其它计算机合作以执行上述方法中的任何一种方法或者构成上述计算机系统。
本文所使用的术语“包括”(及其语法变型)用于表示“具有”或“包含”的包括性含义,而不是用于表示“仅由......组成”的排它性含义。

Claims (12)

1.一种选择多计算机环境中要同时更新的独立存储器位置的方法,在该多计算机环境中,被编写成仅在单个计算机上执行的至少一个应用程序的不同部分均在所述多个计算机的对应的不同计算机上同时执行,所述方法包括步骤:
(i)选择第一组存储器位置,其中所述第一组存储器位置的每个存储器位置在每个所述计算机上被复制;
(ii)忽略第二组存储器位置,其中所述第二组存储器位置的每个存储器位置仅出现在所述计算机中的、每个所述第二组存储器位置物理上所在的特定计算机中;
(iii)将所述第一组存储器位置中的存储器位置开始引用的任何存储器位置从所述第二组存储器位置改变到所述第一组存储器位置;
(iv)在所述计算机中除了当在所述第二组存储器位置中时所述改变的第二组存储器位置物理上所在的计算机之外的所有其它计算机中,复制所述改变的第二组存储器位置;
(v)将所述复制、改变的第二组存储器位置分配给所述第一组存储器位置,以及
(vi)利用对所述计算机中的任何计算机的第一组存储器位置所做的任何变化,同时地更新所述计算机中的其它计算机的所述第一组存储器位置。
2.如权利要求1所述的方法,还包括步骤:
(vii)将由改变的第二组存储器位置自身所引用的任何存储器位置从所述第二组存储器位置改变到所述第一组存储器位置,从而所述任何存储器位置继承对所述任何存储器位置进行引用的所述改变的第二组存储器位置的改变。
3.如权利要求1或2所述的方法,还包括步骤:
(viii)维护列出所述第一组存储器位置的表。
4.如权利要求3所述的方法,还包括步骤:
(ix)在另一个服务器计算机上针对所有所述多个计算机维护一个所述表。
5.如权利要求3所述的方法,还包括步骤:
(x)维护多个所述表,所述多个计算机的每个计算机中一个表。
6.如权利要求1、2、4或5所述的方法,其中所述存储器位置包含资产、结构或资源。
7.一种多计算机系统,其中,被编写成仅在单个计算机上执行的至少一个应用程序的不同部分均同时地在多个计算机中对应的不同计算机上执行,所述多个计算机中每个具有独立本地存储器,并且其中所有计算机通过通信网络互连,其中,存在于所述本地存储器中的存储器位置被分成两组:第一组存储器位置,其中每个被复制在每个所述计算机上;以及第二组存储器位置,其中每个仅出现在所述计算机中的、每个所述第二组存储器位置物理上所在的特定计算机中,所述系统包括:经由所述通信网络把对一个计算机中的所述第一组存储器位置的存储器位置所做的任何变化更新到所述其它计算机的所有其它的对应存储器位置的存储器更新装置;以及改变装置,将所述第二组存储器位置中由于所述应用程序的执行而现在由所述第一组存储器位置的存储器位置引用的任何存储器位置从所述第二组存储器位置改变到所述第一组存储器位置。
8.如权利要求7所述的系统,其中所述改变装置包含可用于将所改变的第二组存储器位置自身引用的任一存储器位置或若干存储器位置从第二组存储器位置改变到第一组存储器位置的继承装置。
9.如权利要求7或8所述的系统,其中所述改变装置包含第一组存储器位置的表。
10.如权利要求9所述的系统,具有存在于又一个服务器计算机上的、用于所有所述多个执行应用程序的计算机的一个表。
11.如权利要求9所述的系统,具有多个表,多个执行应用程序的计算机中的每个计算机一个表。
12.如权利要求7、8、10或11所述的系统,其中所述存储器位置包含资产、结构或资源。
CN200680037477.0A 2005-10-10 2006-10-05 具有部分存储器更新的改进的机器体系结构 Expired - Fee Related CN101283343B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
AU2005905582 2005-10-10
AU2005905582A AU2005905582A0 (en) 2005-10-10 Modified Machine Architecture with Partial Memory Updating
PCT/AU2006/001447 WO2007041762A1 (en) 2005-10-10 2006-10-05 Modified machine architecture with partial memory updating

Publications (2)

Publication Number Publication Date
CN101283343A CN101283343A (zh) 2008-10-08
CN101283343B true CN101283343B (zh) 2010-05-19

Family

ID=37942200

Family Applications (1)

Application Number Title Priority Date Filing Date
CN200680037477.0A Expired - Fee Related CN101283343B (zh) 2005-10-10 2006-10-05 具有部分存储器更新的改进的机器体系结构

Country Status (4)

Country Link
EP (1) EP1934774A4 (zh)
JP (1) JP2009512028A (zh)
CN (1) CN101283343B (zh)
WO (1) WO2007041762A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9235485B2 (en) * 2013-07-22 2016-01-12 International Business Machines Corporation Moving objects in a primary computer based on memory errors in a secondary computer

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324587B1 (en) * 1997-12-23 2001-11-27 Microsoft Corporation Method, computer program product, and data structure for publishing a data object over a store and forward transport
CN1461438A (zh) * 2000-04-26 2003-12-10 计算机合作者思维公司 在分布计算机系统中保持数据完整性的方法与设备

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2656543B2 (ja) * 1988-05-26 1997-09-24 東京電力株式会社 ブロードキャストメモリ方式分散コンピュータシステム
JPH06332869A (ja) * 1993-05-24 1994-12-02 Hitachi Ltd 共有データ管理システム
WO1995008809A2 (en) * 1993-09-24 1995-03-30 Oracle Corporation Method and apparatus for data replication
JP3489157B2 (ja) * 1993-11-26 2004-01-19 株式会社日立製作所 分散共有メモリシステムおよび計算機
JPH0863382A (ja) * 1994-08-19 1996-03-08 Fujitsu Ltd 分散システムにおけるデータ整合性確認方法及びデータ整合性確認装置
US5799306A (en) * 1996-06-21 1998-08-25 Oracle Corporation Method and apparatus for facilitating data replication using object groups
US20040073828A1 (en) * 2002-08-30 2004-04-15 Vladimir Bronstein Transparent variable state mirroring
JP3897028B2 (ja) * 2004-03-19 2007-03-22 日本電気株式会社 情報処理システム、共有データ処理方法、共有データ処理プログラム
KR101209023B1 (ko) * 2004-04-22 2012-12-10 와라텍 피티와이 리미티드 코디네이트된 오브젝트를 갖는 변경 컴퓨터 아키텍쳐

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6324587B1 (en) * 1997-12-23 2001-11-27 Microsoft Corporation Method, computer program product, and data structure for publishing a data object over a store and forward transport
CN1461438A (zh) * 2000-04-26 2003-12-10 计算机合作者思维公司 在分布计算机系统中保持数据完整性的方法与设备

Also Published As

Publication number Publication date
EP1934774A4 (en) 2009-04-15
CN101283343A (zh) 2008-10-08
JP2009512028A (ja) 2009-03-19
EP1934774A1 (en) 2008-06-25
WO2007041762A1 (en) 2007-04-19

Similar Documents

Publication Publication Date Title
US8645929B2 (en) Producer graph oriented programming and execution
US20180275965A1 (en) Distributed application definition
CN101548268A (zh) 高级竞争检测
CN103262064A (zh) 分布式计算体系结构
US7581069B2 (en) Multiple computer system with enhanced memory clean up
US20080215593A1 (en) Replication of object graphs
CN101283343B (zh) 具有部分存储器更新的改进的机器体系结构
Salzman et al. Prototypes with multiple dispatch: An expressive and dynamic object model
Grö\e-Rhode Algebra transformation systems and their composition
CN101283342B (zh) 对象图的复制
CN101283344B (zh) 具有增强的存储器清除的多计算机系统
US8122198B2 (en) Modified machine architecture with partial memory updating
CN101288062B (zh) 开销减少的多机器体系结构
US8209393B2 (en) Multiple machine architecture with overhead reduction
Garnier et al. CPS implementation of a BSP composition primitive with application to the implementation of algorithmic skeletons
Launay et al. Easing parallel programming for clusters with Java
AU2006301910B2 (en) Multiple computer system with enhanced memory clean up
Szaday Building blocks for high-performance languages
AU2006303865B2 (en) Multiple machine architecture with overhead reduction
Bopuri et al. Aspect Oriented Programming Through C# .NET
Atitallah et al. Gaspard2 UML profile documentation
Watson et al. The NIP parallel object-oriented computational model
Zhu Programming and compiling for distributed architectures
Lu Scoped behaviour for optimized distributed data sharing
Díaz et al. Logic Channels: a coordination approach to distributed programming

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100519

Termination date: 20151005

EXPY Termination of patent right or utility model