没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子札记108(2004)21-37www.elsevier.com/locate/entcs基于中间件的分布式系统Arnab Ray阿纳·雷1,2计算机科学,纽约州立大学石溪分校,石溪纽约州11794 -4400,美国兰斯·克里夫兰3计算机科学,纽约州立大学石溪分校,石溪纽约州11794 -4400,美国摘要基于中间件的系统的有效设计需要建模符号,这些符号允许在设计中直接使用由不同中间件包提供的过程交互方案。传统的设计符号通常只支持一个固定的进程间交互方案类,并且希望使用它们来建模基于中间件的系统的设计者必须投入大量的精力来编码符号中的中间件原语。在本文中,我们演示了如何一个新的图形设计符号,架构交互图(AID),它提供了参数化的支持不同的交互方案,可用于模拟一个现实生活中的基于中间件的系统,如事件堆协调基础设施的i-Room无处不在的计算环境。保留字:软件体系结构,中间件,形式化方法,分布式系统1介绍分布式系统的预实现建模[1]使设计人员能够以系统的方式研究系统,而不必担心实现细节,以便在开发周期的早期隔离设计错误1由陆军研究办公室资助DAAD 190110003和DAAD 190110019以及国家科学基金会资助CCR-9988489和CCR- 0098037支持的研究2电子邮件地址:arnabray@cs.sunysb.edu3 电子邮件地址:rance@cs.sunysb.edu1571-0661 © 2004由Elsevier B. V.出版在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.01.01022A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)21非正式的设计符号(如球棒型图)尽管易于理解,但在需要对设计进行数学分析时,其实用性有限。设计形式主义是需要的,以指定的性质,设计的系统应该满足以及验证这些性质的设计。此外,分布式系统的形式模型可以被模拟,并且从这些可模拟的模型生成实现代码基于中间件的系统是预实现建模的理想候选者,因为这种高度并发的分布式系统可能隐藏着非正式分析无法捕获的细微错误。基于中间件的系统的主要特征之一是它们通常是高度通信密集型的分布式系统,支持各种各样的应用同步机制。经典的体系结构描述语言(ADL)通常只支持一种基本的交互形式,因而不能自然地表达中间件丰富的通信规则。然而,架构交互图[16](AID)提供了一种参数化的机制,该机制自然支持各种进程间通信和同步原语作为语言支持的构造。这使设计者不必手工模拟不同的IPC:如果她使用传统的ADL,他将不得不这样做[2,5,15]。这导致了更干净的模型,因为没有通信代码造成的混乱另一个好处是AIDS模型具有更小的状态空间,因为每个通信现在是单个转换,而不是使用其他通信方案编码时所需的多个转换。在本文中,我们通过对应用程序在i-Room [9](斯坦福大学的一个实验性普适计算环境)中协调自身所使用的事件堆协调框架我们演示了如何使用我们的方法渲染事件堆的模型,以及为什么它比传统的建模技术更有效。为了做到这一点,我们通过在语言的语法中引入远程过程调用转换来扩展我们在[16]中的工作。由于中间件系统通常包括类似于事件堆的事件处理功能,在研究事件堆时,我们将我们的形式主义应用于不同类型中间件系统的建模问题。相关工作。形式化分析已被用于建模和验证系统,如i-Protocol [4],Rether[2]等网络协议和电子商务协议。虽然在形式化基于中间件的系统方面做得很 少 , 但 是 已 经 有 了 使 用 UML profile for Enterprise Distributed ObjectComputing [13]和be-A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2123我们称之为编舞。AIDS扩展了现有的工作,提供了一个完整的操作语义,使我们能够执行以及正式分析设计。基于中间件的企业系统具有许多固有的特性,例如QoS,我们的形式化体系目前能够处理这些特性。但是,通过将通信自然地编码到语言的语义中,我们认为AID是任何用于正式分析基于中间件的系统的工具箱的重要组件。2有限状态系统表示分布式系统可以看作是多个代理或进程的集合,这些代理或进程彼此连续交互。对于分布式系统的形式化模型,需要定义a)表示代理的基本形式,b)并发的概念,d)代理间通信的语义和d)层次的概念。在本文中,我们只考虑有限状态系统。传统上,表示代理的基本形式是有限状态机(FSM)。FSM的作用是模拟它所代表的代理的执行。当系统执行时,它从一个“状态”移动到另一个“状态”,这些“移动”由称为转换的定向箭头表示。每一个转换代表与环境交互的一个单元,或者代表智能体自己内部计算的一个单元。为表示环境交互的转换提供了一个标签,该标签是代理与环境交互所通过的端口或接入点的名称。表示内部计算的转换由称为τ的“静默”动作表示转换可以是输入转换或输出转换(相对于代理的输入和输出),其中输出转换由out(p,v)[在端口p上发出数据值v]表示,输入转换由in(p,v)[在端口p上消耗数据值v]表示。分布式系统中最流行的并发概念是语义交叉。这意味着,整个系统的行动集合由构成主体的行动的所有可能的交织组成在图1中,图的左侧表示两个FSM,P和Q。P有两个状态:1(起始状态)和2,而Q有两个状态:A(起始状态)和B。P可以在状态1进行由in(a,v)标记的转换(即通过输入端口a与环境交互),并转换到状态2。类似地,Q可以在端口b处进行输出转换out(b,v),并从状态A转到B。(The虚线表示由P表示的两个过程的并发(并行)组成||问:)24A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)21一B1在(a,v)中2一欧BQ1中的在(a,v)中out(b,v)2中用1生产线Bout(b,v)在(a,v)中2、Bt(b,v)1一在(a,v)中bout(b,v)2PP|| Q俄.西R|| SFig. 1. 动作交错和握手通信为分布式系统定义正式框架的第三项义务是为通信提供语义现有的分布式系统表示(例如CCS [17],CSP [6])通常支持固定的通信原语集合。一个与此密切相关的问题是,两个并行组成的代理何时可以相互通信当一个代理执行输出转换而另一个代理执行输入转换时,它们可以进行通信的结果是在全局水平(即在系统的并行组成的水平)的无声或τ转变。1的右侧示例显示了两个进程R和S通过将数据值v传递通过输入端口a和输出端口b之间的连接(由线表示)来对数据值v进行Statecharts [3]使用不同的通信/同步概念,而不是上面说明的二进制握手,事件被全局传输到系统中的所有代理(广播)。但这里也有一个问题,即语言本身只支持一种形式的通信最后的要求-层次结构-规定系统也可以嵌入其他系统。这可以通过为分布式系统表示配备组合操作语义来实现,这在某种程度上允许通过首先将系统组件转换为FSM然后根据语义组合这些组件来将系统描述“翻译”为FSM。这使我们能够以自底向上的结构化方式构建系统。A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2125复位放bp bp'得QP'BQ路消费者R'伊C2C1O我R3架构交互图在本文中,我们使用体系结构交互图(AID)来描述系统。AID的基本形式是IOLTS(输入输出标记转换系统),它是FSM,由状态、转换、转换关系、起始状态和端口集合(该集合称为接口)组成。AID代理可以有输出转换(将数据写入端口)、输入转换(从端口读取数据)和复合转换(称为远程过程调用),复合转换由包含顺序输出和输入动作的单个转换组成这类似于编程语言中的传统远程过程调用,其中输出部分表示由AID代理提供实际参数,输入部分表示提供回AID代理的返回值。远程过程调用转换不同于按顺序的输出转换和输入转换,因为前者必须原子地发生。AID代理可以采取两种形式之一:它可以是IOLTS,或者它可能是一个包含其他AID代理的网络,这些AID代理嵌入在接口中,并在通信拓扑中连接在一起,如图2所示。 实际执行通信和同步机制的实体称为总线,总线也像AID一样提供端口。 AID组件的端口和总线通过链路连接。也可以通过门AID理论对如何具体描述IOLTS AID没有任何限制:它可以是一个状态图,或者进程代数中的一个术语,或者一个程序。唯一的基本要求是建模形式可以转换为IOLTS,即对于每种输入语言,都必须转换为IOLTS。put,get:Gates i,r,o,rd,b、q:公共汽车C1、C2、消费者:AID图二. 一个嵌套的援助。我们不打算提供艾滋病的完整语义描述,但请感兴趣的读者参考[16]。我们提供的是总线背后的直觉,即AID的通信抽象机制。26A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)21−→在AID中,总线处理子系统之间的交互。因此,它们有两个责任:在发送者和接收者之间传输数据,以及发送者/接收者转换的同步,这取决于交互机制的语义。例如,考虑同步二进制握手交互机制。实现这种机制的总线不仅必须将数据值从发送方传递到接收方,而且还必须确保发送方和接收方阻塞,直到通信伙伴准备好执行。另一方面,在有界缓冲器无损耗通信的情况下,当缓冲器满时,应该阻塞,而当缓冲器空时,应该阻塞在共享内存中,写入者(提供一个共同的框架来解释这些微妙之处是艾滋病理论的中心目标特别是,我们希望将总线视为“设备”,根据总线旨在捕获的同步规则,将连接到总线的子系统的转换组合为系统级转换。这就是艾滋病不同于传统方法的地方。 通常,将子系统转换组合以形成系统级转换是通过||操作符和“硬编码”到语言语义中的本机握手规则。然而,我们想要的是有一个更通用的机制,通过它,用户可以定义自己的通信系统,然后这个新创建的通信学科可以无缝地插入到语言的本地语义中。公共汽车是实现这一目标的手段。定义3.1总线是一个形式为I,B,T,b0的元组,其中I是一个接口,即一组端口(第一组表示写端口,第二组表示读端口),B是一组总线状态,T是一个转换关系,b0∈B是起始状态直观地说,总线包含一个读和写接口,一组反映总线内部状态的状态,一个转换关系和一个初始状态。总线类似于IOLTS,但过渡关系明显不同,需要更多的评论。总线转换的形式为W RVbMbJWV R“如果总线处于状态b,并且连接到总线的子系统使能如WV中所指示的写转换并且如R中所指示的读转换,则总线触发如RV中所指示的读转换和如W中所指示的写转换,在连接到总线的系统中触发选定的读写转换也是如此A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2127⟨⟩∈ {}{}原子地:因此,一个总线转换可以“消耗”来自连接到它的组件的几个转换。而且,相对于连接到总线的组件来解释对总线的“写”:因此子系统上的写端口连接到总线上的写端口,并且对于读端口也是类似的。总线转换可以被认为是由“启用条件”和“触发条件”组成。前者要求在连接到不同总线端口的组件端口上启用某些转换。然后,后者指示当总线转换触发时,哪些启用的转换实际触发,从而导致组件以及总线的状态变化。为了提供总线转换,我们有两个义务。首先是定义一个涉及自由变量WV,R,RV和W RVW_i是b−→b_J在T_P(W_V,R,W,R_V)时完全成立的概率W VR是真的第二个是要说明过渡的目标iebJ是如何关联的到b一个例子。通信系统的图形演算(GCCS)[2]支持同步消息传递。这种形式的通信是常见的在其他进程代数,如CCS和CSP以及,我们展示了它如何可能被编码为一个总线。GCCS中的总线要求所有的发送器和接收器阻塞,直到至少有一个发送器和接收器被启用;然后进行数据交换,选定的发送器和接收器可以自由地继续执行。封装同步二进制握手的总线MS=I,B,T,b0可以定义如下。• I=一个由两个端口(读和写)组成的元组• B={b}由单个状态组成,其中b0=b。• T包含所有满足以下条件的转换:w,v∈WV。RR.W=WRV=r,v. 由于总线不需要存储数据,只需要传递数据,因此总线中只有一个状态。 因此,转换的目标总是b。只要至少有一个读取器和写入器,就会启用总线转换,触发转换的结果是只执行一个写入器和一个读取器,写入器输出的值被转移到读取器。请注意,总线永远不会改变状态;MS的转换的唯一作用28A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)214事件堆本文的其余部分致力于展示如何使用AID来捕获更复杂的交互机制:事件堆。本节的其余部分将更详细地讨论事件堆,而下面的部分将展示如何将事件堆捕获为AID中的总线。交互式工作空间是一个本地化的无处不在的计算环境,人们聚集在一起进行协作活动。任何无处不在的计算环境都需要协调在各种移动和嵌入式设备上运行的应用程序的交互。元组空间[12]纪律是这种环境中最常见的协调和通信机制[7,14]。在本节中,我们将考虑通用元组空间通信模型的一个特定实现,即事件堆协调基础设施[9],IROS的一个组件,IROS是斯坦福大学运行i-Room或“智能房间”的操作系统事件堆扩展了标准的元组空间模型,提供了对注册、监听的支持,以及对阻塞和非阻塞通信的支持。IROS或i-Room OS为构建在其上的应用程序提供了一组丰富的设施,以共享数据和控制。 共享协调应用程序之间的数据交换是通过IROS的事件堆组件完成的。事件堆的主要目的是使应用程序,这不是先天设计一起工作,在一个动态的,异构的,无处不在的环境中进行互操作。在元组空间模型中,所有参与者都通过一个公共可访问的元组空间进行协调。元组是有序的类型-值对的集合,可以以破坏性或非破坏性的方式张贴在空间上或从空间读取。 要检索的元组由 由检索应用程序指定的模板元组。对特定类型的事件感兴趣的客户端应用程序将模板发送到元组空间,然后如果模板“匹配”元组空间上的任何事件,则检索该事件。当应用程序等待匹配事件时,它可以选择阻塞(即启动交互的线程保持挂起,直到找到匹配事件)或不阻塞(即如果没有找到匹配事件,它将返回合适的消息)。事件堆通过提供自动检索尚未发布但客户端仍然感兴趣的事件的工具来扩展元组空间的基本功能。它通过提供注册的便利来做到这一点。客户端可以通过将其元组插入注册元组中来注册特定类型的元组,并且每当A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2129服务器,元组将被自动发送到客户端以及为它注册的其他因此,事件堆提供了匿名通信,因为不需要显式地集合应用程序。只要两个应用程序理解相同的事件类型,它们就会自动相互协调。事件堆的间接交互机制阻止了应用程序之间的强依赖耦合,从而实现了更好的互操作性和容错性。5使用AID在本节中,我们将展示如何使用AID来编码事件堆的客户端视图(即任何使用事件堆的应用程序从事件堆中获取的视图)。由于篇幅的原因,本文中我们只展示了事件堆的一些功能的编码;通过考虑对该模型的微小修改,可以很容易地提供完整事件堆的AID描述。我们的主要目标是将事件堆定义为总线。如前所述,总线是AID中通信的抽象。 如果我们能够定义 事件堆的总线,我们可以使用这个事件堆总线作为原语,然后将不同的应用程序插入事件堆框架,并使用整个系统进行模拟和建模。然后,事件堆协调和通信框架将成为原子的、本机的通信模式,就像标准的基于状态机的方法的同步握手一样。在传统方法中,事件堆引入了四个组件模块,其状态空间和转换被标记到应用程序或事件堆客户端模型上。在AID中,事件堆对客户端应用程序状态空间的贡献只是其组成数据结构(事件表和注册表)的快照。这是更有效的,因为通信.此外,使用事件堆的每个通信都保证是全局状态空间中的一个转换,而不是一系列转换和状态。此外,AIDS规范使设计者不必显式地交错转换,这一责任由语言本身承担。因此,使用事件堆的不同客户端模块可以插入到模型中,而不必每次重新编码事件堆模型。虽然艾滋病克服了标准方法的局限性,但它保持了组合性和传统的基于状态机的方法为我们提供的所有其他好处。30A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)21在AID中,组件上的端口(例如使用事件堆的应用程序)通过链接连接到总线上的端口(例如事件堆)。 链路是组件和总线端口之间的一对一对应关系。 如此发出总线上的端口,我们可以找到端口和它连接的组件通过沿反向方向的链接来实现。这就是所谓的前像。换句话说,前映像是一个函数,它接受总线端口并返回通过向后跟踪链接获得的组件上的相应端口。 我们在端口上定义二元关系sameecomp,由SAMECOMP相关的 两 个 端 口 属 于 同 一 组 件 。 也 就 是 说 , 对 于 任 意 两 个 端 口p1和 p2,samecomp(p1,p2)保持i,即p1和p2都属于AID网络中相同组件的接口。作为示例,在图2中,端口bp的原像是AID组件Cl的端口o,而都属于Cl的r和i通过相同的比较关系相关为了提供事件堆总线的定义,我们需要履行三个义务。我们必须为事件堆提供一组端口,这组端口将构成事件堆的接口。在这个集合中可以有任意数量的端口,这意味着事件堆语义不会对可能使用它的组件施加任何限制。另外两个义务是定义总线的数据结构和提供总线规则。数据结构。我们在这里的义务是定义总线内的数据表示,以及定义某些访问器函数,这些函数将被总线规则用来操作数据结构。我们首先提供一些基本类型:PortType、EventType和TemplateType。这些类型中的每一种都可以被认为是具有场的结构,这些场可以用于相互比较。我们不深入类型结构的细节,因为这不是我们研究的重点。感兴趣的读者可以参考事件堆的原始(文本)规范[8]。 端口为PortType,事件为EventType,模板为TemplateType。Porttype的结构可以消除同名但属于不同组件的多个端口之间的歧义。我们还定义了一个对类型的原子布尔运算,称为match,它接受EventType和TemplateType,并通过比较某些字段来确定它们是否匹配。[同样,我们不考虑如何做到这一点的机制]我们从上面的基本类型派生出以下类型• 发送到EventHeap的每个数据包都包含一个有效载荷,它可以是模板或事件。因此,我们定义了一个封装EventType或TemplateType的Pack- etType。• RegType是一个形式为(T emplateT type,PortT type)的元组,其中第一个A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2131∗| |∗元素和第二个元素可以通过函数frst(t)和sec(t)提取,其中t是RegType的元素。应该注意的是,有一个被称为TemplateType的特殊值,它表示“最通用的• EventTableType和RegTableType分别是类型EventType和RegType的列表。列表l是由序列连接运算符连接的值的序列。其中V是值的类型,其长度由下式表示:L. 也就是说,EventTableType是类型EventType的列表,RegTableType是类型RegType我们现在定义总线事件堆的状态集B如下。B EH={(l,l,J)|l ∈ EventTableType,lJ∈ RegTableType}总线的每个状态都是两个数据结构的快照:事件表或ET和注册表或RT。现在我们定义这些数据结构上的以下操作。• Event(v)、Template(v)、Regport(v)是对PacketType类型的数据值进行操作并提取分组的该部分的函数,该分组分别包含事件、模板和客户端注册以接收特定类型的事件的端口。回想一下,当客户端注册时,它向事件堆发送一个模板,并告诉它将所有与模板匹配的事件发送到其接口上的特定端口。Regport(v)返回客户端想要监听的端口。• PUT ET(v,l)= l.Event(v)if |L| ≤ MAXLENGTH,并以其他方式定义。PUTET函数接受一个PacketType类型的值,提取它的事件部分并将其插入事件表。• 其 中 e = ( T emplate ( v ) , RegPort ( v ) ) , 如 果 |L |≤MAXLENGTH,否则定义。这里,PUTRT函数接受的值为类型PacketType,提取模板和注册端口,将其制成RegType类型的元组并将其插入注册表中。有时候,数据包可能不包含任何特定的模板,而是包含一个特殊的字符,它告诉事件堆发送数据包的客户端想要注册所有要在事件堆上发布的事件。在这种情况下,T emplate(v)=• MATCH ET(v)= e,如果εe ∈ ET。 match(T emplate(v),e),否则为NU LL。这里,MAT CHET从分组中提取模板,并且检查在事件表中是否存在对应的匹配。一般来说,可能存在多个匹配,在这种情况下e可以是一组事件而不是单个事件。但在这里,为了简化讨论和符号,我们假设32A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)21NULLr=sec(t)}{r|r∈P ortT type. t∈RT. frst(t)=e是单个元素。然而,这可以很容易地扩展到更一般的设置。• INREG(v)={r |r∈ P ortT type. t∈ RT。 match(frst(t),event(v))!为sec(t)}。 INREG从数据包中提取事件,检查是否有是注册表中与事件匹配的任何模板。如果有,则返回所有有兴趣接收事件的端口的集合。INREG还返回那些已为所有事件注册的注册中存在的端口,即其模板是最通用的模板- 是的巴士规则 我们现在提供巴士规则。在提供总线规则之前,我们提供了另一个名为PacketN ame的函数,它对数据包进行操作并提取其名称 。 (egGetEventNonBlocking , GetEventBlocking , PutEvent ,RegisterForEvents,RegisterForAllEvents)此函数使总线能够知道它将为特定交互应用哪个规则的W RVabus跃迁的一般结构是:b−→BJ。我不想让我们看到这一幕W VR在堆总线中,客户端必须执行这可以被认为是事件堆API调用的模型,而写端口包含传递给API的参数,读端口包含返回值。现在,事件堆支持的每个通信原语都可以在这个通用基础设施中编码。如前所述,定义总线转换要求设计者指定转换谓词TP以及事件堆的“转换前”和“转换后”状态之间的关系非阻塞获取。同品种器械TP如下:∃⟨w, v⟩ ∈WV. r∈R. samecomp(preimage(w),preimage(r))P acketN ame(v)= GetEventN onBlockingW ={w}RV ={r,e|e = MAT CH ET(v)}直观地说,这意味着如果存在希望写入总线的端口,以及希望从总线读取的端口,并且这两者属于同一个组件(即组件执行的函数调用),并且正在考虑的数据包是非阻塞获取数据包,则希望使用写入端口写入的转换被启用,并且通过读取端口的读取转换获得所请求的事件;所请求的事件是事件表中与所提供的模板匹配的事件。 如果没有匹配,返回空值。应该记得,事件堆的状态是由其事件表和注册表组成的元组,即事件堆总线A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2133是这两个表的快照。由于检索元组不会修改这两个结构,因此转换前后事件堆总线的状态保持不变。所以形式上bJ=b。阻止Get。同品种器械TP如下:∃⟨w, v⟩ ∈WV. r∈R. samecomp(preimage(w),preimage(r))P acketN ame(v)=GetEventBlocking_n((e=MAT CHET(v)!=NU LL)W={w}RV={r,e}这表示前一个“get”事件的阻塞版本。请注意,在最后一条规则中,允许写入转换立即触发,但在这里,它被延迟到发布的模板与事件表中的事件。这是根据阻塞的语义,即希望获得事件的客户端被阻塞,直到获得匹配的事件。与非阻塞get的情况类似,事件堆总线的状态不会改变。注册. 同品种器械TP如下:∃⟨w, v⟩ ∈WV. r∈R. samecomp(preimage(w),preimage(r))文件acketN ame(v)= RegisterForEvents文件W={w}RV={r,ack}直观地,这意味着如果存在希望写入总线的端口和希望从总线读取的端口,并且这两者属于同一组件,并且所考虑的事件是寄存器事件,则希望使用写入端口写入的转换被启用,并且通过读取端口的读取转换,得到“ACK”,即已经成功注册的确认。同时,事件堆的状态会随着注册模板插入到注册表.因此,对于该规则,如果b=(ET,RT),则BJ=(ET,PUTRT(v,RT)),即事件表在转换之前和之后保持不变,但是注册表通过插入v而改变。PutEvent。同品种器械TP如下:∃⟨w, v⟩ ∈WV. r∈R. samecomp(preimage(w),preimage(r))P acketN ame(v)= PutEventW ={w}RV ={r1,event(v)|r1∈INREG(v)}<${<$r,ack<$}上述表达式的含义是,如果存在希望写入总线的端口和希望从总线读取的端口r,并且这两者属于同一组件,并且所考虑的事件是put34A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)21−→事件,则启用希望使用写端口进行写的转换,并且通过读端口的读转换在R端口上获得此外,通过在注册表中进行注册而表示对事件感兴趣的所有那些读端口(通过模板特定地或一般地针对所有事件)都被发送事件的副本。同时,事件堆的状态随着事件插入事件表而改变。因此,对于该规则,如果b=(ET,RT),则b=(PUTET(v,ET),RT),即注册表在转换之前和之后保持不变,但事件表通过插入v而改变。事件堆总线。 事件堆总线被定义为MEH=I,BEH,T,b0:• I=由一组有限的写端口和一组有限的读端口组成的元组。• BEH是如上定义的总线状态的集合。• T由上面定义的所有转换规则组成。• b0=(nil,nil)其中nil表示空列表。代表事件堆客户端应用程序的组件可以插入事件堆总线,并使用它本机提供的原语。AID在组件本身上施加了最小的结构,只期望它们具有底层IOLTS语义。因此,应用程序可以用设计人员喜欢的建模语言进行一个例子。我们给出了一个简单的使用事件堆总线的事件堆客户端示例。这些客户端可以是任何分布式应用程序的模型,如同步Powerpoint演示程序或多浏览器客户端-服务器[11]。让我们假设一个事件堆客户端对一个特定类型的事件感兴趣,该事件可以由i-Room的任何其他事件堆客户端发布。为了做到这一点,感兴趣的客户端执行远程过程调用转换,通过它检索这些特定事件。远程过程调用转变可以符号地表示为Mw!v1;r?v2其中w是writeport,其中提供参数v1,r是读取端口,其中获得返回值v2,并且i表示这是将端口w和r绑定在一起以成为同一转换的一部分的单个原子转换的事实。应用程序服务器使用这些相同类型的远程过程调用转换来发布它们的事件。上面的图3显示了这样一个场景。有两个事件堆客户端,其中一个作为应用程序客户端,另一个作为应用程序服务器。A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2135服务器发布事件获取应用程序客户端的事件发布的成功所有事件意味着事件堆客户端(应用程序客户端)应用程序客户端事件堆总线事件堆客户端(应用服务器)图三. 事件堆总线使用方式的一个简单示例。客户端和服务器都使用事件堆进行通信和协调。端口显示为三角形;菱形实际上是通过远程过程调用转换绑定在一起的一个写端口和一个读端口服务器将其所有事件发布到事件堆。它创建PacketType类型的分组v1,对于该分组,PacketN ame(v1)=PutEvent,并且其有效载荷包含事件。然后,在参与远程过程调用转换的写端口上发出此数据包。这个数据包沿着链路到达总线。 然后,总线检查是否有这种类型的事件的任何注册,并将事件发送到为该特定类型的事件注册的读端口。除此之外,事件堆还向服务器发回一个确认,在服务器上,参与远程过程调用的读端口接收到该确认。事件堆还使用已发布的事件更新事件表,以便该事件可供随后可能查询它的任何客户端使用。客户端希望对它感兴趣的事件进行非阻塞检查。在我们的示例中,我们假设这样的事件已经被服务器发送到事件堆。 为了检索这些事件,客户端创建PacketType类型的数据包v1,对于该数据包v 1,PacketN ame(v1)=GetEventN onBlocking,并且T emplate(v1)表示然后,这个包在w上发出,并沿着一个链接到达事件堆总线。事件堆看到一个名为GetEventN onBlocking的数据包,在看到它时,相应的总线转换被启用,然后,如第一个总线规则所示,提取发送数据包的模板部分,检查其事件表中的匹配项,并打包或删除结果 在V2中,其又由客户端在端口R处接收应该注意的是,我们并没有使用事件堆来固定应用程序模型的形式用户可以自由地使用她选择的任何形式,只要它具有基于IOLTS的语义。36A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)216今后的工作和结论本文的目的是以一个具有代表性的中间件系统事件堆为例,说明如何在AID框架中定义它。其他中间件系统可以合理地期望仅在实现中支持与事件堆和调度器相同的功能集。因此,我们的研究提出了一个案例,使用艾滋病的建模中间件为基础的系统。未来的工作需要将艾滋病合并到并发性的框架,并提供设计人员的权力,应用复杂的分析,艾滋病模型的分析程序。我们还寻求通过提供对类型化通信的支持来探索扩展AIDS的方法。此外,在本文中,我们处理了中间件的一个简化子集,即事件协调。像.NET和COM这样的企业中间件系统也提供了其他更复杂的功能,观察AID如何适应这些功能将是很有趣的引用[1] Grady Booch,Ivar Jacobson,and James Rumbaugh. UML用户指南[2] R. Cleaveland,X. Du和S.斯莫尔卡GCCS:用于系统规范的图形协调语言。COordination2000,LNCS,1906:284[3] D.Harel.国家图:a 视觉 形式主义 对于复杂的系统。Science of ComputerProgramming,8,pages 231[4] Y. Dong,X.杜,G. J. Holzmann和S. A.斯莫尔卡 gnu i-protocol中的活锁战斗:显式状态模型检查的案例研究。STTT 4:2,2003年。[5] D. Giannakopoulou并发系统行为分析的TRACTA方法。计算机系,帝国理工学院DoC 95/16,1995。[6] C.A.R. 霍尔 通信顺序进程。一九八五年[7] http://www.research.ibm.com/gryphon的网站。分布式消息传递:Gryphon项目。[8] B.约翰森普适计算机房应用协调基础设施。斯坦福大学博士论文,2002年。[9] B. Johanson 和A. 狐狸.事件堆:一个用于交互式数据库的协调基础结构。Proc.4th IEEEWMCSA,Callicoon,NY,2002。[10] B. Johanson,A. Fox和T.威诺格拉德交互式计算项目:无处不在的计算室的经验。IEEE普适计算杂志1(2),2002年4月至6月。[11] B. Johanson,S.蓬内坎蒂角Sengupta和A.狐狸. Multibrowsing:在多个显示器上移动网页内容。普适计算会议,2001年。[12] N. Carriero和D.格勒特纳琳达在上下文中。Communications of the ACM,32(4):445-458,1989.[13] I.波尔诺莫河Reussner和H.施密特使用EDOC和.NET组件服务进行架构配置。2003年第29届欧洲微型会议。A. 雷河Cleaveland/Electronic Notes in Theoretical Computer Science 108(2004)2137[14] P. Wycko,S.W. McLaughry,T.J. Lehman和D.A. Ford。空格IBM Systems Journal,37(3),1998.[15] R. Allen和D.加兰架构连接的正式基础。ACM软件工程与方法学报,6(3):213[16] A. Ray和R.克里夫兰架构交互图:系统建模的辅助工具ICSE会议记录,第396[17] R. 米尔纳通信系统的演算LNCS,1980年。
下载后可阅读完整内容,剩余1页未读,立即下载
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 利用迪杰斯特拉算法的全国交通咨询系统设计与实现
- 全国交通咨询系统C++实现源码解析
- DFT与FFT应用:信号频谱分析实验
- MATLAB图论算法实现:最小费用最大流
- MATLAB常用命令完全指南
- 共创智慧灯杆数据运营公司——抢占5G市场
- 中山农情统计分析系统项目实施与管理策略
- XX省中小学智慧校园建设实施方案
- 中山农情统计分析系统项目实施方案
- MATLAB函数详解:从Text到Size的实用指南
- 考虑速度与加速度限制的工业机器人轨迹规划与实时补偿算法
- Matlab进行统计回归分析:从单因素到双因素方差分析
- 智慧灯杆数据运营公司策划书:抢占5G市场,打造智慧城市新载体
- Photoshop基础与色彩知识:信息时代的PS认证考试全攻略
- Photoshop技能测试:核心概念与操作
- Photoshop试题与答案详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)