没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记160(2006)15-40www.elsevier.com/locate/entcs组件组成Farhad Arbab1,2数学与计算机科学中心(CWI)Kruislaan 4131098 SJAmsterdam荷兰Leiden Institute for Advanced Computer Science(LIACS)莱顿大学尼尔斯·玻尔韦格12333 CA莱顿荷兰摘要由自治子系统组成的系统的核心是以相互作用为中心的协调问题.在并发理论中,交互是一个不可分割的问题。然而,奇怪的是,在计算的构造模型中,相互作用并没有被认真地认为是一个一流的概念。协调语言Reo提供了一个强大的和富有表现力的模型,通过交互的灵活组合的对象。Reo是一个很好的例子,说明了一个建设性的计算模型,它将交互视为(事实上,唯一的)第一类概念。它唯一关注的是连接器的组合构造,这些连接器在并发系统中启用并协调组件之间的交互,而无需它们的知识。我们展示了如何让复杂的行为在一个系统中出现的原始交互的组成。关键词:组件,组成,连接器,选举事务处,抽象行为类型,外生协调。1引言通过将现有的软件和子系统作为可重用组件粘合在一起来组成运行系统,并验证所产生的系统的行为符合预期,这是基于组件的软件工程的核心Web服务的组合使得这一核心问题更具挑战性:面向服务的计算需要协调组合(也称为“编排”或“编排”)的外部可观察的行为的单独的软件部分的实际代码不能组成,必须保持在独立的1这项工作是在荷兰科学组织(NWO)对C-Quattro项目(编号612.000.316)和SENTER对CIM III项目的资助下进行的。2 电子邮件地址:farhad@cwi.nl1571-0661 © 2006 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2006.05.01316F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)15软件组合自编程开始以来就一直受到关注。函数调用、方法调用、远程过程调用以及它们的变体包括用于在大多数现代模型中组成软件的机制。这些机制对于算法的合成是非常有效的。 为了解决动态通过协调独立个体之间的相互作用,贡献的子系统或服务,需要以交互为中心的新的软件组合模型作为第一类概念。在并发理论中已经研究了交互协议的各个方面然而,奇怪的是,在构造性的计算模型中,交互作用并没有被认真地认为是一个一流的概念。当代的并发模型,如CSP [22],CCS [25],π演算[26,29],进程代数[10,11,21]和演员模型[1],主要将交互视为次要或派生概念。例如,流程演算是用于构建流程的模型。它们提供操作符,用于将原子过程或原始操作组合成更复杂的过程。相互作用仅限于一个并发系统中所涉及的过程行为展开的结果例如,当一个进程p展开并执行它的动作时,它的一个原语动作(如发送)与另一个进程q执行的兼容原语动作(如接收)发生冲突。正是这种行为的碰撞形成了一种相互作用。无论这种碰撞是靠运气、神的干预还是智慧的设计发生的,都是无关紧要的。在之前或之后的瞬间,也许在不同的运行中,同样的两个动作可能与其他进程的其他动作发生冲突动作和它们的组合有明确的结构用于定义一个系统。相互作用是短暂的和隐含的,在系统的构建中不起结构性作用。其他当代的软件组合模型,如面向对象的范式或演员模型,在这方面并不比过程演算好。一个将交互作为第一类概念的构造性计算模型必须满足以下条件:(1)原始交互;(2)将(原始)交互组合成更复杂交互的组合规则,而不需要指定所涉及的参与者(的行为)。协调语言Reo是一个很好的例子,它是一个建设性的交互模型在本文中,我们简要地描述了Reo,并证明了它提供了一个强大的和富有表现力的模型,通过交互的行为的灵活组合Reo独特地关注连接器的组合构造,这些连接器在并发系统中启用并协调组件之间的交互,而不需要它们的知识。Reo展示了系统中的复杂行为如何作为原始交互的组合出现。2外部协调外生协调[4]指的是来自外部的协调,指的是在模型或语言中协调黑盒实体的行为的能力,而不需要它们的知识,来自这些实体的外部。这是一个基本属性,F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)1517组件组合模型的优点在于,它允许从完全相同的组件中构建具有非常不同的紧急行为的系统,只需将它们不同地组合起来。[6]中出现了一个生动的例子来说明外生协调的重要性,其中有两个古典哲学家用餐问题的例子不同的连接器可以在相同的组件上外源地施加不同的协调协议(例如,哲学家和筷子),以产生不同的组成系统,表现出不同的紧急系统行为。例如,在吃饭的哲学家的例子中,作为一种紧急行为的僵局的可能性可以简单地通过不同地组合相同的组件来消除。Unix管道和过滤器是一个例子,说明了独立的可执行软件片段如何被外部协调成一个组合系统。唉,这个模型有限的可扩展性限制了它的表现力,但最简单的形式(管道)组成。经典的数据流模型,类似数据流的网络和演算,如[14,15],[18],[24],Kahn网络[23]和Petri网,每个都包含特定的协调结构,从而具有更大的灵活性。在软件组合的上下文中,这些模型至少在两个重要领域存在缺陷首先,它们不允许在行为定义中混合同步和同步第二,它们充其量只能支持非常初级的外部协调形式。例如,假设我们有三个组件,C、D和T,如图1.a所示它们都是黑箱组件:我们不知道它们是由什么组成的,也不知道它们内部是如何工作的它们可以由硬件、软件或两者的某种组合构成我们不能对用于构建这些组件的语言或模型做任何假设具体地说,它们既不提供调用方法的接口,也不进行任何方法调用来与它们的环境交互。(一)(b)第(1)款(c)第(1)款(d)其他事项Fig. 1. 三种成分及其各种组成关于C,我们所知道的唯一的事情是我们可以从外部观察到的它的对象。它有一个与环境交互的端口,通过它周期性地输出一些字符串。当然,要使输出发生,C环境中的(实体)必须准备好接受其输出。假设一个理想的合作环境(即,当C试图输出它的字符串时,总是准备好接受它),C大约每15秒产生一个字符串,容限为100。C产生的字符串的实际内容是当前时间;所以C是一个时钟。关于D,我们唯一知道的是它有一个输入端口,通过这个端口,它消耗字符串并在其附带的监视器上显示它们大约30秒。D的我们观察到T的行为与C非常相似,除了它的容限为δ,并且其输出字符串的内容传达当前温度。DC不DC?不DC不不DC18F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)15我们可以用这些组件构建一些系统,最简单的系统涉及直接连接,例如,在C和D之间。因为我们不能改变这些组件中的任何一个,所以我们必须从外部进行连接。我们可以用来组合C和D的最简单的连接器是我们称为同步通道的连接器,如图1. b所示。与无总线的Unix管道一样,同步通道是一种两端通信的媒介。我们称之为“同步”,是因为它将如果我们使用一个同步通道将C连接到D,该同步通道的传输和同步时间小得可以忽略(与C的周期相比),我们将获得一个显示当前时间的组合系统,大约每30秒更新一次。类似地,我们可以构建另一个由同步通道连接的T和D系统,如图1.c所示,以显示当前温度,大约每30秒更新一次。为了建立一个系统,类似于人们在一些银行大楼顶部发现的,交替显示当前时间和温度,我们在C,D和T中拥有我们需要的所有功能元素。我们需要一个连接器将它们组合在一起,如图1.d所示此连接器必须具有比前面组合中使用的同步通道更复杂的行为:它不仅必须促进这三个组件之间的数据交换,而且还需要强制执行实现所需交替行为的协调协议因为组件的内部不能改变,这样的连接器将不得不从组件的“外部”强加其协调协议显然,这样的连接器,以及其他更复杂的连接器,可以用任何现代编程语言开发为程序;它们的图灵完备性确保了这一点。然而,考虑是否有更好的、更高级别的替代方案来从头开始编程这样的连接器是很有趣的。同步和协调协议是出了名的复杂并发程序,并且添加规定以使它们能够应对分布式环境中的移动性使得传统的编程模型和语言对于它们的开发来说严重不足在这些连接器之间有足够的目的共性(促进数据交换和外部协调),以保证考虑一个特殊的连接器规范模型和一种特殊的语言来开发它们在某种程度上,它们只是连接和协调,缺乏特定于应用程序的功能,每个这样的连接器都可以通用地设计和重用,以将广泛不同的组件组合到完全不同的系统中。特殊用途连接器规格型号是什么样的?连接器是否可以重用,不仅可以将组件组合到(子)系统中,还可以组合更复杂的连接器?什么组合操作符是允许连接符组合所必需和足够的是否存在一组原始连接器,这些连接器组合操作符可以从中构造“所有有趣或有用的如何描述有趣和有用F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)1519在这种情况下?在本文的其余部分,我们解决这些问题的具体模型,Reo的上下文中,并显示它是如何作为一种语言的可重用的协调组件连接器的组成结构3REOReo是一种基于通道的外源协调模型,其中复杂的协调器(称为连接器)是由简单的协调器组成的[5]。Reo中最简单的连接器是一组由用户提供的具有良好定义行为的通道Reo的重点是连接器、它们的行为和它们的组成,而不是通过它们连接、通信和合作的实体Reo中每个连接器的行为都对实体施加了特定的协调模式通过连接器执行正常I/O操作,而不需要知道这些实体。这使得Reo成为一种强大的Reo中的每个连接器依次由更简单的连接器组成,这些连接器最终由基本通道组成。组件实例以及通道在Reo中可以移动Reo中通道末端的逻辑移动性允许连接器的动态重新配置,即使它们正在被组件实例使用在这方面,Reo类似于动态可重构的广义Kahn网络,如IWIM [4]和Manifold [12]。Broy这里,组件是将输入数据流转换为输出数据流的功能在这个模型中,唯一的“时间”概念来自于与相同流中的数据混合的零星的“刻度”标记。与Reo不同,在这个模型中,流/通道不能直接连接或组合在一起:它们只能存在于两个组件之间,这两个组件使用刻度线来同步它们的各种输入和输出流。这给出了一个函数(即,单向变换)对模型的支持。相比之下,Reo电路是关系型的(即,双向约束)。此外,Reo具有更一般的通道概念,允许固有的动态拓扑,并且其通道/连接器组合的概念允许,除其他外,涉及同步和同步的表达性混合的组合3.1组件Reo将组件实例视为黑盒实体。Reo假设每个组件实例包含一个或多个主动实体,其与该组件实例外部的其他实体的通信的唯一方式是通过被动数据的常规输入/输出。具体来说,被动数据的I/O排除了控制、方法调用和目标消息的传输。组件实例按照自己的时序和逻辑独立于其他组件执行其I/O操作。但是,要使这样的I/O操作成功,20F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)15组件实例也必须执行适当的匹配I/O操作。因此,当一个组件实例试图写入某个数据项时,它的输出操作会阻塞,直到它的环境接受该数据项;当一个组件实例试图读取时,它的输入操作会阻塞,直到它的环境向它提供数据项。当然,组件实例可以为它尝试执行的每个I/O操作指定一个超时,以允许它收回它的操作I/O,而不是无限期地等待它的环境来匹配它。例如,一个Unix进程可以被称为组件实例:它包含一个或多个控制线程,这些线程甚至可以在不同的物理处理器上并行运行,它的文件描述符可以被称为端口。一个组件实例本身可能由其他组件实例的集合组成,可能运行在分布式环境中因此,通过识别它们与环境交换数据的相关端口,整个系统可以被视为组件实例,抽象出它们的操作、结构、地理和实现的内部细节这个组件的概念与大多数其他模型所认为的组件不同。我们的组件本质上是活动的,不发出,也不接受方法调用。然而,任何抽象X都被替代的ArchJava [3,2],JavaBeans [20],CORBA [17],COM+ [16],etc.)总是可以包装在一层薄薄的适配器代码中,以产生我们模型中这个适配器层(其代码甚至可以机械生成)创建一个主动实体,如果需要的话,并充当中介,将组件及其环境之间交换的被动输入/输出消息转换为预期的方法调用,并由其封装的X发出。3.2渠道Reo为组件定义了许多操作,以便通过连接器(动态)组合、原子连接器是通道。在REO中,通道的概念远比它的常见解释更普遍Reo将通道定义为具有自己唯一标识的原始通信介质有两种类型的信道端:数据进入的源端和数据离开信道的宿端。一个通道必须在其两端支持一组特定的基本操作,比如I/O;除此之外,Reo对通道的行为没有任何限制。Reo甚至不坚持通道必须有一个源和一个汇,它也允许通道有两个源或两个汇。这允许在Reo中同时使用一组开放的不同通道类型,每种通道都有自己的同步、缓冲、排序、计算、数据保留/丢失等策略3.2.1渠道样本图2显示了一组基本通道类型的示例以及我们用来表示它们的图形符号。F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)1521同步同步排水FIFO有损同步同步喷口FIFO1P过滤器(P)异步漏极DFIFO 1(D)图二. 一组原始通道类型及其图形符号同步信道Sync(以实线箭头图示)具有源端和宿端。该通道保证了其两端的两个I/O操作的成功换句话说,它在其源端或在其接收端执行take操作,以确保这两个操作自动成功。SyncDrain是一个有两个源端的同步通道;它没有接收端。这意味着没有人可以从这个通道中取出任何数据。因此,输入到该通道的所有数据都将丢失。SyncDrain是一个同步通道,与Sync通道的意义完全相同:它在其两端执行两个I/O操作。在这种情况下,它们必须都是写操作,并且SyncDrain会根据需要阻止这两个操作中的任何一个,以确保它们自动成功FIFO是一种异步通道,具有一个源端和一个接收端,并具有一个无界缓冲器来包含数据。它的缓冲器最初是空的。对于无界缓冲器,其源端的写操作总是成功,将其数据放置在但是,对于非空缓冲器,此通道的接收端上的接收成功,并删除缓冲器中最旧的数据项。当缓冲器为空时,此通道的接收端上的take操作将阻塞,等待缓冲器的状态更改。LossySync是一个同步通道,其行为与Sync通道非常相似。就像Sync通道一样,LossySync的接收端上的take操作会阻塞,直到在其源端上执行写入操作与Sync通道的情况不同,LossySync的源端上的所有写入操作立即成功:如果在其接收端上存在挂起的take,则写入的数据项否则,写入操作成功,但写入的数据项丢失。一个同步的spout,SyncSpout,只能同步地从两端处理数据项。它通过两端产生的实际值是不确定的。FIFO 1是一个异步通道,有一个源端和一个接收端,以及一个有界缓冲器,最多只能包含1个数据项。它的缓冲器最初是空的。对于空缓冲器,其源端的写操作成功并填充缓冲器。对于非空缓冲器,此通道的接收端上的take否则,I/O操作将阻塞,等待缓冲器的状态发生变化。FIFO 1(D)是FIFO 1通道的变体,其缓冲器最初包含数据项D。过滤器(P)通道是具有源端和接收端的同步通道,其在创建时将模式P作为参数。它的行为类似于同步通道,除了只有那些与模式P匹配的数据项才能真正22F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)15其他人总是被它的源头接受,但很快就失去了。异步漏极AsynchDrain是SyncDrain的对偶:它允许两端的两个写操作一次只成功一个,即,永远不会同时在一起。3.3节点节点是Reo中的一个重要概念。不要与位置或组件混淆,节点是一个逻辑结构,表示一组通道末端重合的基本拓扑属性,这对数据在这些通道末端之间和通过这些通道末端的流动具有特定的影响a b c d e图三. 接收节点、源节点和混合节点在节点A上重合的信道端的集合被不联合地划分为集合Src(A)和Snk(A),分别表示在A上重合的源信道端和宿信道端的集合。节点A被称为源节点,如果Src(A)/=Snk(A)= 通常在一个标识中,A被称为一个sinknod,如果Src(A)=Snk(A)/=。如果Src(A)/=0,则A节点称为混合节点 ∧ Snk(A)/=0。图3.a和b分别示出了具有两个和三个重合通道端的汇节点。图3.c和d分别示出了具有两个和三个重合通道端的源节点图3.e显示了一个混合节点,其中三个汇点和两个源通道端重合。Reo的表现力源于其节点的行为Reo提供的操作使组件能够连接到源节点和接收节点并仅在源节点和接收节点上执行I/O;组件不能连接到混合节点、从混合节点读取或写入混合节点。一次最多只能将一个组件连接到一个(源或宿)节点。组件可以将数据项写入它所连接的源节点。仅当节点上的所有(源)通道末端都接受数据项时,写入操作才成功,在这种情况下,数据项将透明地写入每个源在节点上结束重合。因此,源节点充当复制器。 的部件可以通过破坏性(取)和非破坏性(读)输入操作从其连接到的汇聚节点获得数据项。只有当至少一个(汇)信道端在节点上重合或包含合适的数据项时,take操作才成功;如果多个重合信道端包含合适的数据项,则不确定地选择一个因此,汇聚节点充当非确定性合并器。混合节点是一个独立的数据项适合选择F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)1523在迭代中,只有当它可以被在混合节点上重合的所有源通道末端接受时。3.4连接器连接器是以节点和边的图形组织的一组通道末端,使得:(i) 零个或多个通道末端在每个节点上重合(ii) 每一个通道末端都恰好在一个节点上重合。(iii) 当且仅当存在一端与两个节点重合的通道时,因此,每个通道表示一个具有两个节点的(简单)连接器。在Reo中,更复杂的连接器是使用其join操作从更简单的连接器中构造出来的。连接两个节点会破坏这两个节点,并生成一个新节点,在该节点上,它们的所有重合通道端点都重合。这种单一操作允许构建任意复杂的连接器,包括从用户定义的通道类型的开放式分类中选择的任何通道组合连接器的语义被定义为其(1)组成通道和(2)节点的语义的组合。 通道的语义由提供通道的用户定义。Reo定义了其三种类型节点的语义,如上所述。4通过连接器进行在本节中,我们将展示如何通过通道组合在Reo中构建协调连接器电路。我们从几个简单的例子开始,然后是一些重要的、通用的连接器。然后,我们考虑第2节的时间-温度-显示示例的更一般的版本,并构建用于其协调的连接器电路。ab e c一d a b,e,cd一个cgh,f,i jbb cdB CBC一a b c dae f g见图4。 Reo中的连接器电路示例O测序仪测序仪F24F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)154.1写入提示调节器考虑图4.a中的连接器,它由三个通道ab、cd和ef组成。通道ab和cd为Sync类型,而ef为SyncDrain类型。这个连接器展示了一种最基本的外生协调形式:从a到d的数据项的数量与在f上成功的写操作的数量相同。连接到f的组件实例可以通过它在f上执行的写操作的定时和数量来计数和调节两个节点a和d之间的数据的吞吐量。 调节和/或计数通过f的数据项的数量的实体不需要知道关于写入a和/或消费来自b的数据项的实体的任何事情,也不需要知道其写入动作实际上调节该数据流。通过a和d通信的两个实体不需要知道他们彼此通信的事实,也不知道他们的通信量由第三方实体在f处调节和/或测量。4.2栅栏同步器我们可以在写提示调节器的基础上构建屏障同步连接器,如图4. b所示。四个通道ab、cd、gh和ij均为Sync类型。SyncDrain通道ef确保数据项从a传递到d仅与数据项从g传递到j同时(反之亦然)。这简单的屏障同步连接器可以简单地扩展到任意数量的对,如图4.c所示4.3订购图4.d中的连接器由三个通道组成:ab、ac和bc。通道ab和ac分别为SyncDrain和Sync。通道bc的类型为FIFO 1。 该连接器的行为可以被视为对写入a和b直到c的数据项的顺序施加顺序:通过对c的连续读取操作获得的数据项包括写入a的第一个数据项,随后是写入b的第一个数据项,随后是写入a的第二个数据项,随后是写入b的第二个数据项,等等。∗连接器可以总结为c=(ab),这意味着出现在c中的值由零个或多个重复的值对组成,以该顺序写入a和b4.4测序仪考虑图4.e中的连接器。封闭的框表示这个连接器的细节被抽象掉了,它只提供了四个节点其他实体(连接器和/或组件实例)(在本例中)要从中读取的通道端点a、b、c和d的值。 在这个连接器中,我们有四个Sync、一个初始化的FIFO 1和三个连接在一起的FIFO 1通道。初始化的FIFO 1通道是最左边的通道,并且被初始化为在其缓冲器中具有数据项F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)1525如在表示其缓冲器的框中存在符号“O“所指示的此数据项的实际值无关紧要。节点(具有通道末端)a、b、c和d上的读取操作只能以严格的从左到右的顺序成功。此连接器实现了一个通用的排序协议:我们可以根据需要通过插入更多(或更少)Sync和FIFO 1通道对来参数化一在出来B C(一)(b)第(1)款图五. 独占路由器和移位有损FIFO 14.5专用路由器图5.a显示了专用路由器连接器的Reo网络。一个到达输入端口A的数据项只能通过输出端口B或C中的一个端口,这取决于哪一个端口准备使用它。如果两个输出端口都准备使用一个数据项,那么其中一个端口将被不确定地选择。输入数据永远不会复制到多个输出端口。图5.a显示,专用路由器由两个LossySync通道、一个SyncDrain通道和五个Sync通道组成。参见[7]以获得对该连接器的语义的更正式的处理4.6移位有损FIFO 1图5.b显示了一个Reo网络,它的连接器表现为一个具有移位丢失策略的有损FIFO 1通道。此通道称为移位有损FIFO 1(ShiftLossyFIFO 1)。它的行为与正常的FIFO 1通道相同,除了如果其缓冲器已满,则新数据项的到达会删除其缓冲器中的现有数据项为新来的人腾出地方因此,该通道实现了“移位丢失策略”,以支持最新到达的内容来丢失其缓冲器中最旧的内容。图5.b中的连接器由一个专用路由器(如图5.a所示)、一个初始满FIFO 1通道、两个初始空FIFO 1通道和四个Sync通道组成。参见[7]以获得对该连接器的语义的更正式的处理。图5.b中的移位有损FIFO 1电路在构造更复杂的电路时确实经常用作连接器,因此有必要使用特殊的图形符号将其指定为速记符。图6显示了一个电路专用路由器O26F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)15它使用了两个移位有损FIFO 1的实例。我们用来表示此电路的图形符号有意与常规FIFO 1通道的图形符号相似,以暗示这两个连接器的行为相似。如图6所示,移位有损FIFO 1“通道”的图形符号具有半虚线框,而不是常规FIFO 1通道的实线框:该信道的缓冲器用虚线表示,以表明它丢失了较旧的值来为新到达者腾出空间,即,它就会转向失败4.7可变图6中的Reo电路实现了数据流变量的行为。 它使用图5.b所示的移位有损FIFO 1最初,其移位有损FIFO 1通道的缓冲器是空的,因此其输出节点上的初始数据传输暂停。无论缓冲器的状态如何,或者数据是否可以通过其输出节点分发,对其输入节点的每次写入总是成功并重置其两个缓冲器以包含新数据项。每次通过其输出节点分配一个值时,该值的副本都会该电路它可以用作数据流变量。在出来见图6。 数据流变量图6中的可变电路也经常用作构造更复杂电路的连接器。因此,它是有意义的,有一个简短的图形符号来指定它以及.图7显示了在两个连接器中使用的变量的3个实例。我们的变量符号类似于常规FIFO 1通道的符号,不同之处在于我们使用一个圆形框来表示其缓冲器:圆形框暗示了变量电路的循环行为,它记住它获得或分发的最后一个数据项。4.8时间和温度显示图7.a显示了由两个组件组成的系统,这两个组件通过图6中呈现的可变通道连接。标记为Clock和Display的两个组件是图1中C和D组件的概括。Clock组件周期性地产生一个文本字符串来通知当前时间。Display组件定期读取和使用文本字符串并显示它。不像F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)1527时钟显示Thermo显示时钟测序仪对于图1的C和D分量,我们不对时钟和显示的周期以及它们的比率做任何假设。(a)(b)第(1)款见图7。 一种时间/温度显示系统可变通道提供时钟和显示器的时间解耦,同时促进它们的无论显示器的状态如何,时钟总是可以将其当前时间写入通道,这可能会丢失其旧内容(如果有的话)以适应新值。如所希望的那样频繁,显示器可以读取频道的当前内容(如果有的话),其将不早于时间分辨率(即,时钟的更新周期)。如果显示器的周期比时钟快,则显示器将再次读取其上次读取的值。如果时钟的周期比显示器的周期快,它可能会在显示器消耗旧值之前产生新值。变量通道允许新值覆盖旧值。因此,图7.a中的系统周期性地显示当前时间。图7.b显示了图1.d中的时间-温度-显示系统及其相应的Reo电路。图中标有Thermo的盒子是一个温度计。类似于时钟,它是图1中T分量的概括,具有自己的任意周期。其连接器电路支持通信以及时钟和温度计部件与系统的其余部分的时间解耦显示组件的输入由图4. e中所示的双节点型序列器连接器调节。因此,图7.b中的系统交替显示当前时间和温度。关于这个系统的有趣之处在于,所涉及的组件中没有一个从组件外部)通过Reo连接器来实现这种协作行为。这种28F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)155表现力图4.f显示了我们的序列器的实用程序的一个简单例子。此图中的连接器由一个双节点序列器、一对Sync通道和一个SyncDrain通道组成,它们分别将序列器的每个节点连接到节点a和c以及节点b和c。图4.f中的连接器是另一种连接器∗对于协调模式c=(ab),尽管在该连接器的行为和图4.d中的行为。见[5]详细内容。不费吹灰之力就能看出图4.g中的连接器对应于∗元正则表达式c=(aab)。 图4.f和g显示了我们可以多么容易地使用适当大小的序列器构建连接器,这些连接器外源地施加对应于由代表I/O操作的原子组成的任何“元字”的Kleene闭包的协调模式Reo中的通道组合是构建连接器的一种非常强大的机制。例如,可以表示为组件实例执行的I/O操作上的(元级)正则表达式的外生协调模式可以在Reo中由一个只有五个原始通道类型的小集合组成。图灵机由一个有限状态自动机和一个无界磁带组成。因为一个无界的磁带可以用两个无界的FIFO通道,将FIFO添加到上述通道类型集合中使Reo Turing中的通道组合完整。6抽象行为类型抽象行为类型(Abstract Behavior Type,ABT)的概念在[6]中被引入,并被提出作为组件及其组合的适当基础模型ABT模型支持比抽象数据类型(ADT)的操作接口更松散的耦合,并且本质上服从于外部协调。这两个属性对于组件行为和交互组合的模型来说都是非常理想的(如果不是必需的)属性。ABT将抽象行为定义为通过一组“接触点”(例如,组件实例的端口),而不指定关于可用于实现这种行为的操作的任何细节,或者那些操作可操纵以实现该行为的数据类型。这种定义与ADT的定义类似,ADT从指令和数据结构中抽象出来,这些指令和数据结构可用于实现它为数据类型定义的操作接口。相比之下,ABT根据对实体的可观察输入/输出的约束来定义行为,而没有说明如何实现它。有几种不同的方法来形式化ABT的概念。比如说,约束自动机[7],以建立ABT的操作模型原则上,过程[3]事实上,Reo更自然地通过无限流对有限行为进行建模(见第6节)。因此,这组原始通道的组合实际上产生了ω-正则表达式的等价物,而不是(有限)正则表达式。因此,例如,图4.g中连接器的行为更准确地对应于元正则表达式c=(aab)ω,而不是c=(aab)ω。F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)1529+演算、Petri网、逻辑表达式或标记转换系统也可用于描述可观测量的输入到输出序列的变换。为了强调Reo将交互视为约束的观点,我们更喜欢将ABT视为关系/约束的形式化,而不是转换。基于流演算的ABT的共代数模型[28],如下所述,特别适合于此目的。6.1ABT的关系观[6]中提出的形式化将ABT定义为一组定时数据流上的(最大)关系,这明确地强调了ABT模型的关系方面,并抽象出其实现的底层操作语义的任何暗示这有助于关注行为规范及其组成,而不是关注可用于实现展示此类行为及其交互的实体的操作。流(在A上)是某个集合A的元素的无限序列。A上所有流的集合记为Aω。在一组(未解释的)数据项D上的DS=Dω中的流被称为数据流,并且通常被表示为α、β、γ等。α(0),α(1),α(2),. 表示第一个、第二个、第三个等等,流α的元素。 我们使用后缀遵循流演算的惯例[28],流上的头部和尾部的众所周知的操作被称为初始值和导数:流的初始值α(即,它的头)是α(0),它的(第一)导数(即,其尾部)表示为αJ。流上的关系运算符成对地应用于它们各自的元素,例如,α≥β表示α(0)≥β(0),α(1)≥β(1),α(2)≥β(2),. .TS= IRω中的约束流在正实数上表示mo-时间段被称为时间流,并且通常被表示为a、b、c等。为了有资格作为时间流,实数流a必须是(1)严格递增的,即,约束AAJ必须保持;以及(2)渐进的,即,<对任意N≥0,必有一个指数n≥0使得a(n)> N.我们使用正实数而不是自然数来表示时间,因为正如在时态逻辑的世界中所观察到的那样,实数诱导了更抽象的稠密时间而不是自然数所强加的离散时间的具体地说,我们有时需要在任何有界时间间隔内的有限多个步骤来证明某些ABT等价性(参见,例如,[8])。这在离散时间模型中显然是不可能的。在我们的ABT模型中,“时间矩”的实际值是无关紧要的;只有它们的相对顺序才是重要的,必须保留。使用密集时间允许我们局部打破严格的数值相等(即,在保持事件的原子性的情况下,任意地(不确定性)。一个时间数据流是一对孪生流α,在TDS=DS×TS中的α由一个数据流α∈DS和一个时间流a∈TS组成,其解释是对所有i≥0,数据项α(i)的输入/输出发生在30F. Arbab/Electronic Notes in Theoretical Computer Science 160(2006)15a b a.b a b.如果两个定时数据流的相应元素相等,则它们相等,即,如果两个定时数据流的相应元素相等,则两个定时数据流相等,即,如果两个定时数据流的相应元素相等,则两个定时数据流相等,即,如果两个定时数据流的相应元素相等,则两个定时数据流相等。ABT在时间数据流方面的形式化为Reo的形式语义提供了一个简单而强大的框架。定时数据流被用来模拟通过通道末端的数据流。4信道本身只是与其两端相关联的两个定时数据流之间的(二元)关系。更复杂的连接器只是n个定时数据流之间的n元关系,每个表示通过连接器的(非隐藏)n个节点之一的数据流。最简单的通道Sync被正式定义为以下关系:α,a该等式表明,进入同步通道的每个数据项都以完全相同的顺序输出。此外,每个数据项的到达和离开时间是相同的:在通道中没有缓冲器用于数据项,逗留不了多久异步FIFO通道定义为以下关系:α,a<与同步通道一样,每个数据项进入FIFO通道,以完全相同的顺序(α=β)从FIFO通道出来。然而,每个数据项的离开时间必须在其到达时间(a b)之后:每个数据项必须在FIFO通道的缓冲器中花费一些非零长度的时间异步FIFO 1通道类似于FIFO:α,a同样,所有进入的东西都以同样的顺序出来(α=β)。 但是,对于所有i≥0,不仅每个数据项α(i)=β(i)的离开时间b(i)必须在其到达时间(a(i) b(0)6.2ABT组合物因为ABT是一个关系,所以两个ABT可以通过类似于关系数据库中的连接操作的关系组合来组合以产生另一个ABT。这产生了一个简单而强大的形式主义,用于将复杂行为指定为简单行为的组合将简单的交互行为组合成非平凡行为,例如上述示例中的Reo电路,可以表示为ABT组合[6]。我们的形式主义的关系(而不是功能)性质允许ABT的组合物相互影响和相互约束,产生它们的集体行为,类似于约束满足问题中的一组约束如何分解为解决方案。使用共归纳作为主要的定义和证明原则来推理数据流和时间流,可以简单地组合构建ABT,代表许多不同的通用协调方案,
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功