分布式处理的制作方法

文档序号:6412907阅读:146来源:国知局
专利名称:分布式处理的制作方法
技术领域
本发明涉及分布式处理,特别是但不仅仅是涉及用于远程通信网络控制的分布式处理。更具体地,本发明涉及在分布式处理器上实现的控制系统的开发与升级,其最好(但不是必要的)面向对象方式的过程。
远程通信网络日益需要支持高带宽、低延迟信息流。所需带宽迅速从Kbit/秒增至Mbit/秒,对某些应用来说甚至需要Gbit/秒(具体例如点播视频、动态共享仿真和分布式计算)。
为提供“智能网络”功能,如呼叫重定向到特定号码,计算机程序要运行在与交换中心连接的很多(例如至多100台)主计算机上。为特定用户提供服务的路径(例如某个客户的呼叫被寻路由的号码)依赖于存储于与用户有关的主计算机中的数据。这样在几十到几百台主计算机中就有数百万的用户记录。
在“Twenty-twenty vision-software architectures for intelligence in the21st century”,P.A.Martin,BT Technology Journal,Vol 13 No.2,April 1995中,本发明者已经提出了用面向对象技术来实现需要的分布式处理。面向对象技术的描述可在BT Technology Journal,Vol 11,No.3,July,1993,“Object oriented technology”中找到,它由E.L.Cusack和E.S.Cordingley编写。尽管这个术语未总被准确使用,在此面向对象的计算指的是这样的计算技术,在其中数据被以“封装”的形式存储,在该形式中,数据不能被呼叫程序或例程直接访问,仅能被一个相关的程序访问,该程序能读、写和编辑该数据。数据的记录和其相关程序被称为一个“对象”。来自于和发送到一个对象的通信主要由“消息传递”来实现,即对这个对象的呼叫传递数据值并激活包含在此对象当中的某个程序的操作,然后返回数据值。
对于希望利用面向对象方法的各种编程者来说很多语言都可以使用,目前最常用的是C++。
分布式处理在几个方面上与单处理器操作不同。首先,根据其它程序或数据与调用程序是位于同一台主计算机上还是位于不同的主计算机上,可能需要不同的访问技术。程序或数据的位置也将影响其从其他程序到达的速度。同时,一台或多台主计算机可能失效,而此时其他计算机还在运行中。
分布式计算通常以“客户-服务器”的方式执行,其中某台计算机上“客户”程序请求位于另一台计算机上的“服务器”程序,此后服务器程序执行此功能或将客户程序请求的数据返回。
面向对象技术尚未广泛应用到分布式处理中。这方面最新现状的概要情况在“Object oriented programming systems”Blair G.,PitmanPublishing,London,1991(ISBN 0-273-03132-5)尤其是从223-243页的第9章中和“Distributed systems and objects”,David Hutchison and JonathanWalpole中也可找到。先前的努力主要是为一种已存在的计算机语言添加新的语法,或生成一种新的计算机语言将常规的面向对象的程序设计扩展以处理分布式处理。
一方面,本发明提供一个编译器(或预编译器)来产生在控制远程通信系统的多台主计算机中进行分布式处理的代码,其中编译器被安排接收用计算语言编写的源程序,此程序的第一条语句与其他编译器相兼容,编译器或预编译器被安排对第二条语句进行操作,这条语句包含上述系统的性能准则且被上述其他编译器忽略,以使程序适合于多处理器操作。最好第二条语句在注释域中。
方便起见,本发明的这个方面包含一个可被很多常规编译器所用的预编译器,但认为本发明的这个功能可被直接合并到一个重新书写的编译器中。
这样,根据本发明的这个方面,在被本发明的编译器编译并在多处理器系统上运行之前,源代码可以被程序员利用常规的编译器进行编译和测试以便在单处理器上执行,专门说明多处理器环境的第二条语句被单机编译器忽略。这使得程序员在无需进行实时测试的情况下可以确认程序的基本操作。
另一方面,本发明提供了一个用于分布式对象系统的编译器,其中系统操作准则的功能需求可被输入,并在编译过程中被解释以确保功能或需求得到满足。
例如,系统操作准则可以是响应时间、对象个数或数据的完整性。
最好在本方面中,功能需求可被存放到每个对象和/或对象类中。
方便起见,功能需求被上述第一方面中提及的第二条语句说明。
其他方面和本发明的实施例在以后被描述和声明。
参考附图,本发明的实施例仅通过示例的方式来描述

图1是描述实施本发明的远程通信系统各元素的框图;图2是描述图1系统中另外实施例的框图;图3是描述组成图1和图2系统的一部分的主计算机的各元素的框图;图4是描述组成图1和图2系统的一部分的编译器装置的各元素的框图;图5是描述图4的编译装置操作的流程图;图6是图5执行的各个处理阶段的示意图;图7a是描述图1中智能域部分所有的数据结构图;图7b是描述图1中传输域部分所有的数据结构图;图8描述了图7a中一个组成成分的存储器中的数据结构;
图9描述了适合于图4中的编译装置的源代码;图10是一个描述组成图10到14的预编译过程的一部分的流程图;图11是该过程的其他部分;图12是该过程的其他部分;图13是该过程的其他部分;图14是该过程的其他部分。
参考图1,根据本发明组建的远程通信系统包括多个由通信频道4(如微波连接、光缆、同轴电缆或基于上述任何介质之上实现的虚电路)互连的交换中心或交换机2a、2b,它们构成了传输域6。连接到传输域6的智能域8包括多台主计算机10a、10b,它们通过信号链路12a、12b以及互连主计算机10a、10b的12c与交换中心2a、2b进行信号通信。例如,二者可以通过协议如信号系统7(SS7)被互连。
最终用户的终端装置或设备如电话14a、14b和宽带通信设备如视频播放机16联合组成了最终用户域18,它通过局域环连接20a、20b、20c(例如光纤、蜂窝式无线电或双绞铜电缆线)连接到传输域6上。
另外被提供的是一个服务提供者域22,它包括提供服务(例如视频服务)的设备,如视频播放机24和计算机终端26,通过局域环连接28a、28b、28c(如ISDN通道或其他一些高带宽链路)连接到传输域6上。
如众所周知的模式,通过传输域6,最终用户的终端装置14或16被用来向服务提供者域22传送请求。结果是一条通道通过传输域6被建立起来且服务提供者域22通过这条通道向终端用户域18传送服务(例如传送实时电影资料、或电子版的数据文件)。
在常规的普通电话服务中,传输域6只是简单地被最终用户域产生的拨号所控制来建立传输通路。然而,当前传输域中的“智能网络”控制由智能域8提供。智能域8从传输域6中接收已拨号码和/或正在拨的号码,并执行与这些号码相符合的呼叫处理。智能域最典型的是提供号码翻译服务,即已拨号码被翻译以向另一个号码提供前向呼叫服务。在这种情况下,已拨号码与主计算机10中的某一台中存储的一条记录相对应,作为线路12中某一条上信号的响应它被访问,以产生相应的重定向号码。
一般来说,作为传输域6中某一事件的响应(如来自于最终用户域18的呼叫初始化),智能域提供控制信息来控制传输域6。
其他数据也被存放到智能域中。在本实施例中,每次呼叫的记帐数据被存放到智能域中,以对每个用户进行周期性地记帐。
参考图2,智能域8进一步包含一个编译装置30,它由一台编程的工作站组成,通过网络服务器11a-11c和广域网(WAN)连接到主计算机10上,WAN在编译装置30、主计算机10和服务器11间运行。
服务器也可以连接到Internet32中的一个或多个广域网(WWW)服务器上,从而编辑连接到Internet上(例如通过局域包交换节点)的终端15a-15d。
参考图3,每一主计算机10包括一个框架或包含通信硬件100的服务器,通过广域网连接到服务器11上;处理器102;存储器104,它包括随机访问存储器式的快速访问存储器和磁或光盘驱动式的脱机存储器。
存储于存储装置104中的是一个操作系统106(例如UNIX(TM));一个对象管理程序108;和一个由类代码110和对象数据组成的对象模型,所有这些都将在下面被详细讨论。
每个编辑终端15包括一台个人计算机,并可能利用用户家中的相应电话14通过调制解调器连接到公共电话插座上。
每个编辑终端15因此包括一个处理器、一台屏幕输出设备、一个输入设备(例如键盘和(或光标控制设备如鼠标)存储装置ROM、RAM和硬盘),该输入设备包含一图形用户环境(例如Windows(TM))、一个通信程序和一个对象浏览程序。
参考图4,编译装置包括连接到WAN服务器11上的通信接口电路板300;处理器302;和存储装置304(没有单独标出),此存储装置304中含有快速访问存储器(RAM)和高容量存储器(例如硬盘驱动器),存放着操作系统(如UNIX(TM))、C++编译程序312(如来自Sun微系统公司的SunPRO)、一个下面将要详细描述的预编译器316、和存放可合并到新程序中的标准函数和定义(描述子程序和子例程)的库314。
如常规那样,C++编译器包含一个编译可重新定位二进制代码的编译器和一个连接程序312b,此连接程序可将二进制代码与存储在库314中的二进制代码例程相连接并将连接好的代码在内存地址空间定位以便运行。这些编译器一般包含一个可以解释如“include”语句的编译指令以在编译过程中读人附加的代码或执行其他的操作的编译器。
提供的还有存储定义C++程序输入代码的存储区308(例如通过输入设备320输入,或通过通信电路300下载,或通过存储装置204中包含的磁盘驱动器装载);和存储由C++编译器312产生的可执行代码的存储区310(例如在编译程序的控制下由处理器302完成)。还包括存储区318,它存放与分布式处理器10数目有关的系统数据、处理器10中每一个可用存储器的容量、处理器10的操作速度等等。
处理器102被安排有选择地运行C++编译器312来编译存放在源存储器308中的源代码,或在C++编译器312处理完源存储器308中的源代码后运行预编译器316,以在可执行代码存储器310中产生可执行代码。
在第一种情况下,产生的代码将在任意合适的单处理器上运行。在本实施例中,处理器302本身被安排执行直接由C++编译器以此方式产生的代码,以使用户可以立即测试是否程序按预想的方式执行。
在后一种情况下,预编译器316首先处理存放在源存储器308中的源代码(考虑到与组成运行代码的主机10的分布式系统有关的任何系统数据),并在源存储器308中产生增补的源代码,以使编译器312在可执行代码区310中编译产生可执行代码。然而,这个可执行代码并不需要在编译装置30上是可运行的,因为它是在多分布式主机10上运行的。
参考图5,在监控程序307的控制下编译器30的一般操作如下在202步,源代码被输入到源代码存储器308中(如通过输入设备320)。在204步中,操作员可以决定编辑源存储器308中的源代码,其中,被编辑的文本被输入到源存储器308中(例如使用常规的文本处理程序)。
一旦任一上述的编辑完成,在206步中,用户可以选择是否对源代码进行局部测试。如果用户进行局部测试,在第208步,处理器运行C++编译器312以将存放在源存储器308中的源代码编译成可执行代码并存放到可执行代码存储器310中,且在210步中,处理器302执行此可执行代码。一个仿真程序可以被提供来监听无意义的操作并替代诸如显示到输出屏幕322上的操作,以使用户可以了解到底发生了什么。
如果在执行过程中发生错误,在第212步,用户可以决定返回到第204步来编辑源代码存储器308中的源代码。如果此源代码满足要求,则在第214步中,预编译器316被应用到源代码存储器308中的源代码上以产生增补代码,后者进一步在第216步中被C++编译器编译以将可执行代码产生到可执行代码存储器310中。接下来在218步中通过WAN服务器它被传送到分布式的主计算机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;一个指示对象500被生成的主机10的主机域506(方便起见以http/TCP/IP的格式表示)。
另外还存放的是与提供给客户服务相关的数据,例如,客户的通常电话号码(域508);在一天特定时间内客户的呼叫被转向的电话号码(域510);和呼叫被转向的时间(域512)。
最后,对客户的记帐信息以呼叫域514的存储格式被存储,对于每一次呼叫存储被叫(和/或呼叫)电话号码、呼叫的日期和时间、和本次呼叫的花费(域514)。
此信息的不同部分需要被不同的人所访问。例如,定义提供给客户的服务的域508-512可以被客户服务人员或由客户自己通过一个用户终端15所编辑,而记帐数据(域514)应当只能由操作网络的记帐和会计人员所写。当然,客户不应该通过用户终端15对他的记帐记录进行重写。
在操作时,传输域中发生的事件(如在终端用户域中监视用户的“摘机”状态)产生智能域中与此对象相关联的代码的操作。例如,当用户终端域中电话摘机时,生成一个新“呼叫”对象600的代码被产生。当被呼叫的号码被检测到时,它通过信号链路12被传输到智能域8中;呼叫一方的客户对象500被激活来增补记帐记录域;且被呼叫一方的客户对象500被访问以决定此呼叫应被转发的号码,接下来信息被传送到传输域中的交换机对象800来建立一条通路,以在此通路之上运载呼叫。
在呼叫传送过程中,智能域的作用通常是有限的。当检测到挂机事件而清除呼叫时,与客户对象500相关联的记帐功能代码对记帐数据域进行更新,同时呼叫对象被对象管理器108删除。
图9描述了声明与图8中数据相对应的类类型(客户)的C++源代码100。它包含部分1000a和部分1000b,部分1000a包括C++编译器312所作用的语句,部分1000b包括C++编译器312忽略的注释语句。
然而,根据本实施例,注释语句部分1000b由预编译器316所作用。每一注释语句1002b-1012b由符号“//”开头,以使编译器312忽略其后的内容。
注释域中的内容完全是作为编程者的文档因而完全被C++编译器312所忽略。在本实施例中,预编译器316被安排来解释这些注释语句。
在本实施例中,注释域中的内容包含与构成分布式系统对象有关的功能(或性能)说明数据。特别是,这些说明数据包括下列说明性数据(a)给定类中所期望的对象数目(或是内存空间的全部相应容量),(b)利用度,即对象在访问时可用的访问时刻百分比,(c)可访问性,即对象(或是它可能被调用的特定数据)可被访问的不同访问点的数目(如需要访问此对象的终端或主机的数目),(d)安全性,不同用户对不同数据的访问权限(即是否他们真正可以访问,如果可以,是可读、可写或两者皆可),(e)并发性,即可能同时激活一个给定对象或进程的其他进程数目,(f)时间性,即一个进程必须被完成的最大、平均和/或最小时间,对于不同的应用,这些功能规范的典型值如下一些可能的应用及它们的功能尺度大小可用性访问并发性完整性时间性(mb)(%) (点)(应用)(Y/N) (Min/Ave/Max)智能电话网络100099.999100M10000 Y 0/1/100远程表示 10 90102 N 0/0/0共享虚拟现实 100 90100 10N 0/1/2企业计算100000 99.99 10M 1000Y 0/1/10
返回图9,语句1002a定义了一个叫做“客户”的对象类,语句1002b说明了此类的对象必需在99.99%的时间内可用。
语句1004a定义了一个叫做“name”的32字节的阵列,语句1004b说明客户支持服务(CSS)进程必须对此内容有读和写的访问权限,而其他进程必须仅有读权限(以使仅客户支持服务人员可以更改存放在与单一客户有关的类客户对象中的用户名)。
语句1008a定义了一个功能“客户”,语句1008b说明了客户支持服务有访问权。语句1006b说明了功能“客户”的最小、平均和最大操作时间(以毫秒为单位)。
语句1010a声明了一个void型函数(即无返回值)printBill,它打印客户对象的金额,语句1010b说明了相应最小、平均和最大响应时间。
最后语句1012a声明了一个void型函数callDelivered,当一个呼叫必须被处理时它被激活,语句1012b说明了此函数的最小、平均和最大响应时间。
因此就象所表示的那样,图9中的代码包括可执行的C++语句1000a和注释语句1000b,且它可被当作C++程序进行编译并正常运行,编译器312并不关注由注释语句1000b所定义的功能说明。
另一方面,当由预编译器316处理时,功能规范1000b会对生成新的可编译C++代码和对编译器生成指令产生影响,下面将详细描述。对象的尺寸/数目每个对象类可以与一条尺寸语句相关联,以指明所期望的那个类的对象数目或所需的存储空间的相应容量。一般来说,本发明的更优实施例被安排来解释与所期望的对象数目相关的语句(因为对于编程者来说这更自然),并通过将这个声明的对象数目和这个类所声明的数据类型的尺度之和相乘来把它转换成所期望的存储容量。
参考图10,预编译器在2002步被安排来读取与类相关联的任何尺寸语句并将每一个转换成内存空间尺寸(以M字节为单位),还形成所有这样内存尺寸的和。
如果这样计算的对象模型的整个尺寸足够小以适合单个1M字节UNIX进程的要求,预编译器则向编译器写一条指令来将此代码编译成一个单一进程(2006步)。这简化了可能使用的寻址,编译器可以允许对象通过引用传送数据,因为所有的对象都在同一地址空间中。
否则在2008步中,预编译器316向编译器写一条指令来将此代码编译到多个UNIX进程中。在2010步,预编译器316可以选择代码被编译到的目标主机的最小数目。
选择步骤2004和2010根据存放在系统数据存储器318中的数据被执行,这些数据指明每一台主机10中有多少内存空间可用。
在其他实施例中,这样计算的对象模型的尺寸也可以被用来以另外方法控制寻址;例如,对象模型的尺寸可以用来指示编译器选择使用内存寻址(所有对象都可在同一内存空间中被定位)、文件寻址(对于数目巨大的对象)或对象UID;或使用虚拟内存指针。利用度一种确保特定对象具有高利用度的特定方法是生成一个对象的多个拷贝(当然在可能情况下需要更新所有拷贝中的数据使其都是一样的)。一个给定对象的利用度粗略来说与此对象响应时所用的时间成反比例关系。这样,一个对象所期望的拷贝数目基本上与此对象的利用度和平均响应时间成比例。
相应地,参考图11,在3002步中,预编译器316被安排读取对象类所需的利用度,且在3004步中读取指示类对象的平均操作时间。
接下来,在3006步中,预编译器并行地选择已存在的对象拷贝数目并给出需要的可利用度,并在3008步中,预编译器扩充那个类的构造函数代码(实例化这个类的新对象)以使所需要的拷贝数在运行时中并发地被生成(在不同的主机10上)。
为了保证数据完整性,在3006步中选择的数目一般来说是1(在这种情况下预编译器在3008步中不写入附加代码),除非在需要高利用度的地方,根据类响应时间和所要求的利用度,象上面所述的那样2份或更多份拷贝被选择。
在其他实施例中,不是参考目标访问时间并相应地生成一个重复对象的期望数目,重复对象的一个预定数目可被选择(例如2)且对象的访问时间可被修改(在下面详细描述的事先确定的最小和最大值之间)以适应它。可访问性因为不同的主计算机10被连接到WAN 11、12的不同点上,一些特定的主计算机10与其他的计算机相比到特定终端15或主机10之间有较短的通信链路。这些数据被存放到系统数据存储器318中。因此将对象存放到那些将访问它们的终端的主计算机10上是有好处的。
参考图12,在4002步对于每一个数据声明,预编译器316读取将访问那个类的对象的终端15的标识(例如用户,客户支持,服务提供者,记帐和规则)和编号,且在4004步利用存放在系统数据存储器318中的数据,确定此类的新对象应该存放的主计算机10以为这些终端提供最好的访问。
在4006步,预编译器316可能加入一些新的源代码以使编译器更改这个为不同主计算机10编译的对象管理器108,以使它们传送所有的请求来生成与4004步选择的特定主机10相关的类的新对象。安全性在4008步预编译器316加入新的源代码来测试正在激活一个函数来更改数据的特定条目的对象或进程的标识,并仅在此标识与所期望的用户类别相一致的地方允许访问。这样,个人的数据仅可由个人的终端进行读或写。并发性当对一个对象数据进行多次并发访问是可能的,且第一个对象访问另一个也被并发访问的对象时,不一致的现象可能发生。相应地,在更优实施例中,用于避免不一致的装置被提供。参见图13,对于每一个类,在5002步预编译器316读取可能访问那个类的对象的并发进程个数;如果没包含并发信息,或并发进程数目明确地为1,则在5004步中无需采取进一步的措施。如果对一个给定的对象类来说,并发进程的数目超出了5004步预定的数目(可以是2或更大的数),则在5006步对那个类的并发控制方法被选择,在此实施例中它可能是一个简单的加锁进程,当一个对象被访问后,在第一次访问终止之前不可能有别的访问。
在5008步,附加源代码被加入到初始源代码中,以使编译器对相关的类的代码增加一个加锁步骤。时间性使用多任务操作系统106,每台主机10将并行地处理不同对象的多个进程。
参见图14,在6002步预编译器读取与每个类相关联的操作时间。取决于所有平均操作时间的总和,在6004步预编译器包含一条编译指令来为每一台主计算机10建立一个高速缓存大小,它与每台主计算机10的系统数据存储器318中记录的存储容量相符合,以在可用内存中提供与所需访问时间的总和成反比例的高速缓存大小。
在6006步,对每个类定义测试是否小于平均或最大的操作时间被指明,且如果是这样,在6008步对那个类选择一个和平均操作时间成反比例的优先权,在6010步源代码被加入到定义此类的代码中,以实现一个测试自从类(或类中的特定函数和操作)被激活后预定的时间是否超时的定时器,如果是,则退出此操作。
所选择的权值被写入到一个权值的列表,它由编译器编译并由对象管理器108针对每台主机10来使用,根据该权值每个对象运行的优先级被设置,以使得具有相对较长平均响应时间的对象被操作系统106赋予一个相对低的优先级的等待并被认为是“后台”任务。概述这样,当预编译器316的操作完成以后,存入到源代码存储器308中的扩展源代码包括附加源代码和通过下列方法实现功能或性能规范的编译器指令(a)将附加代码或数据加入到类代码110中,或(b)对于所有主计算机10修改对象管理器代码108,或(c)指示编译器根据不同的主计算机10产生独立版本的对象管理器。
根据此扩展源代码,对于输入源代码中的每一个声明类编译器接下来生成一个包含类代码110的可执行代码文件,并对每一主计算机10也可以包括对象管理器108。
不是对于每一主计算机10编译对象管理器108的代码,最好对于每一主计算机10提供一个被对象管理器108所采用的数据文件,以修改相应的操作。
这样,当远程通信系统被改动时,例如可用系统信息的改变,如增加一台新的主计算机或扩充主计算机上的内存,或是因为一个或多个对象类的功能被改变,在上述的本地测试以后,预编译和编译过程被重复且新的可执行文件通过广域网络被传送给每一台主机10,就象上面描述的那样。
如果一台新的主计算机被简单地加入到系统而没有做其他改动,原来编译的可执行代码的一份拷贝可能简单地通过广域网络提供给新的主计算机,使它和已存在的主计算机一样的方式运行。
可以看到,被第一种编译器所忽略的语句(例如注释语句)中的系统特殊要求的规范使得可以在系统释放前对其基本功能进行简单的本地测试,这样当系统运行期间被改动时能尽量减小主计算机10的停机时间。其他改动的实施例及修改从上文看很显然,很多修改和替换都是可以的。例如,尽管由于以上原因,还是可以很方便地将本发明作为一个预编译器和常规的C++编译器合作,同样也可以将本发明集成到一个非常规的编译器中(事实上预编译器和编译器结合很明确地包含这一点)。
自然地,本发明不仅仅对于C++可用,对于其他为分布式环境提供的面向对象的语言如Smalltalk(TM)同样适用。更一般地讲,也可以将相关的技术应用到非面向对象的语言和非分布式系统中。
虽然本发明被描述成远程通信系统中包含的编译装置时,事实上编译器装置可以处于不同的权限中且通过国际远程通信网络可连接到主计算机上;相应地,在权利要求中要求保护与其使用的远程通信网络结合及脱离的编译器装置。
自然地,远程通信以外的应用是可能的,例如共享的分布式计算。
许多其他的改动和修改对于有经验的人来说是很显然的。因此本发明旨在包含任何和所有本文所涉及的主题,而不论其是否被其后的权利要求所覆盖。
我们其它的英国专利申请9600823.0,在同一日以同样的标题提交,对本发明是可用的,且结合在此作为参考。
尤其是,本文所描述的生成一个类型模型的机制最好扩展成包含每一个对象的附加数据域,这些域说明根据本发明识别的功能操作数据,然后它们被作为编译好的可执行代码部分提供以便每个对象管理器108使用。根据此方式,同样的可执行程序可以被提供给每一台主计算机10且使用存放在存储器318中的系统信息的需求被避免。
权利要求
1.一个远程系统,包括一个分布式控制系统,该分布式控制系统包括多个互连的计算机(10)和用于计算机(10)的编译控制程序的设备(30),设备(30)包括一个用来编译计算机语言中源程序的编译器(312),源程序中第一条语句被上述语言所知且将被其它编译器编译,其特征在于编译器(312,316)也被安排处理第二条语句,该第二语句包含上述系统的操作规范并被上述其他编译器所忽略。
2.根据权利要求1的系统,其中上述第二条语句在上述语言中的注释域内被提供。
3.根据权利要求1或2的系统,其中上述计算机(10)被用来将对象记录中的控制数据和相关的数据读和/或写控制程序一起存储。
4.根据权利要求3的系统,其中上述第二条语句与由上述控制程序实现的操作时间有关。
5.根据权利要求4的系统,其中上述操作时间包含一个或多个最小操作时间、一个平均操作时间和一个最大操作时间。
6.根据权利要求3的系统,其中上述第二条语句与上述系统中预期的等效记录个数有关。
7.根据权利要求3的系统,其中上述第二条语句与系统中可能被访问的上述数据记录访问点的数目有关。
8.根据权利要求3的系统,其中上述第二条语句与被允许访问上述数据记录或其一部分的用户类别有关。
9.根据权利要求3的系统,其中上述第二条语句与上述数据必须立即可用的程度有关。
10.一种用于分布式计算系统的编译器设备,上述设备用于接收分布式计算系统操作的功能需求,且用于根据与所述系统的计算机有关的存储的数据解释上述功能需求,以实现此功能需求。
11.根据权利要求10的设备,包括接收计算语言源代码程序的装置(308),用于读取和编译被上述语言所知且将被其他编译器编译的第一条语句(1000a)的装置(312),其特征在于包括用于读取和编译形成分布式计算系统操作的上述功能需求的第二条语句(1000b)的装置(316、312),其中第二条语句(1000b)将被上述其他编译器所忽略。
12.根据权利要求11的设备,其中上述第二条语句包括上述语言的注释域。
13.根据权利要求12的设备,其中上述语言包括一种面向对象的语言。
14.根据权利要求13的设备,其中上述语言包括C++或其变种。
15.根据权利要求11到14中的任何一条的设备,包括一个用于上述语言的常规编译器(312)和一个用于读取上述第二条语句及其相关源代码、编译器指令和/或将被上述编译器(312)解释的其他语句的预编译器(316)。
16.根据权利要求11到15中的任何一条的设备,其中上述编译器(312)被控制根据上述第二语句产生用于分布式计算系统中不同计算机(10)操作的多个可执行代码输出文件。
17.根据权利要求16的装置,其中忽略上述第二条语句的内容,上述计算机(312)也被控制为单个处理器性能产生单一的可执行代码文件。
18.一种用于产生代码以在分布式计算系统上执行的方法,包括产生包括第一语句和第二语句的源代码,第一语句定义上述代码的结构,第二语句说明系统操作规范和/或系统特殊的实现数据;编译上述的第一语句同时忽略第二语句;测试上述编译的第一语句的执行;当上述的执行满意时,根据包含在上述第二语句中的信息重新编译上述第一语句,以在上述分布式系统上运行;和将已编译的代码分布到上述分布式系统的计算机上。
19.根据权利要求18的方法,其中上述分布式系统是远程通信系统。
全文摘要
用于分布式对象系统的编译器,其中系统操作规范的功能性需求可作为一种面向对象的语言(例如C++)的注释域输入,该注释域被常规的编译器忽略(以允许对此程序的单处理器版进行编译来用于调试),但当为分布式系统中的主计算机(10)编译代码时,可被预编译器(316)解释以便考虑系统数据(318)。该系统最好为远程通信系统。
文档编号G06F9/46GK1208481SQ97191730
公开日1999年2月17日 申请日期1997年1月7日 优先权日1996年1月16日
发明者保罗·安冬尼·马丁 申请人:英国电讯有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1