分布式处理的制作方法

文档序号:6412906阅读:199来源:国知局
专利名称:分布式处理的制作方法
技术领域
本发明涉及分布式处理,具体地但并不仅限于控制通信网的分布式处理。更具体地,本发明涉及开发与更新实现在分布式处理器上的控制系统,它们最好是(但不一定是)以面向对象的方式实现的进程。
与日俱增地需要电信网来支持高带宽低延迟的信息流。所要求的带宽迅速地从每秒千位剧增到每秒兆位,对于某些应用甚至到每秒千兆位(特别是诸如对点播电视、活动共享的模拟(animated sharedsimulations)及分布式计算)。
为了提供诸如将呼叫改发到特定号码等“智能网”设施,计算机程序在若干与交换中心连接的主计算机(例如多达100)上运行。将服务提供给特定用户的方式(例如,将对用户的呼叫的路由确定到特定的号码上)取决于存储在主计算机上的与该用户相关的数据。从而,在数十或数百台主计算机上可能有数百万用户记录。在“20-20观察-21世纪智能软件体系结构”(P.A.Martin,BT技术杂志卷13第二号,1995年4月)中,本发明人建议采用面向对象的技术来实现要求的分布式处理。
面向对象的技术描述了可在诸如E.L.Cusack与E.S.Cordingley编辑的BT技术杂志卷11第三号,1993年7月,“面向对象的技术”中找到。虽然这一名词并不总是精确地使用,面向对象的计算这里指其中数据是以“封装”的形式存储的,其中数据不是可由调用程序或例程直接访问的而是只能由能读、写与编辑数据的程序的有限部分访问的计算技术而言。将数据记录及其关联的计算机代码称作“对象”。与对象的通信通常是用“报文传递”的;即,对对象的调用传递数据值并调用包含在该对象内的程序之一的操作,然后返回数据值。
想要采用面向对象的方法的程序员有多种语言可供使用。其中,当前最普通的是C++。
分布式处理在若干方面与单处理器操作不同。首先,取决于其它程序或数据是位于与调用程序同一主计算机上还是不同的主计算机上而可能需要不同的访问技术。程序或数据的位置也会影响从另一程序到达它的速度。并且,一台或多台计算机有可能故障而留下其它的进行操作。
分布式计算传统上采用“客户-服务器”配置执行,其中一台计算机上的“客户”程序询问另一台计算机上的“服务器”程序,然后后者执行客户程序所要求的功能或返回数据。
面向对象的技术尚未广泛用于分布式处理。这一方面的当前技术状态的概述可在“面向对象的程序设计系统;Blair G.,Pitman出版社,伦敦,1991(ISBN0-273-03132-6)尤其是在223-243页的第9章中;“分布式系统与对象”;David Hutchison与JonathanWalpole,中找到。早先的尝度通常是在现有的计算机语言上增加新的语法或建立新的计算机语言来扩展传统的面向对象的编程来处理分布式处理。
H.Sivaraman等人的论文“将顺序程序并行化到工作站群集”,1995年ICPP并行处理挑战专题研究组会报,38-41页,公开了将顺序程序转换成在使用紧耦合的分布式控制系统的多台计算机上并行执行,换言之,使用共享存储器技术的控制系统。
一方面,本发明提供了分布式计算系统,其中将多个对象(即可用其本身的代码读与写的数据记录)分布在分布式计算系统的不同主计算机上,其中各主计算机设置有指定这些系统的全体数据记录所在的计算机的位置表。
从而不需要中央控制点,否则它会构成处理的瓶颈。此外,由于在所有主计算机上位置表可以是一样的,便能通过简单地从现有的主计算机上拷贝位置表面相对容易地增加新的主计算机。
最好将主计算机配置成可将数据记录从第一主计算机移动到第二主计算机。
最好将主计算机配置成在这一移动时,将在其上重新定位记录的主计算机的位置发信号通知各其它主计算机。
可将主计算机配置成使各位置表中还存储在其上建立数据记录的主计算机的位置。
最好,为了存取数据记录,将各主计算机配置成读取它所存储的位置表,然后在必要时访问在其上建立该数据记录的主计算机的位置表。
最好,数据记录包括各只能通过关联的代码访问的对象,并且更好,这种对象包括同一类的多个对象,以及这多个对象共用所述关联的代码。
第二方面,本发明提供了供与包含多台互连的计算机的分布式控制系统一起使用的编译程序(或预编译程序),所述编译程序装置配置成接受适合于在单一计算机上编译的源语言的原始源程序,其特征在于分布式控制系统是松耦合的;及在于将所述编译程序装置配置成接受所述原始源代码程序及在所述原始源程序中定位可从所述源程序内其它点上调用的功能,并适应所述原始源程序来允许从其它计算机远程调用所述功能。
第三方面,本发明提供了供在包含多台互连的计算机的分布式控制系统中使用的编译程序(或预编译程序),所述编译程序装置配置成接受适合于在单一计算机上编译的源语言的原始源程序,其特征在于该分布式控制系统是松耦合的;及在于该编译程序装置包括编译程序并配置成在所述原始源程序中定位将由所述编译程序作为对单一计算机存储空间中的区域的指针编译的参照,以及修正所述原始源程序以便能参照其它所述计算机的存储空间。
第四方面,本发明提供了供在包括多台互连的计算机的分布式控制系统中使用的编译程序(或预编译程序),所述编译程序装置配置成接受适合于在单一计算机上编译的源语言的原始源程序,其特征在于该分布式控制系统是松耦合的;及在于所述编译程序装置配置成读取所述原始源程序及在其上加上描述包括在所述原始源程序中的数据与程序结构的一组数据记录。
在本发明的上下文中松耦合一词的指采用报文技术而非共享存储器技术的控制系统而言。
本发明的所有方面都涉及供在多台计算机上顺序执行的顺序程序的转换,而非上述Sivaraman等人完全涉及并行执行的论文。
方便地,本发明的这些方面包括一个预编译程序,后者能与更传统的编译程序一起使用,但应理解可将本发明的功能性直接加入到重新编写的编译程序中。
从而,在这些方面中,本发明隐藏了程序员使程序适应在许多不同处理器上操作的复杂性,减少了生成可执行程序所需的时间。
本发明还提供了包括上述第二、第三与第四方面中任何两种或两种以上的特征的组合的编译程序装置。
第五方面,本发明提供了包括由多台互连的计算机构成的分布式控制系统及用于为所述计算机编译程序的编译装置的电信系统,该装置包括配置成编译供在单一主计算机上执行的源程序的编译程序,及配置成接受适合于单一计算机执行的原始源程序及修正所述原始源程序以增加附加的源码,借此生成修正的源程序,后者在经过所述编译程序编译后,将在所述分布式控制系统上执行。
本发明的这一方面所生成的单一可执行程序可以以相同的拷贝分布到该分布式计算系统的所有处理器(主计算机)上。这使得容易在分布式计算系统上增加新的主处理器。
在本实施例中,源程序是面向对象的语言,并最好是C++或其变体的。C++在为分布式环境编译时提出额外的问题,由于它是旨在用于单处理器编译及不同的进程通过共享的存储器指针通信的,它不能在多处理器环境中操作。
本发明的其它方面与实施例如此后描述及要求的。
下面以示例方式参照


本发明的实施例,其中图1为展示体现本发明的电信系统的部件的方框图;图2为展示图1的系统的其它实施例的方框图;图3为展示构成图1与2的系统的一部分的主计算机的部件的方框图;图4为展示构成图1与2的系统的一部分的编译程序装置的元素的方框图;图5为展示图4的编译程序装置的操作的流程图;图6为指示图5中所执行的处理的阶段性产品的示意图;图7a为表示保持在构成图1的一部分的智能域中的数据结构的图;图7b为表示保持在构成图1的一部分的传送域中的数据结构的图;图8示出图7a的一个部件的存储器中的数据结构;图9示出图4的装置的预编译程序在扩展保持在图4的源码存储器中的原始源码来生成扩展的源码时的操作;图10为展示预编译程序的总操作序列的流程图;图11(包括图11a及11b)为更详细地示出图10的进程中用于构成类型模型的部分的流程图;图12示出该进程所生成的附加源码;图13示意性示出这样生成的类型模型的结构;图14为展示图10的进程在提供对象的远程调用时的另一部分的步骤的流程图;图15对应指示所生成的附加源码;图16为展示图10的进程替换局部指针的又另一阶段的步骤的流程图;图17示出所生成的对应附加源码;图18a为通过局部指针调用功能的示意图;图18b为在执行图16的进程之后通过参照调用功能的对应示意图;图19示出作为图3的主计算机的对象管理程序的一部分保持在存储器中的对象位置表的结构;图20示出作为其对象管理程序的一部分存储在图3的主计算机的存储器中的主状态表的结构;图21(包括图21a及21b)为展示主状态表的更新的流程图;图22(包括图22a及22b)为展示构成新对象的进程的流程图;图23为展示将对象从一台主计算机移动到另一台的进程的流程图;以及图24(包括图24a、24b及24c)为展示将报文传输到远程主计算机上的对象的进程的流程图;参见图1,按照本发明生成的电信系统包括用构成传送域6的通信信道4(如微波链路、光纤缆、同轴铜电缆或上文中任何一种上所携带的虚拟电路)互连的多个交换中心或交换机2a、2b。连接在传送域6上的有智能域8,后者包括通过信号链路12a、12b、12c(它们也互连主计算机10a、10b)与交换中心2a、2b信号通信的多台主计算机10a、10b。例如,这两个域可用诸如信号系统7(SS7)等协议互连。
主计算机10a、10b一起构成松耦合的分布式控制系统,在于它们只能利用报文技术通信,而不用共享存储器技术通信。
诸如电话14a、14b等最终用户终端装置(也称作终端设备)以及诸如电视播放机16等宽带通信装置一起构成通过本地环路连接线20a、20b、20c(例如光纤、蜂窝式无线电或双绞铜线电缆链路)连接在传送域6上的最终用户域18。
进一步提供通过诸如ISDN信道或其它高带宽链路等局部环路连接线28a、28b、28c与传送域8连接的包含诸如电视播放机24及计算机终端26等提供服务(例如电视服务)的设备的服务提供者域22。
以已知的方式,利用最终用户终端装置14或16通过传送域6将请求传递给服务提供者域22。结果,通过传送域6建立了信道,而服务提供者域22通过该信道将服务传输给最终用户域18(例如通过传输实时电影或电子格式的数据文件)。
在传统的普通老式电话服务(POTS)中,传送域6是简单地受最终用户域中生成的拨号控制来建立传送路径的。然而,当前智能域提供传送域的“智能网”控制。智能域8从传送域6接收被拨号与/或主拨号,并根据被拨或主拨号之一或两者执行某种呼叫处理。智能域通常提供号码转发服务,其中转发被拨电话号码以提供对另一号码的呼叫转发服务。在这一情况中,被拨号码对应于主计算机10之一上存储的记录,响应链路12之一上的信号访问该记录以生成对应的重定向号码。
通常,响应传送域6中发生的事件(诸如从最终用户域18启动的呼叫),智能域提供控制信息来控制传送域6。
其它数据也存储在智能域中。在本实施例中,各呼叫的记帐数据存储在智能域中,以便定期向各客户发帐单。
参见图2,智能域8还包括编译程序装置30,该装置包括通过网络服务器11a-11c及在编译程序装置30、主机10与服务器11之间运行的广域网(WAN)连接在主计算机10上的编程的工作站。
这些服务器还连接到包括在因特网32内的一个或多个环球信息网(WWW)服务器计算机上,并从而连接到因特网上的编辑终端15a-15d上(诸如通过本地包交换节点)。
参见图3,各主计算机10包括大型主机或服务器,后者包括通过WAN连接在服务器11上的通信硬件;处理器102;以及存储器104,包含随机存取存储器形式的快速存取存储器及磁或光盘驱动器形式的脱机存储器两者。
存储在存储装置104中的有操作系统106(如UNIX(TM));对象管理程序108;以及包含类代码110与对象数据的对象模型,所有这些都将在下面更详细地讨论。
各编辑终端15包括个人计算机,并可通过调制解调器连接到在用户的房屋中的带有对应的电话机14的普通电话插座上。
因此各编辑终端15包括处理器、屏幕输出装置、包含图形用户环境(诸如Windows(TM))的输入装置(诸如键盘(或诸如鼠标器等光标控制装置)及存储装置ROM、RAM以及硬盘)、通信程序以及对象浏览器程序。
参见图4,编译程序装置包括连接在WAN服务器11上的通信接口电路板300;处理器302;以及包含快速存取存储器(RAM)与大容量存储器(如硬盘驱动器)并存储有操作系统(如UNIX(TM))、本地的C++编译程序312(诸如可从Sun Microsystems购得的SunPRO)的存储装置304(未分开指出);下面要详细描述的预编译程序316;以及存储要加入到新程序中的标准功能与定义(指定子程序或子例程)的库314。
和传统上一样,C++编译程序包括编译成可重定位二进制代码的编译程序及连接二进制代码与存储在库314中的二进制代码例程并将连接的代码定位在存储器空间中供执行的连接程序312b。这种编译程序通常还包含预处理程序,它解释编译程序命令,诸如读入附加代码的“include”(包含)语句或在编译期间执行其它操作。
还提供有用于存储输入的定义C++程序的源码(诸如通过输入装置320输入的、或通过通信线路300下载的、或通过包含在存储装置304内的盘驱动器加载的)的存储区308;以及用于存储C++计算机312(即在编译程序控制下工作的处理器302)生成的可执行代码的存储区310。还包括存储区318,它存储下述系统数据分布式处理器10的数目;各处理器10上可利用的存储器容量;处理器10的操作速度,等。
将处理器302配置成有选择地或者在源存储器308中的源码上运行C++编译程序312,或者在源存储器308中的源码上运行预编译程序316随后运行C++编译程序312,以便在可执行代码存储器310中生成可执行代码。
在前一情况中,将在任何适当的单一处理器上执行所生成的代码。在本实施例中,处理器302本身配置成能直接执行C++编译程序以这一方式生成的代码,使用户能立即测试程序是否如预期的那样操作。
在后一情况中,预编译程序316首先处理源存储器308中的源码(计入关于包括要在其上执行该代码的主机10的分布式系统的任何系统数据),并在源存储器308中生成修正后的源码,然后由编译程序312编译以在可执行代码存储器310中生成可执行代码。然而,这一可执行代码不一定能在编译程序装置30上执行,因为它是用于在多台分布式主机10上执行的。
参见图5,在监控程序307控制下的编辑程序30的一般操作如下。
在步骤202中,将源码输入到源码存储器308中(诸如通过输入装置320)。在步骤204中,人类操作员可决定在源存储器308中编辑源码,其中将编辑的文本输入到源码存储器308中(诸如采用传统的文本处理程序)。
一旦完成了任何这种编辑,在步骤206中,用户可选择是否要就地测试源码。在他要这样做时,在步骤208中,处理器在源码存储器308中的源码上执行C++编译程序312,以在可执行代码存储器310中生成可执行代码,并在步骤210中,处理器302执行可执行代码。可提供模拟程序来截止无意义的操作并代之以诸如在输出屏幕322上显示等操作,使用户知道发生了什么。
在执行中出现错误的事件中,在步骤212中用户可决定返回到步骤204中去编译源码存储器308中的源码。如果源码呈现为满意的,则在步骤214中,将预编译程序316作用在源码存储器308中的源码上以生成修正的代码,然后在步骤216中用C++编译程序编译它以在可执行代码存储器310中生成可执行代码。然后在步骤218中通过WAN服务器11将其传输到分布式主计算机10。图6中用图形示出这些。
下面简要地描述智能域中所采用的数据模型。下文中,各“对象”为包括若干数据字段的数据记录,它只能由对应于该对象的代码访问(以一对多的关联,在与一类对象相关的相同代码实际上访问该类中所有对象的意义上)。
和传统上一样,将对象组合成类,同一类的对象包含不同的数据但格式相同。各对象还与一个或多个子例程(一般性地称作“方法”或“功能”)关联,它们在数据上操作,并且通常构成这样做的唯一手段。
与同一类中不同对象关联的子例程以相同的格式接收及返回对应的数据(即同一类的所有对象具有公共的界面)。事实上在C++中,这些子例程只为同一类中的所有对象表示一次(即子例程的代码只存储一次)。因此该代码是与该类对象而不是与各对象关联的。
各类对象可以是更通用的类的子部分,如在传统的面向对象的编程中的。在这情况中,可相对于更通用的类(“超类”)存储代码。对象管理程序108包含构成各对象的数据的位置的表,并在每一次调用对象时,对象管理程序访问类代码存储区110中的子例程代码并将对象存储区112中的相关对象的数据的地址提供给该代码。
参见图7,在本实施例中,在智能域的主机10中提供的对象包括多个用户对象500(保持关于数千万用户中各个的数据的对象),它们是在增加新用户时建立的并在用户自愿离开或从网络上被截止时消毁;并在用户的需求改变时编辑;多个呼叫对象600a-600c,它们中各个是在对应的呼叫开始时建立并在呼叫结束之后消毁;以及多个通信装置对象700a-700c,它们各与一项用户终端设备相关,并在第一次将该用户终端设备连接到网络上时建立。
参见图7b,在本实施例中,传送域6的交换中心2a、2b…还包括在其上存储有分别表示交换中心内的交换机与交换机端口的对象800a-800b、900a-900f的主计算机。从而各交换机对象800包含任何时刻上对应的交换机的状态的记录;这些对象永久存在在存储器中并与存在在交换中心2中的物理装置具有一对一的映射,从而写入端口或交换机对象改变对应的端口或交换机的状态,而读取端口或交换机对象给出对应的物理装置的实际状态的精确反映。
作为示例,图8中示出用户对象中的数据结构。
对象500所维护的属性数据包括用户类型字段502(它可指示用户为雇员或一些其它不平常的身份,或者是正常的用户);用户ID字段504;主机字段506,指示在其上建立对象500的主机10(方便地以http/TCP/IP格式)。
还存储有提供给该用户的服务器的相关数据;例如,用户的正常电话号码(字段508);在每天的特定时间上将该用户的呼叫转接到其上的电话号码(字段510);以及要转接呼叫的一天中的时间(字段512)。
最后,以存储各次呼叫的被叫(与/或主叫)电话号码、呼叫的日期与时间的呼叫登记字段514及呼叫的费用(字段514)的形式存储用户的记帐信息。
不同的个人需要访问这一信息的不同部分。例如,定义要提供给用户的服务的字段508-512可由用户服务人员或由用户本人通过最终用户终端15编辑,而记帐数据(字段514)只能由经营网络的记帐与会计人员写入。当然,任何用户都不能从最终用户终端15改写其记帐记录。
操作中,传送域中发生的事件(诸如监视最终用户域中的“摘机”条件)调用与智能域中的一个对象关联的代码的操作。例如,在最终用户域中电话摘机时,便调用代码来建立新的“呼叫”对象600。当检测到被叫号码时,便通过信号链路12将其传输给智能域8;激活主叫方的用户对象500来修正其记帐记录字段;以及访问被叫方的用户对象500来确定应转接该呼叫的号码,然后将这一信息传输给传送域中的交换机对象800来建立将在其上携带该呼叫的路径。
在呼叫的通话期间,智能域的作用通常是有限的。在检测到挂机而清除呼叫时,与用户对象500关联的记帐功能代码更新记帐数据字段,并由对象管理程序108删除呼叫对象。
参见图9,本实施例中的预编译程序316包括分析程序316a,它检验源码存储器308中的接连的C++语句并参照C++语法图316a来确定各语句中哪些元素为函数、变量等;在分析程序316a检测到预定的语法条件时,代码编写程序316c便建立对应的附加源码,并将其增加到源码存储器308中的源码中。
参见图10,预编译程序的一般操作如下。在步骤1002中,预编译程序316建立包括新类的附加数据结构(“类型模型”),新类中包含分别表示出现在源码存储器308的源码中的对象的所有类的一组对象。
对于遇到的各类,便建立一个新对象,它包含记录保持在该类中的数据及由该类执行的功能的数据项。将这一信息与代码一起编译,从而在运行时,各主处理器10便有了决定在哪一处理器上打开任何给定类的新对象所必需的信息,这一点下面要更详细地讨论。
从而,步骤1002之后,将描述这一类型模型309a的源码写入源码存储器308中。
在步骤1004中,预编译程序316读取源码存储器308中的源码,并加上从其它主机10接收报文的调用程序功能,并在收到时调用对应的本机功能。
从而,在每一次检测到源码存储器308中的源码中的功能(“目标功能”)时,预编译程序316便在调用程序功能中插入一条语句,该语句在收到来自另一处理器的旨在调用该目标功能的报文时便调用该目标功能。还加上作为报文对应地将来自目标功能的值返回的代码。
从而,执行了步骤1004之后,源码存储器308中的源码中包含用于将从另一处理器接收的报文转换成本机过程调用的调用程序代码309b。
当受到预编译程序316编译时,源码存储器308中的源码中所使用的任何指针定位单一的普通存储空间内的地址,因为编译程序312预期单一处理器而不是分布式计算环境。然而,在分布式计算环境中,可将许多对象物理地定位在不同处理器上并从而不能通过单一存储器空间中的指针访问。
从而,在步骤1006中,预编译程序316扫描存储器308中的源码并用参照来替换指针的各检测到的出现,即使在不同的处理器上,该参照也能用来访问所涉及的对象的实际位置。从而,在执行步骤1006的操作之后,源码存储器308中的源码中还包含参照代码309c。
各情况中增加的代码中一方面包含特定的代码语句,而另一方面“#include”语句,这种语句导致编译程序316将存储在库314中的库例程包含进去。
类型模型建立参见图11至13,下面更详细地描述预编译程序316在步骤1002中执行的进程。
预编译程序316扫描存储在源码存储器308中的代码。在检测到类说明语句时(步骤1010),预编译程序316编写代码来建立(“说明”)新类的新对象,如图12中所示。图12中,语句“#include”“SysType Model.h””包含说明其它事物与新类Sysclass的附加代码,并且语句”SysClass class 1(“X”)”说明该类的新对象Class1,并存储该对象所表示的类的名字(“X”)。从而,在步骤1012中,将这后一语句写入源码存储器308中。
当在步骤1014中预编译程序316在类说明中遇到说明数据类型说明(如图12中的语句“int X1”)的语句时,它便写入(步骤1016)作为串数据存储变量的名与类型的静态数据说明。
当已扫描了该类中的所有数据说明时(步骤1018),预编译程序316在源码存储器308中的源码中扫描构造程序功能的出现(即在运行时导致建立所涉及的类的新对象的功能)。
在检测到构造程序功能的说明时(步骤1020),预编译程序318便将该构造程序功能的静态说明写入源码存储器308中(步骤1022)。
在扫描了类说明中的该或所有构造程序功能之后(步骤1024),预编译程序316检测(步骤1026)源码存储器308中的类说明中出现的功能说明(即子例程、程序或方法)并在每次检测到功能时写入(步骤1028)包含作为串数据的该功能的类型与正文的变量的静态说明。
一旦检测了该类中的所有功能(步骤1030),预编译程序316以相同的方式进行对源码存储器308中的源码中说明下一类(步骤1032)直到以这一方式扫描了整个源程序为止。此时如图13中所示,便在修正的源码中说明了在原始源码中各说明的类的新类SysClass中的对象(CL1、CL2、CL3、CL4…)。
调用程序建立参见图14与15,下面更详细地描述了预编译程序316在执行图10的步骤1004中的操作。
首先在步骤1040中,预编译程序316插入“#include”语句来导致编译程序312包含存储在库314中的执行报文接收与发送任务的代码。如下面更详细地讨论的,本上下文中的“报文”是从主处理器10的操作系统传递给其对象管理程序的,并可从其它主处理器10之一或在同主计算机10上的执行另一进程始发。
除了包含对包含形成报文转发的代码的库文件的参照外,预编译程序316还写入调用程序功能的说明,该功能包含用于旨在导致其执行的报文到达时执行对功能的调用及通过返回报文返回任何功能的返回值的若干特定过程。
在步骤1042中,在再一次扫描源码存储器308中的源码时,预编译程序316检测构造程序功能(“XX()”)的出现,并在调用程序功能的定义中插入(步骤1044)代码行,这些代码行将接收的报文与对应于调用程序功能的调用的正文比较,并在报文匹配(即构成试图执行对构造程序功能的调用)时,调用该构造程序功能。
同样,在步骤1046中检测到任何其它种类的功能时(例如图15的功能“getX1()”),在步骤1048中,预编译程序316便在调用程序功能中插入代码行,这些代码行将接收的报文与对应于对功能名的调用的正文比较,在报文匹配时便调用指名的功能,并(步骤1050)生成包含这样调用的功能的返回值的返回报文。
从而,如图15中所示,图14的进程的操作之后,扩展的源码中包含对配置成接收报文及在应答中传输报文的调用程序功能的参照;以及包含在该功能中的一系列子测试,它们检测对指名的本机功能的调用及执行这些调用,并(在适当时)返回一个值。
指针替换参见图16和17,下面更详细地描述预编译程序316在执行图10的步骤1006中的操作。
在步骤1052中,预编译程序316扫描源码存储器308中的原始源码以检测对其它指名的对象的指针说明的出现(如参见图17,“X*otherX”)。
在检测到对另一对象的这一指针时,预编译程序316插入(步骤1054)代码来导致建立新对象(在与包括该指针的对象的同一地址空间中,即“本机”对象)。参见图17,在本例中,该新对象名为“XRef”。
与新对象的构造程序一起,建立调用该对象时执行的代码。参见图17,代码中包含发送包含该指针及相关操作符的报文及返回在应答中接收的值的语句。
然后在步骤1056中,将原始源码中的原始指针说明“X*otherX”修正成“XRef otherX”,从而它能参照远程对象来替代本机对象。
参见图18,图18a示出通过编译图17的原始源码所产生的效果。主处理器10的存储器内的对象X1执行对该主处理器10的存储器内任何地方的对象X2的调用,后者返回一个应答值。
参见图18b,图16的进程的操作之后,将调用对象X1保存在第一处理器10a的存储器中并将对象X2保存在第二处理器10b的存储器中。从而在编译期间,在调用对象X1的同一存储器空间中建立第三对象X3,而否则会参照X2的指针参照现在参照X3。这种参照是由本机“代理”对象X3传递给包括第一处理器10a的对象管理程序108、操作系统106、处理器102及通信装置100的低级进程的,它是以供传输给第二处理器10b的报文的格式传递的,如下面将更详细地描述的。
第二主处理器10b的通信装置100、处理器102、操作系统106及对象管理程序108接收该报文,在其中(按照上面图14插入的代码)将该报文转换成对对象X2的本机功能调用,并将对象X2返回的值作为报文传输回主处理器10a。将这一返回报文传递回本机代理对象X3,从而到原始调用对象X1。
从而,在检测了源码存储器308中的原始源码中的全部本机指针之后(步骤1058),可理解已将所有本机指针(否则是由编译程序312生成的)转换成对本机代理对象的参照,而后者又生成及接收原来参照的远程对象的报文。
如图18b中所示,原来的参照对象可以物理地位于不同的主处理器上,或者可以位于原来的主处理器10上;采用报文传递通信而不用本机指针(如C++代码通常会生成的)保证不论其位置都能到达对象。
运行时期操作在上文中描述了预编译期间本发明的操作。下面描述在运行时期本实施例的操作。
在各主处理器10中,对象管理程序108(“daemon”),如将要更详细地描述的,包括用于建立新对象的进程;用于确定存储给定的对象的位置(即主计算机10)的进程;用于发送报文远程主计算机的进程;以及用于从远程主计算机接收报文的进程。
参见图19,各主计算机10的对象管理程序108包括用名字存储当前存在的对象的清单1510的对象位置表1500,与各对象的记录1510a-1510z关联的有项目1520a-1520z,其中存储该对象当前存储在其上的主计算机10;及项目1530a-1530z,其中存储初始建立该对象的主计算机的标识。
参见图20,存储在对象管理程序108中的还有包括各主计算机的状态数据的主机表1600,从中导出最适合于在上面建立新对象的主计算机,因此,这一表中包括第一组项目1610a-1610z,存储各主计算机的标识;相关联的第二组项目1620a-1620z,存储在该主计算机上可获得的自由存储容量;第三相关组项目1630a-1630z,存储各主计算机10的可连接性数据(例如它所连接的其它计算机的数目),以及可选用的诸如关于处理速度等其它项目。
参见图21a,各主计算机10的对象管理程序108定期查询其操作系统106以判定是否已在为该处理器存储在表1600中的任何数据中已有任何改变(如现在可获得的存储器比以前少)(步骤2002),并且在检测到任何信息项的重大改变时,在步骤2004中对象管理程序108通过通信装置100将广播报文传输给列出在表600中的所有其它主计算机10,发信号通知有关的新信息。
参见图21b,当任何主计算机10在步骤2006中接收这一报文时,其对象管理程序108更新图20的状态表1600来反映这一新信息(步骤2008)。
从而,在任何时间上,各主计算机10的对象管理程序108在图20的表16中维护所有其它主计算机以及其本身的最新状态信息。
参见图22,下面描述承担构造新对象的进程。在步骤2010中,当在源码中遇到调用对象构造程序功能的指令(步骤2010)而不是在发出建立对象的调用的主处理器的地址空间中建立该对象时,本实施例的对象管理程序108便在步骤2012中读取主处理器状态表1600及存储在对象中的数据(上面关于图11至13中所描述的进程所建立的),这一数据描述要建立的对象将成为其成员的类。
从而,对象管理程序108知道了现在要建立的对象的要求(即它需要大量或小量的存储器及它是否需要对或从许多通信点访问)并具有关于各主计算机的可获得的能力的数据。
在步骤2014中,对象管理程序108选择要在其上建立对象的主计算机10。这一决定可以只根据哪一主计算机具有最多可利用的剩余存储器,或根据哪一主计算机具有对调用该新对象的访问点最佳的连接性,但最好是考虑进去以下各点的加权函数各处理器上可获得的存储器;各处理器的连接性;以及当前处理器(即发现建立对象的调用的处理器)的优先权。
在步骤2016中,对象管理程序108传输报文给选中的主计算机10,报文中包括该主计算机的地址以及调用要建立的对象所属的类的构造程序功能的命令、连同要建立的对象的名字。
在目标主计算机10上,在步骤2018中接收报文并在步骤2020中将其传递给调用程序功能(上面参照图14与15描述的在编译时期建立的)。然后调用程序功能导致在目标主计算机上建立该新对象。同时,建立新对象的目标主计算机10更新其对象表1500包含进去该新对象。
最后,在步骤2022中,目标主计算机向所有其它主计算机10广播新对象的标识及其位置,在步骤2024中在始发主计算机(以及其它计算机)上收到该报文并用它来更新其对象表1500。从而,按照本实施例,对象是在运行时期在选择的计算机10上建立的,以便将对象的分布平衡到最合适的主计算机上,这是在周期性地更新各主计算机的状态信息的基础上做到的。
参见图23,对象必须永久地驻留在给定的主机上,但可以从一台主机移动到另一台主机(即从一台主机的存储器中删除及包含到另一台的存储器中)。
在步骤2030中,各主计算机10的对象管理程序108观察其状态表1500。在步骤2032中,对象管理程序108确定是否要将一个对象从该对象管理程序108所在的主计算机10上的移走;例如,如果该主计算机10用完了可利用的存储器。如果是,便选择要移走的适当对象(例如,很少访问的对象)。
在步骤2034中,观察对象表1500,从对象的对应字段1530中的项目中确定对象当前是否位于建立它的主机上。如果是(即如果对象从建立起未移动过),则在步骤2036中选择一台新主机(与上面对于建立新对象所描述的完全相同的方式)并在步骤2038中移动该对象。
步骤2038包括两部分首先传输报文给新主机指令在该主机上建立对象及指定存储在对象中的数据的值;第二,从当前主计算机10上储器中删除该对象。
如果在步骤2034中确定该对象当前不在建立时所在的主计算机10上(即对象从建立时起已移动过),则在步骤2040中对象管理程序将带有这一新主机位置的报文发送给原先在其上建立该对象的原妈主计算机10(从该对象的项目1530及表1500中确定的),并在接收到来自该原始主计算机的确认(步骤2042)之后,如上面所描述的进行(步骤2036)。
参见图24,下面更详细地描述对象位置表1500的使用。
当要将报言语发送给对象时,对象管理程序108首先在对象位置表1500中确定记录为该对象所在的当前主处理器10,并在步骤2050中发送调用该对象的给该当前主机。
在大多数情况中,报文会到达正确的主机,但由于通信中的干扰或某些其它原因而有可能对象表1500不是完全最新的,从而被调用的对象不在(或不再在)指示的主计算机上。
参见图24b,当报文寻址的主计算机10在步骤2052中收到文时,它便在2054中判定该对象是否记录为存在在其自己的对象位置表1500中,如果存在,便在步骤2056中调用该对象,而在步骤2058中传输回任何返回文,如上所述。
如果否,则在步骤2060中,主计算机发信号回去通知调用对象失败。
始发主计算机在步骤2062中收到这一报文时,便在步骤2066中发送查询报文给在表1500中记录为在其上原始构造出问题的对象的原始主计算机10。由于图23的独立位置信号步骤2040、2042,在其上构造该对象的原始主机上的对象位置表1500对于该对象而言应当是完全最新的。
参见图24c,当原始主计算机在步骤2068中接收位置查询信号时,其对象管理程序108在步骤2070中参看包含在其中的对象位置表,并在步骤2072中发信号通知所关心的对象的确定的位置。第一主计算机接收来自原始主机的位置信号,并在图24a的步骤2074中确定主计算机这样指示的对象位置是否与在步骤2050已向其发送报文的对象的位置不同。如果是,对象管理程序108在步骤2076中更新位置表1500,并返回到步骤2050去将报文重复传输给为该对象指定的新主计算机10的位置。
如果接收的地址与前面发送报文的地址相同,在步骤2078中对象管理程序108返回指示不能到达该对象的报文给从其始发试图调用该对象的对象、进程或用户。
从而可以看出在本实施例中,各主计算机10都带有在其中记录了系统中所有对象的位置的对象位置表,因此各主机能自主地操作来调用不同主计算机上的其它对象,无须参照中心数据库。然而,通过提供各主计算机10附加跟踪原始建立在该主计算机上的所有对象的位置,即使这些对象的位置随后移动到了不同的主计算机,也能增加高级的完整性。
此外,显而易见,各主计算机10维护位于其本身的存储区内的对象的精确记录。
其它实施例与改型当然,有可能为各主计算机本机内存储的对象及为原始建立在该主计算机上的对象,以及存储在其它主计算机上的对象,提供独立的表。然而,提供存储所有对象位置的单一的表能保证更大的灵活性,因为所有主处理器10的所有对象位置表1500基本上是相同的,便有可能在扩展分布式计算系统以包含新的主处理器系统时,将对象位置表从任何一台主处理拷贝到新主处理器上即可。
从上文中显而易见,许多改型与替换都是可能的。例如,为了以上理由,将本发明作为与传统的C++编译程序协作的预编译程序提供是方便的,但一样可能将本发明集成进非传统的编译程序中(实际上可以认为预编译程序分编译程序的组合正好包含这样做)。
自然,本发明不仅可用于C++并且也可用于要在分布式环境中提供的诸如Smalltalk(TM)等其它面向对象的语言。更广义地,有可能将等效的技术用在非面向对象的语言及非分布式系统上。虽然已将本发明描述为将编译程序装置包含在电信系统中,应理解在实践中该编译程序装置可以在不同的司法管辖区内并通过国际电信网连接到主计算机上,从而,对于与它一起使用的电信网组合的及分离的编译程序装置两者都要求保护。
自然,电信网以外的应用也是可能的,诸如共亨的分布式计算。
对于熟悉本技术的人员,许多其它的替换与改型都是显而易见的。从而,本发明旨在包罗这里所公开的任何与所有主题,不论所附的权利要求是否覆盖。
与本发明名称相同的同一日期提交的我们的另一英国专利申请9600854.5可用于本发明,并通过引用完整地将其结合在此。具体地,从其中导出的功能信息可以存储在这里描述的类型模型中。
权利要求
1.一种分布式计算系统,包括多台主计算机(10),各主计算机包括存储预定的数据记录(112)及用于访问所述数据记录(112)的程序(110)的存储空间(104),其特征在于在各主计算机(10)上提供有在所有主计算机(10)上的所有数据记录(112)的位置的表(1500)。
2.按照权利要求1的系统,其中可将数据记录(112)从第一主计算机(10a)移动到第二主计算机(10b)。
3.根据权利要求2的系统,其中,在这一移动上,将记录在其上的重新定位的主计算机的位置发信号通知各其它主计算机(10)。
4.按照权利要求2的系统,其中各所述位置表(1500)还存储在其上建立数据记录的主计算机(10)的位置。
5.按照权利要求4的系统,其中,为了访问数据记录,将各所述计算机配置成读取它所存储的位置表(1500),然后在必要时访问在其上建立数据记录(112)的主计算机(10)的位置表(1500)。
6.按照权利要求1至5中任何一项的系统,其中所述数据记录(112)包括各只能通过相关代码(110)访问的对象。
7.按照权利要求6的系统,其中所述对象包括同一类的多个对象(112),以及其中所述类的多个对象共用所述相关代码(110)。
8.一种电信系统,包括由多台互连的计算机(10)及用于为所述计算机(10)编译程序的编译装置(30)构成的分布式控制系统,装置(30)包括配置成编译供在单一主计算机(10)上执行的源程序的编译程序(312);以及配置成接收适合于单一计算机执行的原始源程序及修正所述原始源程序以增加中的源码(309)借此生成修正的源程序的预编译程序(316);该修正的源程序在经所述编译程序(312)编译后,将在所述分布式控制系统中执行。
9.按照权利要求8的系统,其中所述编译装置(30)配置成生成所述编译后的程序的多份拷贝,各拷贝在所述互连的计算机(10)之一上执行。
10.一种供与分布式控制系统一起使用的编译程序装置(30),该分布式控制系统包括多个互连的计算机(10),所述编译程序装置配置成接受适合于在单一计算机(10)上编译的、源语言的原始源程序,其特征在于分布式控制系统是松耦合的;及在于所述编译程序装置配置成接受所述原始源代码程序并在所述原始源程序中定位可从所述源程序中其它点上调用的功能,并使所述原始源程序适应于允许从其它计算机(10)远程调用所述功能。
11.一种供与包含多台互连的计算机(10)的分布式控制系统一起使用的编译程序装置(30),所述编译程序装置配置成接受适合于在单一计算机(10)上编译的、源语言的原始源程序,其特征在于,分布式控制系统是松耦合的;及在于该编译程序装置(30)包括编译程序(312)及配置成在所述原始源程序中定位指针,这些指针将由所述编译程序(312)作为对单一计算机存储空间中的区域的指针编译,以及修正所述原始源程序以便能参照其它所述计算机(10)的存储器空间中的对象。
12.一种供与包含多台互连的计算机(10)的分布式控制系统一起使用的编译程序装置(30),所述编译程序装置配置成接受适合于在单一计算机(10)上编译的源语言的原始源程序,其特征在于该分布式控制系统是松耦合的;及在于所述编译程序装置(30)配置成读取所述始源程序并在其上加上一组描述包括在所述原始源程序中的数据与程序结构的数据记录。
13.按照权利要求8至12中任何一项的装置或系统,其中所述原始源程序是面向对象的语言的。
14.按照权利要求13的装置或系统,其中所述语言为C++或其变型。
全文摘要
一种用于与传统的面向对象的编译程序(312)一起操作的预编译程序(316),修改原始源码以增加使源码适应于松耦合的多处理器操作的新语句。
文档编号G06F15/16GK1208482SQ9719172
公开日1999年2月17日 申请日期1997年1月15日 优先权日1996年1月16日
发明者保罗·安冬尼·马丁 申请人:英国电讯有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1