没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记54(2001)网址:http://www.elsevier.nl/locate/entcs/volume54.html18页CoreLime:一种移动Agent协调模型B. Carbunar,M. T. Valente,J.Vitek1普渡大学美国西拉法叶摘要Lime是一个用于移动计算的中间件通信基础设施,通过为本地和远程操作提供丰富的原语集,解决了设备的物理移动性和软件组件的逻辑移动性。原始的Lime规范令人惊讶地复杂和难以实现。在本文中,我们首先解构石灰模型,以确定其核心组件。在第二步中,我们试图重建一个更简单的模型,我们称之为CoreLime,它可以更好地扩展到大型和快速变化的代理和主机配置。1引言传统的计算模型是基于这样的假设,即设备和软件组件在使用之前被部署,并且一旦部署,配置是静态的。在新兴的无线计算领域,PDA或支持Java的电话可以建立自组织网络连接,应用软件可以控制自己的部署,这些假设并不成立。相反,需要新的计算模型来简化在这样的uid环境中开发应用程序代码的任务。在过去的几年里,从Ambients [7]到Seal [16],已经提出了许多理论模型作为移动计算的基础模型。这些模型中的每一个都围绕着迁移计算或移动代理的概念,它被用来抽象物理和逻辑的移动性。在实践中,处理移动主机比处理软件移动性要困难得多因此,移动代理系统,如Aglets[11],JavaSeal [4]和许多其他系统,主要集中在提供主机执行1 电子邮件:fcarbunar,vale nt e,j v g @c s.p ur due。埃杜乌c2001年由Elsevier Science B出版。V.CC BY-NC-ND许可下的开放访问。Carbunar,Valente,Vitek2环境以及对逻辑移动性的支持。在撰写本文时,对物理移动性的支持大多缺乏,这些系统中提供的通信原语是传统静态计算模型遗留下来的。后者可以说是移动代理技术成功的最大障碍。为移动环境设计通信机制是一项具有挑战性的任务。移动系统具有与传统的分布式或并发系统明显不同的特点。移动系统中的通信是瞬时的和机会性的,应用程序需要利用可用的资源,而不假设它们的持续连接,但考虑突然中断的可能性。移动系统中的通信也是匿名的,依赖于所提供的服务,而不是提供这些服务的实体的身份。1999年,Murphy,Picco和Roman [15,12]介绍了Lime,这是Gelernter的Linda [9]与反应式编程的优雅组合。该设计的目标是为移动环境提供一个简单的通信模型Lime引入了瞬时共享元组空间的概念。 在该模型中,每个移动实体都配备有自己的元组空间,每当该实体移动时,元组空间就会移动。一旦多个代理位于同一主机上,这些单独的元组空间就会被Lime默默地合并,从而创建临时共享模式,这些模式会随着代理进入和离开主机而改变。此外,可以动态地创建主机的特设联合。在本例中,Lime将每个主机的元组空间合并为单个无缝联邦元组空间。本文记录了我们试图了解石灰,并提供一个可扩展的实现其关键思想。我们的第一个贡献是作为一个过程演算模型的核心概念的形式化。这为我们提供了一个很好理解的起点,用于推理Lime程序以及实现者的规范。我们的第二个贡献是CoreLime,一个简单的和可扩展的基本演算的定义。这产生了一个Lime的变体,没有它的一些潜在的昂贵功能,我们打算作为构建下一代Lime实现的基础。本文的结构如下。第2节提供了对Lime及其Java实现的非正式介绍。第3节将Lime的核心元素形式化为过程演算。第4节讨论了规范的一些粗糙 之 处 , 包 括 对 联 邦 空 间 的 强原 子 性 要 求 。 第 5 节 介 绍 了 我 们 的CoreLime模型,它简化了Lime的一些假设,使其更容易实现更有效率。最后,第6节将Lime与其他基于元组空间的通信基础设施联系起来。Carbunar,Valente,Vitek32Lime:移动环境本节介绍用于移动环境的Lime中间件通信Lime在1999年的一篇论文中被非正式地指定[15],并且模型的大部分在Murphy的论文中被形式化为Mobile Unity符号[13]。此外,可从www.sourceforge.org获得Java实现。必要时,我们将区分Limeimplementation(表示为Limeimp)和Limespecion(表示为Limespec c)。在第3节的税收和石灰演算 中将给出例子。基本的酸橙。Lime中的程序由可能配备了许多元组空间的代理代理在具有活动元组空间管理器的主机上运行。Lime中可用的基本元组空间操作与Linda systems中的相似。Agent可以通过非阻塞的出操作将数据存放在元组空间中,通过阻塞的入操作或非阻塞的入操作删除数据。它们可以进一步获得一个带有rd和rdp的元组的副本。最后这些操作不会修改元组空间。位置感知计算。Lime允许代理通过位置参数对其他代理的元组空间执行操作。位置参数限制元组空间操作的范围。对于out操作,可以使用location参数来指定元组的目标代理。它的语义是,Lime将在目的地代理变得可达时立即将元组传递到目的地当目标代理不可访问时,元组仍处于其创建者的所有权之下。表示该所有权信息的一种方式是将每个元组视为具有两个附加的ELDcurrent和final,使得current表示元组的当前所有者,final表示其目的地。下面显示了一个小型生产者/消费者示例,其中两个代理在公共空间上交换数据啊!出hxbsi]j bh[ ! 在h?bbsi; y]这个例子基本上很简单。生产者代理将由值x组成的元组输出到元组空间s,而消费者代理继续尝试检索它们。反应式编程。在标准Linda原语之上,Lime引入了反应的概念。一个反应可以被看作是一个三元组(t,s,p),由一个元组空间t、一个模板s和一个代码片段p组成。反应的语义是,每当匹配s的元组存放在t中时,代码片段p应该运行。阻断RD和反应之间的主要区别是,Carbunar,Valente,Vitek4当找到匹配的元组时,保证运行匹配的反应。此外,Lime指定反应是原子的;换句话说,当p执行时,没有其他元组空间操作可以被处理。原子性确保反应总是在一致的状态下执行。反应的代码被允许执行元组空间操作,并且因此可以触发其他反应。Lime执行反应,直到没有更多的反应被启用。为了避免死锁,不允许反应发出阻塞元组空间操作,如in或rd。默认情况下,反应为红色一次,但也可以指定每个元组的反应为红色一次。继续前面的示例,生产者代理仅在接收到来自接收者的确认时插入新的元组。ah[out hxbsijreactonce-p-th“ack”aasi;y:out hxbsi]j bh[ !在h?bbsi;x:outh“ack”asi]在这个例子中,生产者代理插入了第一个值,当它收到消费者的确认时,下一个值将在反应的主体中产生。临时共享空间默认情况下,不同代理的元组空间是不相交的,代理不能使用元组空间进行通信。Lime的关键创新是支持一种灵活的元组空间共享形式,称为瞬时共享。代理可以声明它的某些元组空间是共享的。然后,Lime基础设施将寻找其他空间,属于不同的代理,具有相同的名称,并默默地将它们合并为一个看似无缝的空间。只要代理共处一地,共享就保持有效考虑一个简单的例子,其中两个代理有一个元组空间s。当第二个代理迁移到与第一个代理相同的主机时,元组空间暂时共享ah[out hxbsi]j bh0[m oveh:inh?bbsi; y]Lime最后也是最雄心勃勃的部分是对联邦空间的支持。联邦空间是一个跨多个主机的临时共享元组空间联合是主机发出接合命令的结果。通过发出明确的脱离命令,联盟可以脱离联盟Lime操作的语义不受联邦的影响,它取决于实现,以提供与单主机情况相同的保证这使实现复杂化,并对Limeprimiti ves的使用施加了一些限制。特别是,Limeimp将强反应限制在单一主体上,并引入弱反应。弱反应可以作用于多个主机,但它在元组的识别和反应代码的执行之间添加了一个异步步骤。这就是我们对Lime的快速概述感兴趣的读者可以参考[12]以获得更详细的介绍。我们现在来谈谈Carbunar,Valente,Vitek5a Lime的核心模型3解构石灰本节介绍一种语言,它形式化了Lime提出的协调模型。我们从Murphy的形式化出发,选择异步演算风格的操作语义[10,2,1]。与微积分的主要区别是使用生成通信操作而不是基于通道的原语。在进程演算中嵌入Linda类语言的想法在以前的工作中已经深入探讨过[5,8]。3.1一片酸橙我们首先介绍石灰演算的基本特征,这是石灰的简化版本。在这个形式化中省略了某些功能,因为我们的目标是提供一个令人信服的Lime核心模型,而不是力求详尽。主要区别在于我们的模型和Limespec 我们省略了对主机2的参与和脱离的建模,而是将所有主机加入到单个大的联盟中,并且我们添加了代理的显式概念来正式建模移动操作。表1定义了Lime演算的语法。我们假设一组名称N,由元变量a; s; h;x组成。基本值由v表示,由名称和元组组成。元组是值hv1; :;vni的有序序列。 元组s pa ceT是元组的多个集合。 我们用系统吗?'2 N表示可区分的未指定值。通常,这个值用于扩大匹配操作的范围。P rog::= A; T;XA::=“jah[P]jAP::=0 j P j Q j!P j(x) P jout v jin v; x:P jrd v; x:Pjmove h:P jreact v; x:P表1石灰演算语法一个配置是由一组代理A、一个元组空间T和一组全局名称X组成的一对。Eachagenta2A写为h[P],其中P是在代理内部运行的进程,h是运行2 建模参与并不是特别困难,参见[13,6],但它往往使语义复杂化。我们将在第4节中对(解除)接触有更多的说明。Carbunar,Valente,Vitek6出hv asi在hv a a0 si;x中反应hva a0si; x:P移动h将当前代理移动到主机h。代理的元组从当前主机元组空间中移除并插入到主机h的元组空间该操作记录了与模板v相关的反应,模板v的主体是进程P。当元组v在元组空间中找到匹配hv a a0si的,则触发反应,并且进程P原子地执行,x绑定到 v0。该操作的行为类似于in,只是匹配-ing tuple不会从tuple空间中删除。rdhv a a0 si;x该操作阻塞,直到在最终目的地为a0的代理a的元组空间s中找到与v匹配的值v0。如果找到几个元组,则非确定性地选择一个。然后从空间中移除值v0并将其绑定到x。该操作在agenta.如果目标代理a未连接,则元组在请求操作的代理的元组空间中保持错位,直到代理a变为连接。描述操作代理正在运行。在这个模型中,所有的代理元组空间都由一个全局元组空间T来建模。 附加到每个元组的附加信息将使我们区分元组的当前位置和当前位置。 与Limes pe c类似,代理可以有多个私有元组空间。在Lime演算中,这些由全局元组空间T上的不相交视图表示。这些私有元组空间由名称标识,并且具有相同名称的任何两个私有元组空间被认为是暂时共享的。系统中多个主机上使用的名称记录在集合X中,以确保它们的唯一性。过程按P和Q排列。 前四个进程原语(嵌入式进程、并行组合、复制和名称创建)遵循异步演算.惰性进程0没有行为。进程P j Q的并行组合表示两个进程并行执行。过程的复制!P表示并行执行的P的无限数量的副本。限制操作符(x)P生成一个新的名称x,其词法作用域在进程P中。在我们的模型中,名称用于表示代理,主机,元组空间以及原始值。元组空间是使用Linda原语访问的,Linda原语扩展了位置感知参数.表2描述了其余操作的语法。表2石灰结石手术。Carbunar,Valente,Vitek73.2Lime的语义我们现在给出Lime演算的操作语义。为了清楚起见,我们将语义分成三组重写规则。语义在表3和表4中定义,并且将在下面详细描述原始操作。重写规则的第一集合定义新的元组空间操作,并且具有以下形式:A ;T;X!A0;T0;X0其中一个配置是一对A; T; X,使得A是一组代理T是一个元组空间,X是一组全局名称。每一步约简表示执行一个Lime原语操作对程序和元组空间的影响。input(inv; x:P)和read(rdv; x:P)操作试图定位与v匹配的元组v0如果找到一个,则x的自由出现被替换为P中的v0在输入的情况下,元组从空间中删除。模式匹配的定义,写在vv0中,允许递归元组匹配.只有当它们相等或未指定的值出现在左侧时,值才匹配。输出(out)在Lime中是异步的,因此没有延续。每个输出元组hva si首先被变换为Lime值元组,即hv a a 0si,并被添加到全局空间。Lime值元组格式有两个代理名称,a是拥有元组的当前代理,0是目标代理。我们说,一个元组,其中6 = 0是错位。只有在目的地未连接时才会发生这种情况3.辅助函数mkt创建一个新的Lime值元组。如果它不能定位目的地,元组将被放错位置,否则元组将被传递。代理移动操作(moveh:P)改变当前代理的位置。此外,辅助函数mvt将所有元组移动到新主机。最后,反应操作(reactv; x:P)创建一个Lime反应元组并将其存放在全局空间中。这里v的形式应该是hv 0 a 0a 00si,这样v 0是值模板,a 0是要匹配的元组的当前代理,a 00是要匹配的元组的目的地代理,s是它的元组空间。规则是:ah[reactv;x:Pj P0]j Q ;T;X!ah[P0]jQ ;hvhahihxPii[T;X反应元组的形式为hhv 0 a 0 a 00si ha hi hx Pii,其中a是反应的主体,h是反应的位置,P是反应的主体。3由于我们没有对参与和脱离建模,因此元组仅在目标代理创建之前保持错位。添加约定规则不应影响语义。Carbunar,Valente,Vitek8反应.第二组三个重写规则定义了反应的语义。在Lime演算中,反应被存储在元组空间中,作为隐藏在正常用户代码中的特殊元组。因此,为了评估反应,我们只需要一个元组空间,因为它包含正常数据和在该数据上定义的反应。规则的形式是T;ST0其中T是元组空间,S是作为触发反应的候选的元组的多集合。所有在S中的候选人都将被检查。当所有的反应都完成执行时,返回新的元组空间T0。在最简单的情况下,如果没有候选,全局元组空间将保持原样:T;fgT如果有一个候选元组,但它没有触发任何反应,规则会丢弃它并继续分析剩余的候选元组:T;v[ST00如果6 9hv0 hahi hx Pii 2 T s.t. vv0最后,如果已经找到与候选者之一匹配的反应,则从全局元组空间中移除该反应。一个虚拟代理以一个新的名称创建,以运行反应的主体。一旦该过程终止,所得到的元组空间T00被用于递归地寻找准备好重新开始的其他反应 我们假设移动命令可能不会发生在反应体中。规则是:(r)rh[Pfv0=xg];T0;X(r)rh[0];T00;X0T;v[ST000)T00;v[ST000如果T= hv0 hahi hx Pii [ T0^ vv0注意,候选元组被保留用于递归步骤,因为可能存在匹配单个元组的若干反应。全局计算。最后一组两个重写规则简单地将原始规则与反应规则组合,并且规定在每个原始步骤之后,运行反应步骤。规则的形式A ;T;X)A0;T0;X0其中,配置是一对A; T; X,使得A是代理的集合,T是元组空间,并且X是名称的全局集合。用于在每个基本步骤之后触发反应的主要规则是:A ;T;X!A0;T0;XT0;ST00S=T0TA ;T;X)A0;T00;X被认为是用于触发反应的候选的元组的集合S被获得为在原始操作之前和在原始操作之后的全局元组空间的状态之间的差S =T0 T。T0;ST00Carbunar,Valente,Vitek90 0 00减少! :ah[inv;x:PjP0]jQ ;v0[T;X!ah[Pfv0=xgjP0]jQ ;T;X( T1 ) ah[rdv;x : PjP0]jQ ; v0[T;X! ah[Pfv0=xgjP0]jQ ;v0[T;X( T2 )ah[outv0jP]jQ ;T;X!ah[P]jQ ;v[T;X( T3)ah[moveh:PjP]jQ ;T;X!ah0[PjP]jQ ;T;X( T4)ah[reactv;x : PjP0]jQ ; T;X!ah[P0]jQ ;hvhahihxPii[T;X (T5);:(R1)(R2)(R3))的人:(G1)(G2)这些规则受到以下附带条件的约束:(T1)如果vv 0(T4)T0= mvt(a; h 0;T)(T2)如果vv 0(R1),如果T = hv 0ha hi hx P ii [T 0^vv0(T3)v = mkt(v0; a; h; Q)(R2)如果6 9hv0 ha hi Pi 2 Ts.t.vv0表3石灰演算操作语义学4石灰的关键评估在我们的评估过程中,我们发现了一些不合理的地方, 还有小恶魔 如果Lime(r)rh[Pfv0=xg];T0;X)(r)rh[0];T00;XT;v[ST000T00;v[ST000T0;ST00T;v[ST00T;fgTA; T ; X!A0; T0; XA; T ;X) A0; T00; XT0;ST00S = T0不A ;T;XA0;T;X0A0;T;X0)A00;T0;X0A ;T;X)A00;T0;X0Carbunar,Valente,Vitek10要获得广泛接受,必须解决这些问题。 这些问题源于Lime提出的强原子性和一致性。 即使在实现中,这些要求也会使Lime实现过于复杂,充满潜在的同步问题,并且效率低下。从用户的角度来看,更糟糕的是,高级功能的成本甚至由不使用它们的应用程序支付。在此,我们提出了一些粗略的点,两个石灰石颗粒和石灰石杂质。Carbunar,Valente,Vitek1110n0结构同余规则P j QQ j P(SC1)(x)(y)P( y)(x)P(SC5)!PP j!P(SC2)PQ)( x)P(x)Q(SC6)(PjQ)jRPj(QjR)(SC3)(x)(PjQ)Pj(x)Q;如果x2=fn(Q)(SC7)P j 0P(SC4)PQ)ah[P];T;Xah[Q];T;X(SC8)(x)a[P]a[(x)P];if x 6= a(SC9)(x)(ah[P]jbh0[Q])(x)ah[P]jbh0[Q];ifx6=b;x2=fn(Q)(SC10)(x)ah[P];T;Xah[P];T;x[X;ifx2=X(SC11)模式匹配规则v1v0::v nv0Xx?Xhv1:vnihv1 :vni功能00000mkt(hv a si; a; h; Q)= hv a a si; if Qah0 [P] j Qmkt(hv a0 si; a; h; Q)= hv a a0 si;否则mvt(a; h; fg)= fgmvt(a;h;hvhah0ihxPii[T]=hvhahihxPii[mvt(a; h;T)mvt(a; h;v[T]= v[mvt(a; h; T)表4结构一致、模式匹配和辅助函数读者应该记住,我们并不是试图批评Lime的一个原型实现,而是试图发现模型固有的特性。4.1反应Livelocks石灰石反应要求反应以原子方式进行,直到达到固定点。当前主机上的所有其他元组空间操作都将被阻止,直到反应终止。在高度并发的环境中,这是一个沉重的代价反应原子性意味着Lime out的运行时成Carbunar,Valente,Vitek12本是完全不可预测的。还有一个问题。因为反应体是正常程序,Carbunar,Valente,Vitek13无法保证终止。 考虑以下表达式:reactv; x:(! 输出v 0)在Lime演算语义中,这个反应永远不会终止,因为我们要求反应体减少到0。因此,如果它被触发,整个系统将被卡住。InLimeimp 由于在反应体中使用不受限制的Java代码片段,出现了类似的问题。每元组一次的反应会出现一个相关的问题。每元组一次的反应可以通过输出它感兴趣的元组来递归地触发自己。例如,考虑以下程序reactonce-p-thv a a si; x: outhv a si这个程序注册了一个对某个值v感兴趣的反应,当一个这样的元组被插入到元组空间中时,它继续输出一个具有相同值的新元组,从而递归地触发它自己。虽然有人可能会争辩说,这个特殊的例子可以通过仔细的编码来防止,但要防止独立开发的应用程序意外创建相互递归的模式要困难得多。非终止反应是石 灰石 进口的 一个严重问题。 首先,它们阻塞当前主机的整个元组空间,并且由于脱离是全局的和原子的,它们可以防止脱离过程终止,从而阻塞整个联合。4.2一元组一次反应每元组一次反应的语义是每个元组都应该与所有其他元组区分开来,这样Lime就可以确保每个元组只触发一次反应在传统的元组空间中,通过确保在空间中插入元组时运行一次反应来实现这样的语义是相当容易的Lime还有一个额外的问题,代理可以带着它们的元组移动。那么问题就变成了:如果一个代理离开了一个主机,然后又回来了,它的元组会触发反应吗?石灰SPEC给出了对该问题的回答,因为它要求每个元组配备有全局唯一标识符(IDENTIFICATOR)。这些GUID正好解决了这个问题。一元组一次反应的明显实现策略是存储它已经反应过的元组的GUID。一个缺点这种方法的一个缺点是,reaction可能需要存储无限数量的数据来记住所有看到的元组,特别是如果GUID足够大以提供某种合理的唯一性可能性。在实践中,GUID的唯一性可以被区分以确保。InLimeimp例如,代理通过Java序列化移动。在这种形式下,很容易创建代理及其所有元组的副本。为了提供真正的唯一性保证,实现将不得不保护自己免受重放攻击,这将大大复杂的移动性协议。Carbunar,Valente,Vitek144.3联邦空间作战联邦空间是分布式数据结构,可以从多个不同的 主机同时访问。Limepec对 联 邦空 间提出了很强的一致性要求。因此,面临的挑战是找到减少所需全球同步量的实施策略Lim eImp选择的方法是在同一主机上保留每个元组的单个副本,作为其所有者代理。联邦输入请求通过联邦上的多播来实现 阻塞请求由弱反应实现,弱反应在联盟的每个主机上注册强(本地)反应,并在发出输入请求的代理主机上注册特殊反应。然后,每当本地反应之一nds一个匹配的元组,始发主机被通知,如果代理仍在等待输入,元组被转发。这种方法的问题在于可扩展性。对于每个联邦输入操作,必须联系联邦中的所有主机,创建和注册新一旦找到元组,就必须禁用反应。从实际的角度来看,在主机上具有额外的反应会减慢每个本地元组空间操作,因为反应必须搜索每个输出操作。我们认为,联邦操作本质上是不可扩展的,而且它们会影响不使用它们的应用程序的性能,即使是不需要连接到网络的纯本地应用程序4.4约定的原子性InLimeimp 加入联盟的主机必须进入一致状态。这可以归结为确保对新主机执行所有控制联邦的弱反应。对于每个弱反应,必须在传入主机上注册一个当前的参与过程是原子性的,这很尴尬,因为这意味着新的主机必须被序列化,而其他元组操作在被添加到配置中时会被阻塞。4.5脱离的原子性当主机希望离开联盟时,它必须执行脱离操作,该脱离操作原子地从联盟中的所有其他主机注销由当前在该主机上的代理注册的所有弱反应。这是一个代价高昂的操作,因为在组成联合的主机上禁用可能会有许多强烈的反应,并且因为它涉及联合空间上的全局锁定。此外,人们可能会质疑在移动设备的情况下要求明确脱离通知的选择。如果移动终端移出范围或失去连接,则它不太可能有时间事先发送消息。Carbunar,Valente,Vitek154.6动作的原子性Lime演算的语义是移动是原子的。 在Limes pe c中没有明确的状态。 使移动原子化具有令人愉快的特性,例如,我们保证在接下来的配置中,非阻塞输入将成功。ah[moveh0:0]jbh[inphvaasi;x:P];fhvaasigb因为不管调度如何,INP将总是在代理A从主机H或主机H 0连接的环境中运行。在实践中,这当然不是这种情况,因为当a在主机之间传输时会有一段时间。因此,在Lime实现中,上述程序中的inp可能不会成功。一个简单的方法来模拟这种行为是将每一个动作转换为两步操作,代理首先移动到一个与其他主机断开连接的主机,然后在第二步中,移动到其目的地。4.7输入操作在Lime中,所有的输入操作都是原子的,即使是远程的。移动性的存在使远程输入操作的实现复杂化,因为代理可能在等待回复的同时尝试移动。那么问题是Lime实现在这样的配置中应该做什么,ah[moveh:0jinhvbbsi;x:P]其中代理B被假定为远程的。如果输入操作被选择为rst,实现是否应该等待输入完成后才允许移动。由于这是一个阻塞,因此等待时间是无限的。另一方面,如果它允许代理移动,那么它必须准备好处理在a在传输过程中从b的主机发送的额外复杂的消息4.8总结Lime的语义对模型的实现提出了非常强的原子性要求。这些要求很难在分布式环境中实现,当设备和程序被允许移动时就更难了。下一节将介绍一个更简单的Lime模型,我们建议将其作为构建更健壮的Lime实现的基础5回到基础:CoreLime我们研究的最初目标是为Lime添加安全原语,但我们在试图理解其实现时发现的问题使我们确信必须简化模型。 我们的方法是双重的,首先,我们将提供一个更简单的Lime化身,我们称之为CoreLime这是Lime的一个非分布式变体,具有代理移动性。语法Carbunar,Valente,Vitek16并且保留了大多数Lime操作的语义,但主要限制是操作的范围仅限于本地主机我们研究的第二部分对于这些,我们计划使用代理移动性来指定远程对象,从而对CoreLime进行翻译在本文中,我们介绍了CoreLime并暗示了翻译。5.1CoreLime的语义Lime和CoreLime之间的主要区别是我们试图提升所有全局同步要求。为了做到这一点,我们已经限制了所有的操作,他们的本地变量,并依赖于代理移动作为建模远程操作的单一机制。Lime的另一个变化是我们删除了反应的原子性要求。在我们的变体中,反应与用户代码并发执行。这允许更简单的语义,而不需要辅助约简。语义总结见表5。需要作出的主要改动如下。输入操作必须检查匹配的元组的位置,由in或rd检索的任何元组必须属于同一位置的代理。此约束由过渡上的边条件强制执行:ah[inv;x:Pj P0]j Q ;v0[T;X!ah[Pfv0=xg jP0] jQ ;T;X如果vv0^ loc(v0)= h辅助函数loc返回元组或代理所在的主机输出和移动减少可以触发反应,这些反应由并行运行的新进程R表示:ah[outv0j P]j Q ;T;X!ah[P]jQ jR ;v[T;X其中v=mkt(v0;a;h); R=react(fvg; T)辅助函数react将在当前主机上创建一个新的代理,其主体为匹配反应的并行组合,例如。(r)rh[P1 j: j Pn]这是针对每个匹配元组v进行的,使得v被替换为反应体的参数。远程操作。从语义中删除远程操作不会阻止代理访问远程主机的元组空间为了验证这一点,我们展示了一个代理如何将一个新的代理调度到另一个主机来执行远程接入。ah[rinh0;hv0;a0;a00;si;x:PjP0],(y)(r)ah[inhhy;?i;a;a;si;x:PjP0] jrh[moveh0:inhv0;a0;a00;si;x: moveh:outhhy;xi;a;si]Carbunar,Valente,Vitek170 0 00减少ah[inv;x:PjP0]jQ ;v0[T;X!ah[Pfv0=xgjP0]jQ ;T;X( T1 ) ah[rdv;x : PjP0]jQ ; v0[T;X ! ah[Pfv0=xgjP0]jQ ;v0[T;X( T2 )ah[outv0jP]jQ ;T;X!ah[P]jQjR ;v[T;X( T3)ah[moveh:PjP]jQ ;T;X !ah0[PjP]jQjR ;T;X( T4)ah[reactv;x : PjP0]jQ ; T;X!ah[P0]jQ ;hvhahihxPii[T;X(T5)这些规则受到以下附带条件的约束:(T1)如果vv0^loc(v0)= h(T2)如果vv0^ loc(v0)= h(T3)v=mkt(v0;a;h); R=react(fvg;h; T)(T4)T0 = mvt(a; h0;T);R = react(sel(a; T; T0); h0;T0)功能mkt(hv a0 si; a; h)= hv a0 a0 si; if loc(a0)= hmkt(hv a0 si; a; h)= hv a0 si;否则react(fg; h;T)=0react(v[V;h;T)=(r)rh[selr(v;h;T) ]jreact(V;h;T)selr(v; h; fg)=0selr(v;h;hv0hah0ihx0Pii[T)=Pfv=x0gjselr(v;h;T);如果v0v^loc(v0)=hselr(v; h; v0[T)= selr(v; h; T)mvt(a; h; fg)= fgmvt(a; h;hvaa0si[T]=hv a0 a0si[mvt(a; h; T); if loc(a0)=h mvt(a; h;hv a0a si[T]=hva a a si[mvt(a; h; T); if loc(a0)= hmvt(a;h;hvhah0ihxPii[T]=hvhahihxPii[mvt(a;h;T)mvt(a; h; v[T]= v[mvt(a; h; T)Carbunar,Valente,Vitek18se l(a;T;T0)=fv2T0j(h? 是吗?什么?iv)_(hv0a0a0siv^hv0aa0si2T)g表5CoreLime的语义Carbunar,Valente,Vitek19在此操作中,代理r被分派到主机h0,在主机h 0处执行所请求的in当找到匹配的元组时,代理r返回到发出主机h,并输出找到的值以及标识操作的标记y。然后,代理a删除该值。5.2使用CoreLime我们目前正在开发CoreLime在Java中的实现。Limeimp的接口将主要保留一些额外的约束以实施CoreLime的局部语义我们使用[3]的SecOS实现作为底层元组空间引擎。6相关工作本文提出的操作语义类似于Cardelli和Gordon [7]的环境计算然而,在环境演算中,用于读取消息的原语不是基于模式匹配的,因此通信进程必须知道彼此的身份。此外,进程不能透明地读取位于兄弟环境中的消息。Busi和Zavattaro也提出了瞬时共享元组空间的形式化然而,它们没有对反应进行建模,也没有考虑在真实系统中支持联合元组空间的影响。图森[14]是一种旨在与现有代理相关联的协调模型系统.每个主机都提供元组空间,本地代理可以使用这些元组空间进行代理间通信和访问本地资源。通过指定它们的名称和主机的名称,可以在它们上远程执行类似Linda的7结论在本文中,我们提出了一个形式化的石灰,移动系统的通信模型,解决逻辑移动性以及设备的物理我们已经发现了Lime的规范和实现中的潜在问题,并引入了该模型的较小版本,称为CoreLime。作为未来的工作,我们计划为CoreLime添加安全机制。由于在移动环境中通信是匿名的,实体之间不信任对方。在实际环境中,存在这样的情况,其中需要诸如安全信道之类的特征我们将添加控制访问和安全过滤器的功能,以验证和限制权限。功能将通过封装秘密元组空间名称来提供元组空间级别的粒度。合法用户将不会被赋予分发它们的权利,并且将禁止添加权利。安全过滤器将被包装在Carbunar,Valente,Vitek20元组空间,对它们的作用很像反应,但对所有执行的操作都起反应。我们未来的工作还包括CoreLime的实现,以及Lime中提供的远程操作的语义定义致谢这项研究得到了摩托罗拉、CERIAS和CAPES的资助。作者要感谢Lime的作者开放了他们的实现,并感谢Amy Murphy回答了我们的问题。引用[1] R. M.阿马迪奥岛Castellani和D.桑吉奥吉关于异步演算的互模拟。在usMontanari和V.Sassone,编辑,CONCUR '96,LNCS第1119卷,第147页。Springer-Verlag,柏林,1996年。[2] G. 布多异步与微积分(注).Rapport de Recherche 1702,INRIA So a-Antipolis,May 1992.[3] C.布莱斯,M。Oriol和J. Vitek. 一种基于安全空间的Agent协调模型。在P.Ciancarini和A. Wolf编辑, Proc.3rd Int. Conf. on Coordination Models andLanguages,第1594卷,第4页{20},Amsterdam,1999年。施普林格出版社,柏林。[4] C.布莱斯和J·维泰克JavaSeal移动代理内核。In D. Milojevic,编辑,Proceedings of the 1st International Symposium on Agent Systems andApplications,ThirdInternationalSymposiumonMobileAgents(ASAMA'99),pages 176{189,Palm Springs,May 9{13,1999. Press.[5] N.布西河Gorrieri和G.萨瓦塔罗Linda协调原语的进程代数视图。理论计算机科学,192(2):167{199,1998年2月。[6] N. Busi和G.萨瓦塔罗关于瞬时共享元组空间的一些思考。在软件工程和移动性研讨会上。与2001年5月举行的软件工程国际会议同地举行。[7] L. Cardelli和A.戈登移动环境。In M. Nivat,编辑,软件科学和计算结构的基础,计算机科学讲义第1378卷,第140页。Springer-Verlag,1998.[8] R. DeNicola和R.普利亚人基于Linda的进程代数在P. Ciancarini和C. Hankin编辑,Proc.1st Int.Conf.on Coordination Modelsand Languages,计算机科学讲义第1061卷,第160页。Springer-Verlag,柏林,1996年。[9] D. 格 勒 恩 特 琳 达 的 生 成 通 信 。 ACM Transactions on ProgrammingLanguages and Systems,7(1):80{112,Jan. 1985.
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Haskell编写的C-Minus编译器针对TM架构实现
- 水电模拟工具HydroElectric开发使用Matlab
- Vue与antd结合的后台管理系统分模块打包技术解析
- 微信小游戏开发新框架:SFramework_LayaAir
- AFO算法与GA/PSO在多式联运路径优化中的应用研究
- MapleLeaflet:Ruby中构建Leaflet.js地图的简易工具
- FontForge安装包下载指南
- 个人博客系统开发:设计、安全与管理功能解析
- SmartWiki-AmazeUI风格:自定义Markdown Wiki系统
- USB虚拟串口驱动助力刻字机高效运行
- 加拿大早期种子投资通用条款清单详解
- SSM与Layui结合的汽车租赁系统
- 探索混沌与精英引导结合的鲸鱼优化算法
- Scala教程详解:代码实例与实践操作指南
- Rails 4.0+ 资产管道集成 Handlebars.js 实例解析
- Python实现Spark计算矩阵向量的余弦相似度
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功