首页 / 专利库 / 制造过程 / 原型 / 对于多核芯片建立正式验证的并行软件的TICC-范例

对于多核芯片建立正式验证的并行软件的TICC-范例

阅读:611发布:2022-10-16

专利汇可以提供对于多核芯片建立正式验证的并行软件的TICC-范例专利检索,专利查询,专利分析的服务。并且本 发明 示教了实施在分布式和共享 存储器 多核芯片中高效运行的正式验证的大量并行程序的方式。允许从被称为蜂窝的并行 软件 部件中的初始交互的概要语句开发程序,并且将它们逐渐地改进到它们的最终实施。在改进的每个阶段,从实施中自动得出计算中的事件的模式的正式描述。该正式描述用于两个目的:一个目的是证明正确性、定时、进展、相互排他以及避免死 锁 /活锁等;另一个目的是自动地将持续并行监控应用的自我 监控系统 (SMS)并入每个应用,而不干扰它的定时,以识别和报告性能中的错误、未决的错误以及关键行为的模式。本发明还示教了组织用于多处理器的共享存储器的方式,其最小化存储器干扰、保护数据并且提高执行效率。,下面是对于多核芯片建立正式验证的并行软件的TICC-范例专利的具体信息内容。

TM
1.一种基于集成计算和通信技术TICC 的修改版本的集成并行程序开发和执行平台TM
ITCC -Ppde,美国专利US 7,210,145B2,发明人Chitoor V.Srinivasan教导了以下方法:
TM
方法(1.1),对应用A实施并行计算机程序:ITCC -Ppde提供从称作蜂窝的概要软件计算机单元间的交互的概要规范开始的对应用A实施并行计算机程序的方法,这组蜂窝和与其相关联的所有交互规范一起作为应用A的并行程序的概要设计,称作A:DESIGN(),逐渐将A:DESIGN()中的蜂窝和交互改进到它们的最终完整的改进实施,在改进的任何阶段应用A中的并行计算机程序被称作A:implementation(),A:implementation()中的所有蜂窝的集合被称作A:cells(),A:cells()中的每个蜂窝仅通过消息交换与A:cells()中的其它蜂窝交互,每个蜂窝运行在自身专用的硬件CPU(硬件计算单元)中,该CPU不被A:cells()中的任何其他蜂窝共享;
TM TM
方法(1.2),对于TICC -Ppde唯一的消息交换:在TICC 并行编程范例与所有其他并TM
行编程范例之间的差别在于TICC -Ppde管理A:cells()中的蜂窝间的点对点和组对组通信的方法,使得每个蜂窝自身能与在A:implementation()中发生的所有其他这样的消息交互并行地传递它对它们期望的目的地蜂窝计算的消息,允许以最多几百纳秒级的可精密预测的等待时间将几乎即时保证异步的已同步消息发送到期望的目的地,假设2千兆CPU且没有消息调度或同步会话的需求;
方法(1.3),形式验证A:implementation():在改进的各个阶段,包括A:DESIGN()阶段TM
中,TICC -Ppde自动产生直到改进阶段的基于事件的计算模型,该模型被称作ALLEOPs(允许的事件发生模式),A:DESIGN()的ALLEOPs被称作A:designALLEOPS并且在对于该改TM
进的任何阶段的A:implementation()的ALLEOPs被称作A:ALLEOPS(),TICC -Ppde使用A:designALLEOPS和A:ALLEOPS()来通过形式验证使在改进的任何阶段的设计和实施有TM
效,形式验证的有效标准由用户指定作为因果时态逻辑(CTL)语言中的断言,TICC -Ppde使用A:designALLEOPS或A:ALLEOPS()来查找用户给出的CTL断言的有效性证明,在搜索证明期间与用户交互,用户在必要时提供额外的CTL断言来引导证明搜索;
TM
方法(1.4),通过使用TICC -Ppde SMS(自监视系统)的自动自监视来运行全面改进TM
的A:implementation():与应用A并行地,A:ALLEOPS()还被TICC -Ppde用于全面改进的A:implementation()的自动动态监视,用于A在其使用期限内运行时进行校正操作,以与应用A中发生的计算事件的定时几乎没有干扰地运行,识别并报告错误、未决错误以及先TM
验定义的警报事件模式的发生,该动态监视由TICC -Ppde的通信机制中内建的SMS(自监视系统)自动完成;
(方法1.5),在大规模并行多计算机硬件系统中运行可任 意升级的
A:implementation():在任意大量CPU(硬件计算单元)中以80%至100%的效率运行可升级A:implementation(),这样的CPU为,
(i)在具有32或更多个CPU的SMP(共享存储器多处理器)中的CPU,SMP中的CPU使TM
用A:implementation()中安装的TICC -Ppde的软件共享存储器通信路径(sm路径)彼此通信,或
(ii)在计算节点是具有32或更多个CPU的任意DMP(分布式存储器多处理器)中的TM
CPU,DMP中的SMP使用TICC -Ppde的硬件分布式存储器通信路径(dm路径)来彼此通信,TM
dm路径嵌入在称作TICCNET 的局域网中,或
(iii)在作为包含32或更多个CPU的SMP而实施的任意多核芯片中的CPU,该芯片中的所有CPU通过A:implementation()中安装的软件sm路径来彼此通信,或
(iv)在作为包含任意但固定数目的SMP的DMP而实施的多核芯片中的CPU,每个SMP包含16至64个CPU,每个SMP具有自身私有的共享存储器,芯片中的不同SMP使用也与该TM
芯片集成的TICCNET 中的dm路径来彼此通信,或
(v)SCG(超级计算网)中的CPU,SCG中的每个计算节点是SMP或DMP,SCG包含任意但TM
固定数目的这样的SMP和DMP,SCG中的SMP和DMP由局域TICCNET 中的dm路径互连。
方法(1.6),使用相同的实施方法构建用于具有内置SMS(自监视系统)的实时信息物理并行软件系统的可升级CPPSS:implementation(),该实施方法包括概要设计、连续的改进、通过在改进的每个阶段的正式验证的有效化、以及使用SMS的自动运行时间自监视;
方法(1.7)使用相同的实施方法构建用于具有内置SMS(自监视系统)的异步硬件系统或嵌入式系统,该实施方法包括概要设计、连续的改进、通过在改进的每个阶段的正式验证的有效化、以及使用SMS的自动运行时间自监视;
TM
2.如权利要求1所述的方法,进一步包括用于指定A:DESIGN()并构建A:TICC -网络的以下方法:
方法(2.1),指定A:DESIGN():A:DESIGN()是A:implementation()中的并行计算的控制结构的概要规范,A:DESIGN()隐含地指定了应用A中的所有消息异步和调整以及在A执行的计算中出现的动作和通信事件的因果链,A:DESIGN()具有三个概要软件部件,(i)TM TM
A:TICC -network(),(ii)A:TIPS()和(iii)A:CIPS(),这三个部件和A:TICC -network()中的路径描述如下:
TM
(i)A:TICC -network()(此后称为网络)是具有节点和分支的图表,分支与节点互连,图表的节点是A:implementation()中的概要蜂窝且图表中的分支是与附接到网络中的蜂窝的软件通信端口(此后称为端口)互连的概要通信路径(此后称为路径),网络中的所有蜂窝的集合称作A:cells(),网络中的所有端口的集合称作A:ports(),网络中的所有路径的集合称为A:pathways(),A:cells()中的每个蜂窝在其自身分配到的硬件CPU(计算单元)中试图与A:cells()中的所有其他蜂窝并行运行,网络中的每个蜂窝试图通过与网络中的其他蜂窝交换信息来执行计算,所述其他蜂窝通过端口经由连接到这些端口的路径而附接到该蜂窝,这里对蜂窝可以具有的端口的数目没有限制但没有端口附接到多于一个蜂窝,网络中的一些蜂窝从网络操作的环境接收输入,该环境自身在网络中由环境蜂窝代表,(ii)A:pathways:路径将附接到网络中的不同蜂窝的软件端口互连,端口由蜂窝使用来经由连接到它们的路径发送和接收消息,每个端口附接到仅仅一个唯一的称作该端口的父蜂窝的蜂窝,由此防止A:cells()中的蜂窝对端口的争用,每个端口连接到实际上一条路径,由此防止在并行消息传递期间消息干扰,许多端口连接到相同路径使得能进行组对组通信,每个端口连接到与不同蜂窝附接的路径,端口组是与相同路径连接的一个或多个端口的组,连接到相同蜂窝的两个端口不在端口组中,两个不同的端口组不包含共同的端口,路径使得能进行在连接到路径的端口组中的组对组通信,对于端口组可以经由连接到该端口组的自闭合路径发送消息到自身,在所有这样的组对组消息交换中,消息发送端口组总是将调整的联合消息从端口组中的端口的父蜂窝发送到消息接收端口组,来自消息发送端口-组的这样的联合消息总是与消息接收端口组并行地调整并同步传递,组对组通信中消息转发的调整和同步由路径中嵌入的代理自动完成,
(iii)A:TIPS():蜂窝间的交互由概要线程交互原语(TIP)指定,每个TIP提供关于蜂窝如何感应传递到其任意一个端口的消息、蜂窝如何处理传递的消息并响应传递的消息的TM
概要规范,对于TIP可以产生对于A:TICC -network()中的其他蜂窝的计算,在计算之前从这些其他蜂窝收集响应并将该响应消息发送回去,A:cells()中的每个蜂窝的每个端口具有对其定义的概要TIP,仅仅五种不同类型的TIP对于实施任何并行程序是必要的,蜂窝在其任一个端口感应消息总是使该蜂窝通过执行在该端口定义的全面改进的TIP、扩展TM TM
A:TICC -network()中的几个其他蜂窝的计算、必要时收集来自A:TICC -network()中的蜂窝的响应来计算响应消息,从而处理并响应该消息而不失败,传递到蜂窝的每个端口的每个消息由该蜂窝不失败地感应,由蜂窝在其任何一个端口接收到的每个服务请求消息被该蜂窝不失败地响应,蜂窝执行的计算由此由消息接收驱动,A:DESIGN()中定义的所有概要TIP的集合称作A:TIPS(),
(iv)通过循环地执行在附接到C的端口定义的TIP而由每个蜂窝C执行计算,在C的端口定义的TIP称作C:TIPS(),由每个蜂窝执行的循环计算再次由蜂窝交互协议(CIP)以概要形式指定,对蜂窝C定义的CIP称作C:CIP(),且对A:DESIGN()中的蜂窝定义的所有CIP的集合称作A:CIPS(),
至此为止所有规范都是概要的,概要的规范仅仅识别A:DESIGN()中使用的方法和条件的位置占有者,A:DESIGN()还隐含地指定了在A:cells()中的蜂窝间的消息交换的调整和同步,以及在应用A运行时可能在应用A中发生的动作事件和通信事件的因果链;
方法(2.3),sm路径的结构:传递消息的每个sm路径(共享存储器路径)S具有S中嵌入的称作虚拟存储器M的唯一软件存储部件,sm路径中嵌入的该虚拟存储器M称作S.vM,没有两个不同的sm路径使用相同的虚拟存储器,虚拟存储器在定义sm路径期间被声明,真实的存储器在编译或运行时间期间被分配给虚拟存储器,S.vM保存被传递到连接到S的一个或多个端口的端口-组中的端口的消息,S.vM还保存由连接到S的端口的父蜂窝写入的消息,此外,S.vM保存计算机程序代码来处理S.vM中的消息并通过连接到S的端口的父蜂窝将新消息写入到S.vM中,每个S.vM具有与其附接的软件代理,没有代理附接到多于一个的虚拟存储器,附接到S的所有代理的集合称作S.agents,S.agents中的代理被S用来路由、调整和同步经由路径S的消息转发以增强消息的安全性,并且被S用来驱动运行TM
ITCC -Ppde的SMS(自监视系统)的机制,每个端口通过连接到与S.vM附接的一个唯一代理而连接到S,与S.agents中的任一代理连接的所有端口构成端口-组pG,对于端口-组可以包含仅仅一个端口,pG中的不同端口附接到不同蜂窝,在任何端口-组中没有相同蜂窝的两个端口,不同端口-组连接到S.agents中的不同代理,C.p是pG中的附接到蜂窝C的端口,连接到C.p的路径S称作C.p.pathway,C.p.pathway=S,并且C.p.pathway的虚拟存储器称作C.p.vM,C.p.vM=S.vM=Pg.vM,pG中的所有端口具有与其相关联的相同虚拟存储器,没有两条路径曾连接到相同端口,与相同蜂窝附接的两个端口C.p和C.q不连接到相同路径除非[C.p,C.q]属于被称作蜂窝的端口矢量的端口的矢量,每个端口C.p仅仅对其父蜂窝C给出了对pG.Vm=C.p.vM中的数据和方法的访问权,A:cells()中除了连接到路径S的端口的父蜂窝之外的其他蜂窝不能访问S.vM中的数据和方法,路径中交换信号的部件被彼此调谐,该调谐使得路径中的各部件能总是准备好接收和立即响应由路径中的其他部件发送到它的信号,由此很大程度地加速了消息转发,每个端口C.p在建立连接时自动调谐到与其连接的代理,与C.p.vM附接的代理和交换的信号同时也被彼此调谐,同时在C.p被调谐到与C.p附接的代理时C.p及其父蜂窝C被调谐到C.p.vM,在路径连接到其端口时这些调谐自动发生,S:ports()的联合即连接到S的所有端口的集合、以及S:agents即S和S.vM中的所有代理的集合称作路径S的部件,sm路径中的所有部件是软件部件,没有两个sm路径曾共享共同的任意部件,由此消除同时并行消息转发期间的消息干扰,具体实施方式中的图1、17、19和23分别示出了点对点、自我闭环、组对组以及环路径,具体实施方式中的图1和3描述了不具有虚拟存储器的sm路径,这样的sm路径仅仅交换信号而非TM TM
消息,ITCC -Ppde提供用于在A:TICC -network()中安装并修改sm路径的方法;
TM
方法(2.4),dm路径的结构:在具有简要描述的附图的列表中的图24中描述了TICC中的dm路径(分布式存储器路径)Di的结构,0≤i<N,Di连接到SMP中的端口组pGi0,分布式计算网络的SMP[j]由n个SMP构成,0≤j<N,SMP[j]中的指数j是pGi0中的下标i和0的函数,写作j=f(i,0),SMP[j]由此被写作SMP[f(i,0)],路径Di将SMP[f(i,0)]中的端口组pGi0连接到相同分布式计算网络的其他不同SMP即SMP[f(i,k)]中的其他端口组pGik,1≤k<mi<n,f(i,k)≠f(i,0),每个SMP即SMP[f(i,k)],0≤j<mi,在其本地共享存储器中具有虚拟存储器pGik.vm,dm路径Di中的所有虚拟存储器的集合称作Di.vns,并且虚拟存储器pGik.vm也称作Di.vms[k],Di.vms[k]={Di.vm[k]|0≤k<mi},存在附接到每个虚拟存储器Di.vms[k]的两个虚拟存储器pGik.vm,a0[i,k]和a1[i,k],a0[i,k]是软件代理且a1[i,k]是硬件代理,pGik中的所有端口连接并调谐到软件代理a0[i,k],a1[i,k]连接到硬件信号和Di的数据线,由此硬件信号和数据线将如所述图24中所示的所有代理a1[i,k]互连,0≤j<mi,从而将SMP[f(i,0)]中的路径片段[pGi0<->a0[i,k]<->a1[i,k]]链接到所有路径片段{a1[i,k]<->a0[i,k]<->pGi0|i≤k<mi}的集合,片段[pGi0<->a0[i,k]<->a1[i,k]]称作消息发送探测器,片段{a1[i,k]<->a0[i,k]<->pGi0|i≤k<mi}称作TM
消息接收探测器,每个SMP具有多个消息发送和消息接收探测器来将其连接到TICCNET ,得到的dm路径写为
Di=[pGi0<->a0[i,0]<->a1[i,k]<-><->{[a1[i,k]<->a0[i,k]<->pGik]|1≤k<mi}]端口组pGi0通过探测器[pGi0<->a0[i,0]<->a1[i,k]]并经由连接到a1[i,0]的硬件信号和数据线将消息并行地广播到集合{[a1[i,k]<->a0[i,k]<->pGik]|1≤k<mi}中的消息接收探测器中的代理a1[i,k],消息接收探测器将该消息同时传递到每个端口组pGik,端口组{pGik|1≤k<mi}将响应消息以复用模式一个接一个顺序地发送回pGi0,没有两条dm路TM
径共享共同的部件,在TICCNET 中存在数千个这样的不同dm路径Di,0≤i<n>1000,TM TM
TICCNET 提供动态安装和拆除这样的dm路径的机制,每个安装的dm路径保留在TICCNETTM
中直到其被拆除并安装了新路径,TICCNET 中的所有dm路径能无彼此干扰地同时并行地TM
交换信息,TICCNET 提供具有500纳秒级的等待时间加信号传送时间的确保高速并行消息TM
传递,ITCC -Ppde提供在A:TICCTM-network()中安装dm路径、拆除已安装路径和/或修改路径的方法,
在应用A中在其所有sm路径和dm路径中的所有代理的集合称作A:agents(),应用A中的所有虚拟存储器的集合称作A:virtualMemories(),应用A中的所有路径的集合c称作A:pathways();
方法(2.5),虚拟存储器的结构:每个虚拟存储器M包含四个部件,(i)读存储器M.rd,(ii)写存储器M.wr,(iii)执行存储器M.ex,以及(iv)中间结果存储器M.scp,对于具有虚拟存储器C.p.vM=M的C.p.pathway,C.p.rd=M.rd,C.p.wr=M.wr,C.p.ex=M.ex,C.p.scp=M.scp,C.p.rd被C.p的父蜂窝C使用来读取通过C.p.pathway传递到C.p的消息,C.p.wr被C使用来写入新消息并经由C.p.pathway将新消息发送出去,M的读/写存储器在消息传递前切换,C.p.ex被C使用来运行处理C.p.rd和C.p.wr中的消息并将消息写入C.p.wr的方法,对于端口组pG中附接到不同父蜂窝Ci和Cj的任何两个不同端口Ci.p和Cj.p,Ci.p.vM=Cj.p.vM=pG.vM=M,M是该端口组中所有端口的共同虚拟存储器,Cj.p.scp==pG.scp=M.scp是pG中的端口的父蜂窝使用的共同的中间结果存储器,M.scp由pG中所有端口Ci.p的父蜂窝Ci使用来在并行地处理M中的消息时彼此交换数据,以调整它们各自的计算并发送回联合响应,M对M中驻留的所有计算机程序代码提供TM
执行环境,ITCC -Ppde提供用于在路径中安装虚拟存储器并修改它们的方法;
方法(2.6),CCP和协议:A:ports()中的每个端口C.p和每条路径C.p.pathway具有TM
对其定义的称作C.p.protocol的软件协议,每个C.p.protocol包含对于ITCC -Ppde唯一的、在具体实施方式的部分1.1中引入的称作CCP(因果通信原语)的特殊编程基元的级联,每个CCP具有X:x→Y的形式,X和Y是蜂窝、端口或路径中的代理,x是开始或结束信号,CCP的级联具有X:x→Y:y→Z的形式,X、Y和Z是相同路径中的所有部件且x、y是信号,对于每种类型的信号可以具有对其定义的子类型,C.p.protocol中的CCP的执行使得C.p.pathway中的部件彼此交换信号,这样交换的信号通过C.p.pathway传播最终建立上下文,所述上下文使得C.p.vM中的消息传递到也与sm路径中的相同C.p.pathway连接的期望的接收端口,所述上下文使得C.p.vM中的消息经由硬件信号和dm路径中的数据线传送到期望的接收端口组的虚拟存储器,协议中出现的CCP可以以如具体实施方式中部分1、TM
图3和4以及部分7、语句(7.1)至(7.4)中描述的其他编程语言语句,嵌入,ITCC -Ppde中的协议不包含数据声明且它们所有都包含CCP,C.p.protocol仅仅由端口C.p的父蜂窝TM TM
调用和执行,ITCC -Ppde提供预封装和编译的协议以经由能在ITCC -Ppde并行程序中使TM
用的所有类型的路径来交换消息,实施者具有责任来以与ITCC -Ppde中使用的协议定义TM
格式一致的方式仅仅定义应用A中可能必须的与众不同的协议,ITCC -Ppde提供用于定义使用CCP的协议的方法;
方法(2.7),调谐路径中的部件:C.p.pathway中连接到蜂窝C的任何端口C.p的部件交换信号以将虚拟存储器C.p.vM中的消息传递到它期望的接收者,C.p.pathway中的部件总是彼此调谐,调谐使得C.p.pathway中的部件总是准备好接收和立即响应由C.p.pathway中的其他部件发送的信号,调谐消除了对信号交换期间的同步会话的需求,由TM
此很大程度加快了消息交换,在将C.p.pathway连接到C.p时在ITCC -Ppde中自动完成将端口C.p调谐到C.p.pathway中的部件,将C.p调谐到C.p.pathway中的部件使得C.p的父蜂窝也调谐到C.p.pathway中的唯一的虚拟存储器C.p.vM,对于应用A的实施者不必调谐路径中的部件或经由路径调度或同步消息或信号交换,在TIP执行期间自动完成经由路径的调度信号交换,由协议中的CCP自动完成路径部件间的调度信号交换,由路径上的代理完成调整消息分派和同步消息传递,路径中的代理还管理用于在消息传输期间驱动TM
ITCC -Ppde的SMS并增强安全性的信号交换机制,如具体实施方式的部分7中所描述,用TM
于驱动SMS的所有调谐、调整、同步和支持是所有ITCC -Ppde协议的内置特征,在将路径安TM
装并将连接到其在A:implementation()中的各自的端口时,由ITCC -Ppde自动使所有这些能成为可能,实施者无需做任何事来实施、或调用和执行在任何应用中的任何已安装TM
路径的任何这些特征,ITCC -Ppde提供用于在概要路径中安装路径部件并将这些部件彼此调谐的方法;
方法(2.8),数据保护和并行缓冲:端口组中的每个端口C.p允许它的父蜂窝访问并使用它的虚拟存储器C.p.vM,当且仅当所述父蜂窝感应到传递到端口C.p的消息或感应到端口C.p准备好将消息发送出去,在必要时,端口矢量Cp=[C.p1,C.p2,…,C.pn]中的附接到相同父蜂窝的多个端口向父蜂窝C给出对所有虚拟存储器C.pi.vM的同时访问权,
1≤i≤n,由此端口允许他们各自的父蜂窝仅在需要时访问虚拟存储器,对于连接到路径的消息发送端口的父蜂窝和消息接收端口的父蜂窝,不可以都同时使用该路径的虚拟存储器,对于所有未连接到路径的任何父蜂窝,也不可以访问该路径的虚拟存储器,由此防止虚拟存储器中的数据被未授权地访问和使用,由此还防止虚拟存储器中的数据的损毁且保留每个虚拟存储器中数据直到所述数据被它们期望的用户使用,从而A:implementation()中的虚拟存储器提供保护的并行缓冲,支持A:implementation()中的所有异步并行通信,可以设计尺寸范围在10兆字节至1千兆字节的独立硬件共享存储器模并在编译或运行时间期间动态地将所述模块分配给虚拟存储器,仅在蜂窝的端口对它们的父蜂窝给出了对虚拟存储器的访问权时动态地将运行该蜂窝的CPU连接到虚拟存储器,这样的存储器结构对应用中的所有数据和软件提供了本质的安全性,私密性以及保护,在系统的最底层构建TM
私密性和保护,ITCC -Ppde由此提供了用于任何应用中的自动数据保护的方法;
方法(2.9),确保高速并行通信:以软件实施的CCP用25至50纳秒来在2千兆赫兹的CPU中执行,这可以将CCP实施作为CPU中的机器指令,作为机器指令实施的CCP仅用大约5纳秒来执行,经由sm路径的点对点通信要求最多仅仅6个CCP执行(包括驱动SMS的代理),经由sm路径的组对组通信根据每个端口组中的端口的数目要求用到14或更多个CCP执行,经由dm路径的组对组通信根据连接到dm路径的端口组的数目要求30或更多个CCP执行,协议执行不曾调用过在该协议自身中还未定义的任何数据、程序、处理或线程,这样的协议执行仅改变在该协议的路径中已经定义的数据而非其他,由此实际上是没有操作系统或任何其他监视系统可以调度、同步或执行任何协议的任何部分,协议执行在被执行时不曾中断,在C.p的父蜂窝C一完成将要发送的消息写入C.p.vM就仅由C不中断地执行在A:ports()中的每个端口C.p的整个协议C.p.protocol,消息传输的这样的自动立即调度、在交换信号的路径中的部件的相互调谐以及消除对异步通信中的顺序缓冲的需求使得能以最多数百纳米级的等待时间进行确保的非常高速保证瞬时异步通信,在通过2千兆赫兹CPU执行协议和CCP被实施作为机器指令时,sm路径和dm路径二者使得能进行同时异步并行消息转发,在应用中同时发生的这样的异步并行消息转发的数目仅由该应用中安装TM
的不同路径的数目限制,这些数目处于数万或更多的范围内,TICC -Ppde提供了用于确保的自动高速并行通信的方法;
方法(2.10),与每个端口组中的一个或多个端口的组对组消息交换的自动调整:端口组pG中的端口Ci.p通过共同的组对组路径连接到另一端口组qG中的不同端口Dj.q,0≤i<n≥0,0≤j<m≥0,pG.pathway≡qG.pathway,或者qG中端口的所有父蜂窝的集合D不同于pG中的端口的所有父蜂窝的结合C或者pG≡qG为真,每个Ci.p.pathway是pG.pathway中的一部分且每个Dj.q.pathway是qG.pathway≡pG.pathway中的一部分,
0≤i<n,0≤j<m,这些路径与具体实施方式的图19或17中的图示类似或者与具有简要描述的图中的图24中的图示类似,端口组pG中的总端口Ci.p的父蜂窝Ci彼此异步且并行地执行协议Ci.p.protocol以将联合服务请求消息m经由pG.pathway发送到qG中的端口Dj.q,父蜂窝Ci在相同组对组pG.pathway上对Ci.p.protocol的同时异步并行的执行是由pG.pathway中的代理自动调整的,所述代理确保正确地一次将联合服务请求消息m从pG中的端口同时异步并行地传递到qG中的每个端口,所述代理仅在端口满足对消息事先定义的安全条件时将该消息传递到该端口,所述代理还将信号发送到SMS(子监视系统)激活SMS来对经由pG.pathway传送的消息安装SMS中的消息分派和消息传递事件,组对组协议Ci.p.protocol在端口Ci.p发出消息m后立即定端口Ci.p,由此防止pG中的每个Ci.p发出第二业务请求消息,仅在Ci.p从qG中的所有Dj.q接收到对服务请求消息的联合响应消息m’时才允许pG中的每个Ci.p发送第二业务请求消息,此外要求每个Ci在Ci能发出第二业务请求消息之前在Ci.p感应对m’的接收,m’总是由qG中的Dj.q经由每个Dj.q接TM
收服务请求消息m的相同的组对组路径qG.pathway≡pG.pathway发回,ITCC -Ppde由此提供用于组对组消息交换的自动调整的方法;
TM TM
方法(2.11),ITCC -Ppde路径的唯一性:ITCC -Ppde提供用于以下6种路径能力的方法:
(i)所有路径能同时彼此并行地输送和传递消息而无相互干扰,
TM
(ii)所有路径包含内置结构来驱动ITCC -Ppde的SMS(自监视系统),
(iii)所有路径在一准备好消息后就异步地发送消息而在消息发送期间无需消息调度或同步会话,
(iv)在每条路径中交换信号的所有软件或硬件部件总是彼此调谐,调谐使得每个部件总是准备好接收和立即响应从该路径中的其他部件接收到的信号,由此显著加速消息传递,
(v)每条路径从一个端口组中的端口的父蜂窝发送调整的联合消息并同步地并行传递该联合消息到相同端口组中的端口或也连接到相同路径的另一端口组中的端口,(vi)每条路径以数百纳秒级或更少的等待时间以对这些等待时间的精确预期的范围来对端口组中的端口提供确保的高速同步消息传递,假设2千兆赫兹CPU,
TM TM TM
ITCC -Ppde的这6种能力一起使得ITCC -Ppde路径唯一且与包括ITCC 中使用的路TM
径在内的、所有其他计算机通信系统中使用的通信路径不同,ITCC -Ppde提供安装和使用具有以上述唯一的特性的路径的方法;
方法(2.12),定义A:cells():用于定义称作蜂窝的软件计算单元的收集的方法,A:cells()是应用A中的所有蜂窝的集合,每个蜂窝是一类蜂窝的实例,蜂窝的类是称作TM
Cell的顶级概要ITCC -Ppde类中的此后称作Cell-Subclass的子类,A:cells()中的每个蜂窝与A:cells()中的所有其他蜂窝并行地运行,每个蜂窝在对于该蜂窝唯一的指定的不TM
同CPU(计算单元)中运行,没有两个蜂窝共享相同CPU,ITCC -Ppde管理所有对蜂窝的CPU分配和蜂窝的激活以在它们各自分配的CPU中运行,蜂窝和通信路径被特定地设计来在多样性的多核芯片中在任意大的数目的CPU中有效运行,蜂窝还被特定地设计来在多样性的TM
多核芯片中运行时间关键信息物理并行软件系统,ITCC -Ppde的设计、验证和自监视技术TM TM
还用于设计、验证和运行任意异步硬件系统中的异步硬件部件,ITCC -Ppde蜂窝是ITCCTM
蜂窝的特定专业化,实施者有责任以与ITCC -Ppde中的Cell-Subclass定义格式一致的方TM TM
式来定义应用A所需的所有ITCC -Ppde蜂窝子类(此后称作Cell-Subclass),ITCC -PpdeTM
提供方法来定义Cell-Subclass以及在ITCC -network()中安装蜂窝实例;
方法(2.8),定义A:ports():软件端口附接到A:cells()中的蜂窝,A:cells()中的蜂窝使用与它们附接的端口来发送/接收消息,每个端口是一类端口的实例,端口的类是TM
称作Port的ITCC -Ppde顶级概要端口中的此后称作Port-Subclass的子类,每个端口附接到A:cells()中的仅仅一个蜂窝C,C.p是附接到蜂窝C的任何端口p,A:ports()是附接到A:cells()中的蜂窝的所有端口的结合,C:ports()是附接到蜂窝C的端口的集合,A:cells()中的每个C的每个C:ports()具有至少一个称作C.g的总端口、至少一个称作C.f的功能端口以及至少一个称作C.i的中断端口,每个C.g是称作总端口的端口的子类的实例,C.g被C用来发出服务请求消息和接收返回的响应,每个C.f是称作功能端口的端口的子类的实例,C.f由C使用来接收和响应服务请求消息,每个C.i是称作中断端口的端口的子类的实例,中断端口本身是功能端口的子类,中断端口C.i被C用来接收和响应从A:cells()中的其他蜂窝接收到的中断消息,对于不由A:cells()中的蜂窝运行的任何TM TM
处理,不可能中断任何蜂窝的活动,ITCC -Ppde包含可能在任何ITCC -Ppde并行程序中TM
使用的所有Port-Subclass的定义,每个端口是Port-Subclass的实例,ITCC -Ppde提供方法来定义Port-Subclass、安装端口实例以及将端口实例附接到蜂窝,实施者有责任以与TM
ITCC -Ppde中的Port-Subclass定义格式一致的方式来仅仅定义对于应用A是特定的但TM
ITCC -Ppde中还未定义的特殊Port-Subclass;
方法(2.9),定义A:agents():用于定义软件代理的方法,代理附接到A:pathways()中TM
的路径的虚拟存储器,每个代理是一类代理的实例,代理的类是称作Agent的ITCC -Ppde的顶级概要代理类中的称作Agent-Subclass的子类,每个代理附接到称作该代理的父虚拟存储器的仅仅一个虚拟存储器,由此防止与A:pathways()中的路径的代理争用,TM
A:agents()是附接到A:pathways()中的虚拟存储器的所有代理的集合,ITCC -PpdeTM
包含可能在ITCC -Ppde并行程序中使用的所有Agent-Subclass的定义,每个代理是TM
Agent-Subclass的实例,ITCC -Ppde提供方法来定义Agent-Subclass,安装代理实例TM
并将代理附接到虚拟存储器,实施者有责任以与ITCC -Ppde中的Agent-Subclass定TM
义格式一致的方式来仅仅定义对于应用A是特定的且ITCC -Ppde中还未定义的特殊Agent-Subclass;
方法(2.10),定义A:virtuaMemories():用于定义称作虚拟存储器的软件对象,每个虚拟存储器是一类虚拟存储器的实例,虚拟存储器的类是称作VirtualMemory的TM
ITCC -Ppde的顶级概要虚拟存储器类的称作VirtualMemory-Subclass的子类,虚拟存储器的每个实例唯一地与称作该虚拟存储器的父路径的仅仅一个sm路径关联,由此防止与A:pathways()中的sm路径的虚拟存储器争用,每个dm路径将分布式计算系统中的一组SMP互连,每个这样的dm路径包含与连接到该dm路径的SMP一样多的虚拟存储器,A:virtuaMemories()是A:pathways()的路径中嵌入的所有虚拟存储器的集合,TM TM
ITCC -Ppde包含可能在ITCC -Ppde并行程序中使用的所有VirtualMemory-SubclassTM
的定义,ITCC -Ppde提供方法来定义VirtualMemory-Subclass,在路径实例中安装虚拟TM
存储器实例以及将硬件存储器动态分配给虚拟存储器,实施者有责任以与ITCC -Ppde中的VirtualMemory-Subclass定义格式一致的方式来仅仅定义对于应用A是特定的且TM
ITCC -Ppde中还未定义的特殊VirtualMemory-Subclass;
方法(2.11),定义A:pathways():每条路径是一类路径的实例,路径的类是称作TM
Pathway的顶级ITCC -Ppde概要类的此后称作Pathway-Subclass的子类,共享存储器环境中的路径仅仅包含软件部件,这样的共享存储器路径称作sm路径,分布式存储器环境中的路径包含软件和硬件部件二者,这样的分布式存储器路径称作dm路径,术语路径用于指TM
sm路径和dm路径二者,应用A中的所有路径的集合称作A:pathways(),ITCC -Ppde对可TM
能在并行编程中使用的路径提供了所有Pathway-subclass的定义,ITCC -Ppde提供方法TM
来定义Pathway-subclass,安装路径实例以及将路径实例连接到与A:ITCC -network()中TM
的蜂窝附接的端口,实施者必须遵照ITCC -Ppde中的Pathway-subclass定义的规则来仅TM
仅定义对于给定应用是特定的且在ITCC -Ppde中还未定义的Pathway-subclass;
TM TM
方法(2.12),定义A:ITCC -network():ITCC -Ppde提供方法来安装A:DESIGN()中的Cell-Subclass的概要或全面改进的定义的蜂窝实例,这样安装的蜂窝实例属于A:cells(),提供方法来安装Port-Subclass的概要或全面改进的定义的实例并将端口实例附接到A:cells()中的蜂窝实例,附接到A:cells()中的蜂窝的所有端口实例的集合称作A:ports(),提供方法来安装Pathway-subclass的概要或全面改进的规范的实例并将它们连接到A:ports()中的端口,在应用A的设计中安装的所有这样的路径实例的集合称作A:pathways(),A:pathways()中的发送消息的每个sm路径S具有唯一的实例,称作TM
ITCC -Ppde中的概要或全面改进的虚拟存储器实例的S.vM,S.vM是S中嵌入的虚拟存储器,每个dm路径D包含与该dm路径连接的每个SMP中的一个虚拟存储器,D中嵌入的虚拟存储器的数目等于连接到D的SMP的数目,D.vM是dm路径D中嵌入的所有虚拟存储器的集合,每条路径中的每个虚拟存储器具有附接到它们的、概要或全面改进的Agent-subclass中的唯一的代理实例,附接到A:pathways()中的路径的虚拟存储器的所有这样的代理实例的集合称作A:agents(),A:pathways()中的路径将附接到A:cells()中的蜂窝的端口互连,每个端口连接到实际上一条路径中的实际上一个代理,A:pathways()中的任何sm路径S的部件是S:ports()、S:agents()和S.vM,A:pathways()中的任何dm路径D的部件是D:ports()、D:agents()和D.vM,没有两个不同的路径共享共同的部件,由此防止并行消息交换期间的消息干扰,A:TICC-network()(此后称作网络)是图形,该图形的节点为A:cells()中的蜂窝且该图形的分支是A:pathways()中的将附接到蜂窝的端口互连的路TM TM
径,ITCC -Ppde提供方法来定义A:ITCC -network();
TM
方法(2.13),构建A:ITCC -network():对应用A定义称作配置器(或环境)的Cell-Subclass的一个或多个区分的蜂窝,A:DESIGN()包含每个SMP中的称作配置器(或环境)的Configurator的至少一个实例,根据来自应用A的用户的线索,配置器已被编程TM
以在每个SMP中安装已定义A:ITCC -network()的启动子网,足以启动对该启动子网的蜂窝分配的CPU中运行的应用A,每个SMP中的启动子网中的蜂窝已被编程以使用它们各自的TM TM
初始化程序来并行安装,部分A:ITCC -network()属于该SMP,ITCC -Ppde提供方法来安装该网络中的蜂窝、端口、代理、虚拟存储器以及路径的概要或全面改进的子类的所需实例,TM
提供方法来将它们彼此连接、附接和调谐以满足所有ITCC -Ppde连通性规则,实施者有责任适当地编程蜂窝子类中定义的初始化程序,使得一旦使用每个SMP中的所述启动子网启动应用A时就正确地构建该网络,实施者同样有责任以防止在每个SMP中的并行网络构筑TM
期间发生死锁的方式开发该初始化程序的计算机程序,该网络的并行构建由ITCC -PpdeTM TM
自动调整,ITCC -Ppde提供方法来构建已定义的A:ITCC -network();
TM TM
方法(2.14),显示A:ITCC -network():ITCC -GUI(图形用户接口)用于在显示屏幕TM TM
上显示A:ITCC -network(),每个SMP具有自身专用的显示屏幕,对应用A打开ITCC -GUITM
屏幕使ITCC -GUI在每个SMP的显示屏幕上显示应用A的配置器的图像,用户点击所显示的配置器的图像并从显示的菜单中选择安装选项,使得该SMP中的配置器安装足以启动运TM
行该SMP的启动子网中的初始化程序的A:ITCC -network()的启动子网中的所有蜂窝和TM
路径,每个启动子网中的蜂窝运行在由ITCC -Ppde分配给它的所述SMP的CPU中,由于启TM
动子网中的蜂窝安装A:ITCC -network()中的其他蜂窝和其他路径,因此每个新安装的TM
蜂窝自动由ITCC -Ppde激活以运行在所分配的所述SMP的CPU中,每个这样新安装的蜂窝执行自身的初始化程序以安装所述SMP中存在的所述网络中的另外的蜂窝和路径,由此该网络并行成长直到在所有SMP中构建了整个网络,实施者有责任以避免冲突和死锁的方TM
式定义该初始化程序使得正确构建所需的网络,ITCC -GUI在每个SMP中显示已安装的网络或显示在用户指定的蜂窝上锚定的该网络的一部分,在通篇具体实施方式中描述了用于TM TM
单个SMP中的小应用的这样的网络图像的例子,ITCC -GUI是ITCC -Ppde的内置子系统,TM TM
ITCC -Ppde提供方法来显示任何应用A中的已安装A:ITCC -network()的任何部分;
方法(2.15),定义A:messages():消息由A:pathways()中的路径的虚拟存储器保存,TM
每条消息是一类消息的实例,消息的类是称作Message的ITCC -Ppde顶级概要消息类中称为Msg的Msg子类,Msg是指Message的任何Msg子类,每个Msg定义指定了Msg的消息实例m中可能出现的Msg格式和数据格式,每个Msg定义还指定了用于处理消息和创建Msg的新消息实例的方法,A:pathways()中的路径将Msg子类的实例传递到与A:cells()中的蜂窝C附接的端口C.p,对于应用A定义的所有Msg子类的结合称作A:messages(),实施者TM
有责任以与ITCC -Ppde中的消息子类定义格式一致的方式定义应用A所需的所有Msg子TM
类,ITCC -Ppde提供用于定义A:messages()的方法;
方法(2.16),定义Msg方法:在与A:cells()中的蜂窝C附接的端口C.p的
C.p.pathway中嵌入的虚拟存储器M是C.p.vM,C.p.vM的读存储器是C.p.rd,C.p.wr是写存储器,C.p.rd保存Msg子类Msg的消息实例m,短语C.p.msg()是指消息实例m,C.p.wr保存可能的另一Msg子类Msg’的消息实例m,,C.p.wr:msg()是指消息实例m’,运行C.p的父蜂窝C的CPU执行Msg子类Msg和Msg’中定义的Msg消息,执行存储器C.p.ex向Msg子类中定义的每个Msg方法提供执行环境,Msg子类Msg和Msg’中定义的Msg方法和Msg’方法分别具有格式Msg:()和Msg’:(),其中分别是所述Msg方法和Msg’方法的唯一的不同名称,自变量中出现的所有端口C.q附接到端口C.p的父蜂窝C,运行C的CPU分别使用C.p:()和C.p:()来调用并执行C.p.vM中的各自的方法,这些方法使用仅仅在与蜂窝C、端口C.p和在中出现的其他端口C.q相关联的以下部件中定义的数据和方法,所述部件是(i)蜂窝C,(ii)端口C.p,(iii)虚拟存储器C.p.vM中存在的消息C.p:msg()和C.p.wr:msg(),(iv)自变量中出现的端口C.q,以及(v)虚拟存储器C.q.vM中存在的消息C.q:msg()和C.q.wr:msg(),执行在任何Msg子类中或蜂窝C的Cell-subclass中定义的任何方法的任何蜂窝C能仅使用在连接到C的端口的路径中的附接到或调谐到C的其他软件部件中定义的数据和其他方法,调谐和附接是传递的对称的关系,该要求将每个蜂窝C与A:cells()中的所有其他蜂窝隔离,与路径连接的消TM
息发送和消息接收端口的父蜂窝从不同时使用该路径的虚拟存储器,ITCC -Ppde提供用于遵循以上给定的规则的Msg方法;
方 法(2.17),定 义A:pthreads():在任 意Msg子 类Msg中 定 义 的Msg方 法Msg:()或类似已定义的蜂窝方法C:()称作pthreads(并行线程),因为这样的方法可能是用不超过10至100纳米来完成2千兆CPU中的执行的短的连续的计算机程序,pthreads由A:cells()中的蜂窝并行执行,对应用A定义的所有这样的pthreads的集合称作A:threads(),A:threads()中的每个pthreads独立于A:threads()中的除了由端口组中的端口的父蜂窝在其共同虚拟存储器M中并行执行的pthreads之外的所有其他pthreads,并使用M.scp来在所述pthreads的并行执行期间交换数据以调整它们各自的并行计算,TIP将pthreads与蜂窝间的所有其他通信隔离,实施者有责任全面改进A:implementation()中的包含pthreads和Msg子类在内的所有概要软件单元,然而A:implementation()的正式有效可能在A:implementation()的改进的任何阶段,TM
ITCC -Ppde提供用于遵循以上给定的规则定义用于pthreads的改进的方法。
3.根据权利要求1或2所述的方法,进一步包括用于通过连续的改进来产生全面改进的A:implementation()的以下方法:
TM
方法(3.1),定义称作TIP(线程交互协议)的编程概要:ITCC -Ppde提供用于使用TIP来定义A:cells()中的蜂窝间的交互的概要规范,每个TIP在蜂窝C的端口C.p定义,在端口C.p定义的TIP称作C.p:TIP(),存在在附接到A:cells()中的每个蜂窝C的每个端口定义的C.p:TIP(),对蜂窝C定义的所有TIP的集合称作C:TIPS()。对应用A定义的所有TIP的集合称作A:TIPS(),C.p:TIP()概要地指定了蜂窝C如何在其端口C.p接收消息、处理接收到的消息和响应该消息,A:cells()中的蜂窝间的交互仅仅通过经由A:ITCC-network()TM
中的路径交换的消息而发生,ITCC -Ppde与其他类似的基于消息交换的系统之间的本质区TM TM
别在于ITCC -Ppde管理通信的方法,ITCC -Ppde自身中的每个蜂窝传递所有消息而无需消息调度和同步会话,使用2千兆赫兹CPU以最多数百纳秒范围内的精确预计的等待时间来确保非常高速瞬时异步并行消息传递,仅需要5种不同类型的TIP来覆盖所有并行编程的需求,简单TIP具有格式,
异步TIP:C.p:TIP()=C.p:guard?(){C.p:tip();} (C.1)
或,同步TIPs:C.p:TIP()=C.p:guard?()*{C.p:tip();} (C.2)
C.p是附接到蜂窝C的软件端口,C.p连接到与称作C.p.pathway的路径的虚拟存储器C.p.vM附接的实际上一个代理,C.p:tip()称作TIP-body,在端口C.p的Cp:guard?()或Cp:guard?()*的执行称作由蜂窝C进行的端口的轮询,蜂窝C轮询其端口的顺序称作C的轮询周期,简单TIP立即计算响应的例子是
C.f:TIP() = C.f:mR ? (){C.f:r().s();} = C.f:mR ? (){C.f:r();C.f:s();} (C.3)
C.g:TIP() = C.g:pR ? (){Cg:x().s();} = C.g:pR ? (){C.g:x();C.g:s();} (C.4)
在以下的方法(3.2)至方法(3.5)中描述了TIP(C.3)和(C.4)的解释,在通篇具体TM
实施方式中出现了各种TIP的许多例子,实施者有责任以与ITCC -Ppde中的TIP定义格式一致的方式对A:ports()中的每个端口定义C.p:TIP()以及应用A的期望的设计要求,TM
ITCC -Ppde提供了定义简单TIP的方法;
方法(3.2)异步保护间隔:语句(C.1)中的C.p:guard?()是具有格式C.p:mR?()(’mR’用于’messageReady’)和C.p:pR?()(’pR’用于’pathwayReady’)中的一种的TM
异步保护间隔,异步保护间隔是作为由ITCC -Ppde提供的内置计算机程序实施的条件,可TM
使用于任何实施,实施者可自由定义他们自己的、对于未在ITCC -Ppde中定义的给定应用A特定的保护间隔,保护间隔总是基于由应用A中的端口交换的信号或信号的子类型,异步保护间隔被A:cells()中的蜂窝C使用来轮询其端口C.p以检查C.p是否具有传递到它的消息或C.p是否准备好发出消息,保护间隔返回真值true或false,仅在保护间隔返回真值true时才执行语句(C.1)中的TIP-body C.p:tip(),在保护间隔返回false时跳过TM
TIP-body,具有异步保护间隔的TIP称作异步TIP,ITCC -Ppde提供用于定义异步保护间隔的方法;
方法(3.3),同步保护间隔:语句(C.2)中的C.p:guard?()*是同步保护间隔,父蜂窝C仅在C.p:guard?()*返回true时执行TIP-body,否则在端口C.p等待,重复执行C.p:guard?()直到C.p:guard?()*返回真值true,在C.p:guard?()*变成true时执行语句(C.2)中的TIP-body然后进行轮询其下一个端口,同步保护间隔中出现的符号’*’TM
对ITCC -Ppde指示需要这种类型的计算机程序的重复执行来实施保护间隔直到保护间隔TM
返回true,具有同步保护间隔的TIP称作同步TIP,ITCC -Ppde提供用于定义同步保护间隔的方法;
方法(3.4),在功能端口的简单TIP执行:语句(C.3)中的C.f是附接到蜂窝C的功能端口,C是端口C.f的唯一父蜂窝,C是可以使用C.f的唯一蜂窝,C.f从一个或多个其他端口C’.q接收联合服务请求消息m,C.f接收的消息m存储在虚拟存储器C.f.Vm≡M的只读存储器C.f.rd中,虚拟存储器M嵌入在C.f.pathway中,短语C.f.msg()=C.f.rd.msg()表示C.f.rd中的消息,传递到C.f的消息C.f:msg()由蜂窝C通过上述语句(C.3)中的C.p:guard?()*的评估来感应,评估返回真值true使得蜂窝C通过执行语句(C.3)中出现的TIP-body C.f:r().s();=C.f:r();C.f.s()来响应C.f:msg(),C.f:r()出现在上述语句(C.3)中,C.f:r()(’r’用于“respond”)是由C使用来处理服务请求消息C.f:msg()和在C.f.vM的写存储器C.f.wr中写入响应消息的pthread(并行线程),C.f.vM的执行存储器C.f.ex提供该TIP-body的评估的执行环境,实施者自由使用任何名称用于C.f:tip()中的线程r(),实施者使用的名称捕获r()的设计目的,C.f的父蜂窝C在评估C.f:r()后立即评估C.f:s()来调用和执行C.f.protocol以将C.f.wr中的响应消息立即发送到端口C’.q,C.f从该端口C’.q接收到其服务请求消息,该协议的执行使得在消息传递之前切换C.f.vM中的读/写存储器,从而每个C’.q在读存储器C’.q.rd中接收在C.q.wr中写入的响应消息,也可以对C执行C.f:f()而不是C.f:s()从而将C.f.rd中接收的消息可能有些修改地传回到它的发送者,C.f:f()不切换读/写存储器,蜂窝C自己执行与端口C.f关联TM
的协议C.f.protocol来发出或转发该响应消息而无需消息调度或同步会话,ITCC -Ppde提供用于执行在功能端口的所有类型的TIP的方法;
方法(3.5),在总端口的简单TIP执行:语句(C.4)中的C.g是蜂窝C的总端口,C是C.g的唯一的父蜂窝,C是可以使用C.g的唯一蜂窝,总端口C.g被蜂窝C使用来发出服务请求消息和接收响应消息,蜂窝C仅在C.g.pathway准备好发出如由保护间隔C.g:Pr?()检查的消息时执行(C.4)中的C.g:x(),C.g:x()是由C在C.g.vM的执行存储器C.f.ex中执行的线程的概要,C.g:x()被执行来计算、构筑以及在C.g.wr中写入服务请求消息,并且此后C自身立即执行C.g:s()来调用和执行C.g.protocol以将C.g.wr中的服务请求消息发送到一个或者多个端口C’.p,C.g.vM的读/写存储器在消息传递前被切换使得每个C’.p将服务请求消息接收在其读存储器C.p.rd中,对于C还可以执行C.g:f()而不是C.g:s()从而将C.g.rd中接收的消息可能有些修改地发回到它的发送者,而无需切换读/写存储器,蜂窝C自身执行与端口C.g关联的协议C.g.protocol以发出或转发该消息而无需消息调TM
度或同步会话,ITCC -Ppde提供用于在总端口执行所有类型的TIP的方法;
方法(3.6),定义5种TIP:这5种TIP是(i)语句(C.1)至(C.4)中引入的简单TIP,(ii)生成TIP,其生成A:cells()中的其他蜂窝中的计算以响应服务请求,生成TIP在具体实施方式的部分4.1和4.2、语句(4.1)至(4.3)以及语句(4.11)至(4.13)中被引入,(iii)服务于在具体实施方式的部分4.2、语句(4.8)至(4.13)中引入的端口矢量的TIP,(iv)具有在具体实施方式的部分4.4,语句(4.14)和(4.16)中引入的非决定性保护间隔和根据经验的保护间隔的TIP,(v)在其TIP-body中包含在具体实施方式的部分4.5、语句(4.18)至(4.23)中引入的其他嵌入的TIP的TIP,任何嵌入的TIP都可以是这5种TIP中的任何一个,因此对于以上所有种类的TIP可以以任何组合出现在单个TIP的TIP-body中,TM TM
这5种TIP是设计和构建任何ITCC -Ppde软件或硬件系统仅需的TIP种类,ITCC -Ppde提供用于定义所有种类的TIP的方法;
方法(3.7),事务:端口组gG中的端口Ci.p通过Ci.p.protocol的同时调整的并行执行,同步地将联合服务请求消息m传递到端口组qG中的所有端口Dj.q,0≤i<n,0≤j<m,由每个Ci进行的Ci.p.protocol的并行执行由pG.pathway中的代理自动调整,每个端口Ci.p在Ci开始执行Ci.p.protocol后立即被锁定,每个端口Dj.q在Dj.q的父蜂窝Dj感应到传递到Dj.q的消息时立即被锁定,由此防止第二业务请求消息发送到Dj.q或Dj.q接收到第二业务请求消息,端口Dj.q仅在第一业务请求消息m已被处理且由父蜂窝Dj通过经由qG中的所有端口发送联合响应消息m’进行响应后才接收第二业务请求消息的传递,端口Ci.p仅在父蜂窝Ci已经感应到由qG发送的联合响应消息后才发送第二业务请求消息,每个父蜂窝Dj与端口组qG中的端口的其他父蜂窝并行地异步执行协议Dj.q.protocol以在相同的组对组路径qG.pathway≡pG.pathway上发送响应消息m’,父蜂窝Dj进行的所述协议的并行执行由qG.pathway中的代理再次调整,所述代理对pG中的每个端口Ci.p确保实际上一次同时传递联合响应消息m’,对于每个Ci,由父蜂窝Ci针对在端口Ci.p接收的响应消息m’的感应构成在Ci.p发送它的业务请求消息m到Dj.q时开始的事务的完成,因此,A:ports()中的每个端口仅在连续的事务完成后才发送连续的业务请求消息,且类似地A:ports()中的每个端口仅在连续的事务完成后才接收连续的业务请求消息,每个端口总TM
是经由该端口接收它的业务请求消息的相同路径来发回响应消息,ITCC -Ppde提供用于所有并行事务的确保顺序完成而无相互干扰的方法;
方法(3.8),定义事务的正确性:A:ports()中的任何两个端口p和q之间的事务被写作[p(srm(t1))]<->[q(srm(t2))],[p(srm(t1))]是由端口p在时间t1发送的业务请求消息,[q(srm(t2))]是由端口q在时间t2发回的响应消息,除了在定时限制(t2-t1≤τmax(p,q))为true之外,只有在关系式R(p,q)(srm(t1),rm(t2))对于所有消息p(srm(t1))和q(srm(t2))也为true时才正确地执行所述事务,R(p,q)是对于端口对(p,q)特定的关系式的名称,τmax(p,q)是在p和q之间的事务完成之前可能发生的延迟的上界,端口p和q仅在正确地执行p和q之间的每个事务时才充分匹配,端口的充分匹配特性依赖于TIP即TM
p:TIP()和q:TIP(),该充分匹配特性也是TICC -Ppde中的重要特性,该充分匹配特性在权利要求中提到多次,在设计时估计与事务相关联的定时和界限且在实施TIP中的pthreadsTM
和条件实施后验证与事务相关联的定时和界限,仅在通过A:TICC -network()中的路径连TM
接的所有端口对充分匹配时全面改进的A:implementation()才正确,TICC -Ppde提供了用于使A:implementation()中的端口对的充分匹配特性的满足有效的方法;
方法(3.9),定义被称作CIP的概要:由实施者对A:cells()中的每个蜂窝C指定被称作C:CIP()(C的蜂窝交互协议)的计算机程序,C:CIP()指定蜂窝C的初始化程序,在C启动时仅完成一次该初始化,并且该初始化指定了C轮询它的端口C.p并一个接一个循环执行C:TIP()中的C.p:TIP()的顺序,该循环轮询和TIP执行被称作蜂窝C的轮询周期,C计算它的轮询周期,直到作为在C的其中一个中断端口从A:cells()中的其他蜂窝接收到中断消息的结果而C中断其操作或C暂停其操作,仅在C的轮询周期中的连续TIP执行之间暂停C,不可能在其执行期间暂停TIP执行,被暂停的C以后在下一个消息传递到C的任何端口时恢复执行,任何端口C.p的C.p:TIP()的执行不与至C.p的消息传递同步,仅在C.p于轮询周期中被轮询之前C.p已传递消息时才继续由蜂窝C轮询C.p,在一个轮询周期中遗漏的在C.P的消息被在下一个轮询周期中捕获,蜂窝C的每个C:CIP()与A:cells()中的所有其他蜂窝C’的C’:CIP()并行运行,每个蜂窝运行在其自身唯一的和不同的指TM
定的CPU中,A:cells()中的不同蜂窝的轮询周期不必彼此同步,TICC -Ppde提供了如具体实施方式的部分6.6中所述的as hoc同步和调整方法,以在应用A的实施的任何时间点调整和同步A:cells()中的不同蜂窝的轮询周期而不必改变至该时间点的任何改进,A:CIPS()是A:cells()中的每个蜂窝C的所有计算机程序C:CIP()的集合,实施者有责任TM
以与TICC -Ppde中的CIP定义格式一致的方式对A:cells()中的每个蜂窝C定义C:CIP()TM
并定义A:implementation()中的蜂窝C的期望功能,TICC -Ppde提供了用于定义CIP的方法;
方法(3.10),CIP的轮询周期中的两种可能的执行模式:C.p在其被蜂窝C轮询时返回真值true,使得C跟随两个可能路线动作中的一个,所述两个可能路线动作是(i)立即执行TIP-body C.p:tip()并响应于接收到的消息或(ii)将C.p插入到蜂窝C的分类端口表sortedPortList中,通常基于以运行蜂窝的CPU的本地时钟表示消息传递时间的在端口的时间戳来完成分类,这样的时间戳是由传递消息到端口的协议进行的或者根据蜂窝C本地的任何分类关系进行的至端口的消息传递的时间的集合,在完成轮询和分类所有它的端口后,C对sortedPortsList中的每个C.p以C.p出现在列表中的顺序执行C.p:tip(),C.p在其被蜂窝C轮询时返回真值false,也使得C跟随两种可能的路线动作中的一个,所述两个可能路线动作是(i)如果在C.p的保护间隔是异步保护间隔则跳过端口C.p并立即前进到轮询其下一个端口,或(ii)如果在C.p的保护间隔是同步保护间隔则在端口C.p等待消息达到,在消息达到后执行C.p:tip()然后前进到轮询其下一个端口,对于CIP还可以在TIP的保护间隔返回真值true后立即执行在其一些端口上的TIP-body且将其他端口分类TM
到sortedPortsList中用于后续执行,TICC -Ppde提供了方法来指定CIP进行的TIP的已分类/未分类和同步/异步;
方法(3.11),定义和使用端口组:端口组是属于A:cells()中的不同蜂窝的端口集,没有两个端口具有共同的任何端口,端口组由将附接到不同蜂窝的不同端口的组连接到路径中的代理来定义,每个组对组路径中的代理在消息发送端口组中的端口的父蜂窝完成将它们各自的贡献写入联合消息后分派由所述父蜂窝联合写的联合消息,分派的消息被同步传递到消息接收端口组中的所有端口,因此在端口组中的端口之间的消息的派送和传递总是同步的,连接端口组的路径中的代理调整所述路径中的所有消息分派和传递,代理还调整SMS(自监视系统)中的对应的消息派送和传递事件的安装,即使在接收到的消息是同步地传递到消息接收端口组中的所有端口时,消息接收端口组中的端口每个父蜂窝也在其自身TM
的时间感应并响应所述消息,因此端口组在TICC -Ppde中提供机制来实施应用A中的并行TM
处理的同步支路和结合,TICC -Ppde提供了机制来定义端口组并安装组对组路径,并提供TM
协议用于在这样的路径上的消息交换,TICC -Ppde提供了用于定义和使用端口组的方法;
方法(3.12),定义和使用端口矢量:蜂窝具有对其定义的一个或多个端口矢量,每个端口矢量由附接到相同蜂窝的两个或更多端口组成,端口矢量中的所有端口是相同类型、或者都是总端口,或者都是功能端口或中断端口,符号C.p用于指蜂窝C的端口矢量,C.p=[C.p1,C.p2,…,C.pk],k≥2,C.p的父蜂窝在它的每个轮询周期中轮询C.p中的端口,每个C.pi连接到不同的路径C.pi.pathway,1≤i≤k,每个C.pi在每个轮询周期中彼此独立地通过从除C之外的不同蜂窝接收消息,1≤i≤k,在每个轮询周期,父蜂窝仅在C.p的所有端口已接收到消息后才响应在端口C.pi接收到的消息,否则父蜂窝在该轮询周期中跳过端口矢量C.p中的端口C.pi,在端口矢量C.p的最简的TIP具有形式
异步C.p:TIP()=(C.p1:mR?()&C.p2:mR?()&…&…C.pk:mR?()){
C:r(p);C.p1:s();…;C.pk:s();} (C.5)
或同步C.p:TIP()=(C.p1:mR?()&C.p2:mR?()&…&…C.pk:mR?())*{
C:r(p);C.p1:s();…;C.pk:s();} (C.6)
其中C:r(p)是蜂窝C的私有存储器中定义并执行的pthread,C:r(p)使用在每个端口C.pi接收到的消息,1≤i≤k,接收到的消息存在于不同的虚拟存储器C.pi.vM中,
1≤i≤k,每个C.p:TIP()无条件地响应于C.p中的每个端口,对于C.p:TIP()可以是该
5种TIP中的任何一种,在应用中使用端口矢量以实施并行pthread计算的异步支路和结合并实施如具体实施方式的部分6.6中所述的由蜂窝执行的计算的ad hoc同步和特征,TM
TICC -Ppde提供了用于定义和使用端口矢量的方法;
方法(3.13),用于组对组事务:A:implementation()中的每条路径被连接到端口组pG中的一个或多个消息发送端口的组合,gp中的每个端口属于不同的父蜂窝,pG中的所有端口被连接到组对组路径pG.pathway中的相同代理a0,pG.pathway将pG中的端口连接到另一个端口组qG中的一个或多个其他端口的组,qG中的所有端口以类似于具体实施方式中的部分7的图19中所示的方式连接到qG.pathway≡pG.pathway中的另一代理a1,还可以是如具体实施方式的图17中所示的pG≡qG和a0=a1,所述路径总是仅分别在从消息发送端口组pG或qG到消息接收端口组qG或pG这一个方向上发送消息,端口组pG中的端口总是将联合业务消息发送到端口组qG中的端口,qG中的端口总是将联合响应消息通过相同的qG.pathway发回到pG中的端口,因此端口组pG和qG中的端口总是仅仅交换由端口组pG或qG中的端口的所有父蜂窝联合写入和联合同步接收的联合消息,在pG.pathway≡qG.pathway中的代理自动确保在所述路径上的所有这样的联合消息的调整分派和同步传递,代理还对由端口组pG或qG中的每个端口发送或接收的每条消息自动调整SMS(自监视系统)中的对应的消息分派和传递事件的调整安装,qG中的每个端口的父蜂窝在自己的一个轮询周期中的自身的时间感应并响应业务请求消息,不同蜂窝的轮询周期不必彼此同步或不必与消息传递时间同步,qG中的每个端口经由相同的路径qG.pathway≡pG.pathway回应pG中的端口,pG和qG中的所有端口具有与其相关联的相同虚拟存储器pG.vM=qG.vM,在pG中的端口与qG中的端口之间的消息交换事务仅在pG中的端口的所有父蜂窝已接收并感应到qG中的端口的父蜂窝发送的联合响应消息时完成,当且仅当pG中的每个端口与TM
qG中的每个端口充分匹配时pG与qG充分匹配,因此TICC -Ppde提供了用于定义和使用充分匹配的组对组交互的方法;
TM
方法(3.14),具有可预期定时的确保及时事务完成:TICC -Ppde通过以下方式使得能在可预期的时间界限进行应用A中的每个事务的及时完成:(i)确保没有蜂窝C曾遗漏感应传递到其任何端口C.p的任何业务请求消息,(ii)在A:cells()中的蜂窝C感应到在端口C.p的业务消息的接收后,激活在C的每个端口C.p的C.p:tip()的TIP-body,(iii)使得对于A:implementation()中的或A:implementation()外的处理或蜂窝在一旦C.p:tip()已被激活时就不能中断C.p:tip()的执行,(iv)确保由在任何端口C.p的业务请求消息的接收启动的每个事务的完成,(v)通过将CPU中的可能由于使用加速技术,例如多指令流执行、预测未来调度、流线处理和高速缓冲存储器执行,所导致的指令调度延迟消除,来确保可预期及时响应于在A:cells()中的每个蜂窝C的每个端口C.p的每个TM
接收的业务请求,这些加速技术对于在TICC -Ppde并行程序中获得高吞吐量是不必要的,TM
在TICC -Ppde并行程序中通过对小的增益大小并行处理任意缩放来实现高吞吐量,任意C.p:tip()的执行采用不大于10-100纳秒来完成,(vi)事务完成总是仅由TIP执行所导致的,(vii)事务调度和调整总是由对A:cells()中的蜂窝的轮询周期中的端口的排序和对传递到A:cells()中的端口的消息的排序自动导致的,(viii)事务同步总是由组对组事务中的消息传递的自动同步和具体实施方式的部分6.6中所描述的ad hoc同步技术的使用所导致的,(ix)A:implementation()中的所有TIP执行是自同步和自调整的,(x)实TM
施者有责任使用由TICC -Ppde对各种TIP提供的TIP格式来对A:ports()中的每个端口TM
C.p仅定义C.p:TIP()以使得确信由路径连接的每对端口充分匹配,并且与TICC -Ppde中的CIP定义格式和每个C:CIP()的期望的功能一致地定义A:cells()中的每个蜂窝C的TM
C:CIP(),(xi)A:TICC -network()中的所有消息交换是自同步和自调整的,(xii)所有这些特征一起对A:implementation()中的所有事务提供具有可预期定时的确保及时事务完TM
成,TICC -Ppde提供用于确保及时事务完成的方法;
方法(3.15),调谐保存:确保的且及时的事务完成接下来保持并确保A:pathways()中的每条路径中的部件的相互调谐,这些部件彼此交换信号,在消息传送期间在一个方向上由信号交换引起的路径的部件的状态改变使得该路径中的所有部件准备好在其他方向上的消息传送,并且在该其他方向上的消息传送将该路径中的所有部件的状态自动重新设置成如具体实施方式的部分1.2(F)中所述的、它们的充分调谐的初始化状态,由此总是确保TM
A:implementation()中的高速异步通信而无需同步会话,TICC -Ppde因此提供了用于自动调谐保存的方法;
方法(3.16),通过端口组中的端口的父蜂窝调整虚拟存储器中的消息的联合处理:端口组pG中的所有端口Ci.p总是具有同步传递到它们的相同的消息,且该消息存在于读存储器Ci.p.rd≡Pg.rd中,该消息和该读存储器是pG中的所有Ci.p共有的,pG中的端口的数目通常不多于10-20个,pG中的端口的父蜂窝并行地执行它们各自的Ci.p:tip()以处理并响应同步传递到所有它们的相同消息,pG中的每个Ci.p的父蜂窝响应在它的其中一个轮询周期中的其自身的适当时机接收到的消息,每个Ci.p的父蜂窝不必同步响应接收到的消息,然而,每个父蜂窝Ci与端口组pG中的所有其他端口的父蜂窝并行地在相同虚拟存储器pG.vM≡Ci.p.vM中执行Ci.p:tip(),虚拟存储器pG.vM≡Ci.p.vM对端口Ci.p的所有父蜂窝Ci提供共同的中间结果存储器pG.scp≡Ci.p.scp以在这样的并行Ci.p:tip()执行期间彼此交换数据,父蜂窝Ci通过在Ci.p:tip()的执行期间通过pG.scp彼此交换所述数据来实现正确调整,实施者有责任对在pG中的端口Ci.p的Ci.p:tip()的pthread写计算机程序以使得这样的调整使用pG.scp,并且实施者有责任在必要的地方安装pthread锁定来保护共同共享的数据的调整的更新,由端口组中的端口的父蜂窝并行执行的这样的pthreadTM
仅是A:pthreads()中的可能相互彼此依赖的pthread,TICC -Ppde因此提供了用于通过蜂窝组中的蜂窝进行的调整的联合并行处理的装置;
方法(3.17),完成A:implementation():用于通过A:DESIGN()中的概要TIP和CIP以及A:messages()中的概要Msg子类的连续改进,来完成A:implementation()的方法,这样的改进由实施概要pthread、概要条件和概要Msg子类的计算机程序组成,所有pthread遵TM TM
照TICC -Ppde的规则而定义,定义所有的Msg子类以满足TICC -Ppde的顶级概要消息类中给出的格式,在改进的任何阶段在A:implementation()中定义的所有pthread、条件和Msg子类的集合分别称作A:pthreads()、A:conditions()和A:messages(),在改进的每个阶段A:implementation()包含A:TICC-Network()、A:TIPS()、A:CIPS()、A:messages()、A:pthreads()、A:conditions()和在到该改进的阶段为止定义的A:defmitions(),在以下TM
方法(3.20)中定义了A:definitions(),TICC -Ppde提供了用于连续改进概要规范并完成A:implementation()的方法;
方法(3.18),与不同蜂窝相关联的TIP的相互独立以及出现在这些TIP中的pthread和条件的相互独立:仅由父蜂窝C执行A:cells()中的蜂窝的端口C.p的每个TIP-body即C.p:tip()、或者端口矢量的TIP-body即C.p:tip(),C.p:TIP()和C.p:TIP()中出现的所有端口附接到相同的父蜂窝C,虚拟存储器C.p.vM提供用于执行C.p:tip()的执行环境,父蜂窝C的私有存储器提供用于执行端口矢量TIP即C.p:TIP()的执行环境,在C.p:tip()或C.p:TIP()的执行期间,蜂窝C仅使用蜂窝C中定义的数据和其他方法、和在C.p:tip()或C.p:TIP()中出现的端口、以及在与C.p:tip()或C.p:TIP()中出现的且被彼此调谐或附接的端口相连接的路径中的软件部件中定义的方法,所执行的pthread仅改变与父蜂窝C相关联的数据以及执行中使用的端口而非其他,由此除了通过中间数据存储器共享数据来调整端口组中的端口的父蜂窝进行的并行执行的pthread外,不同蜂窝进行的所有pthread和TIP执行相互独立,在改进的任何阶段,使用以下方法(3.20)中描述的pthread和条件的输入/输出特性来使所述pthread和条件的计算机程序有效并联合使通过中间数据来共TM
享数据的pthread和条件的计算机程序有效,TICC -Ppde提供方法来利用TIP和pthread的相互独立性以使定义TIP和pthread的计算机程序有效;
方法(3.19),用于描述软件部件的状态的判定:任何软件部件的状态x由具有 {x.attribute = data}、{x.attribute1 < y.attribute2}、{x.attribute1 ≤ y.attribute2}、{x.attribute1∈y.attribute2}或 等形式的
判定的布尔逻辑组合定义,x和y是蜂窝C、或蜂窝C的端口C.p、或C.p.pathway的任意部件或C.p.rd:msg()或C.p.wr:msg()中的任何数据项,C.p.rd:msg()是C.p.rd中的消息且C.p.wr:msg()是C.p.wr中的消息,状态用于定义输入/输出特性,计算机程序TM
定义pthread,状态还用于定义由计算机程序实施的条件,TICC -Ppde提供方法来表征A:implementation()中的软件部件的状态;
方法(3.20),pthread和条件的输入/输出特性:对于任何pthread即p(),其特征具有形式
{(t1)&(t1)}[<→p()(t1)>(t2)]
{post-C?()(t2)&m’:C?()(t2)&R(m,m’)(t2)&((t2)≤(t1+τmax(p))} (C.7)pre-C?()和post-C?()是与p()相关联的预条件和后条件,这些条件指定软件部件的状态,在该状态中pthread p()正在被执行,m:C?()是表征由p()处理的输入消息m的条件,m’:C?()是表征由p()处理的输出消息m’的条件,R(m,m’)是应当满足的m和m’之间的关系,’→’是表示p()的执行的符号,p()的执行在pre-C?()和m:C?()成为true时的相同时间t1开始,p()的执行在post-C?()、m’:C?()、R(m,m’)以及(t2)≤(t1+τmax(p)都成为true时的时间t2终止,τmax(p)是可以采用来完成p()的执行的最大时间,(C.7)中的每个条件是一个或更多软件部件的状态的布尔逻辑组合,在该状态中条件被评估,状态如方法(3.19)中所定义,软件部件所有彼此附接或彼此调谐,用于p()的计算机程序仅在每次执行p()时(C.7)中给出的p()的特性保持true时才是正确的,仅在对该计算机程序的评估返回true时并且仅在定义所述条件的判定的布尔逻辑组合为true时用于条件的计算机软件的定义才是正确的,在改进期间定义A:implementation()TM
中的所有pthread和条件的特性的集合,处理称作A:definitions(),TICC -Ppde提供交互工具来表征在实施中使用的所有pthread和方法;
方法(3.21),蜂窝隔离和程序运动:TIP的重要特性是,在端口定义的TIP的格式独立于连接到这些端口的路径的种类,因此TIP在将通信与计算集成的同时将通信从计算隔离,通过执行计算的相同蜂窝来执行用于所有通信的协议,除了定义用于处理和构建消息的pthread和用于发送消息的协议的计算机程序不同之外,由蜂窝执行来处理和构建消息的计算与由相同蜂窝执行来发送消息的计算之间不存在不同,对于在处理期间使用共同的中间数据存储器联合处理传递到端口组中的所有端口的消息的、不是端口组中的端口的父蜂窝的所有蜂窝,TIP还将A:cells()中的每个蜂窝C执行的计算从由A:cells()中的其他蜂窝执行的计算隔离,在端口的协议总是在该端口的虚拟存储器中执行,用于定义蜂窝C的状态的数据保存在蜂窝C的私有存储器中,且用于定义附接到蜂窝C的端口的状态的数据保存在这些端口各自的虚拟存储器中,因此蜂窝C的虚拟存储器和存储器对使用它们的蜂窝提供私有执行环境,A:cells()中的两个不同蜂窝,其不是端口组中的端口的父蜂窝,仅能同时并行执行处于蜂窝的不同虚拟存储器中或不同私有存储器中的相同pthread或相同协议的副本,端口组中的端口的父蜂窝能同时并行执行该端口组中的所有端口共同共享的相同虚拟存储器中的相同pthread,pthread和协议的执行总是仅仅改变进行这些执行的蜂窝的状态和与协议相关联的路径的状态而非其他,因此将由A:cells()中的所述蜂窝执行的并行计算彼此隔离,蜂窝的隔离使得能以与C1.p和C2.p相关联的不同虚拟存储器来在不同蜂窝C1和C2的两个端口C1.p和C2.p之间进行并行计算系统的程序运动,程序运动通过将虚拟存储器C1.p.vM的整体内容与拷贝到虚拟存储器C1.p.vM的父蜂窝C1的状态TM
一起传输到虚拟存储器C2.p.vM来实现,TICC -Ppde提供工具来确保蜂窝隔离和程序运动TM
在实施中不被干扰所必须的条件,TICC -Ppde中对应用的设计和实施自动实现蜂窝隔离并使得能进行程序运动;
方法(3.22),蜂窝的依赖和独立端口:A:cells()中的每个蜂窝具有多个总端口、功能端口和中断端口,蜂窝C的端口C.p或端口矢量C.p是仅在C.p:TIP()或C:TIP(C.p)的执行期间执行的计算仅仅依赖于传递到C.p或C.p的消息和C.p或C.p的状态而非其他时是独立的,对于蜂窝C可以具有多于一个这样的端口矢量的独立端口,在所有其他情况下C的端口彼此依赖,对于依赖于端口C.q的端口C.p的最简化C.p:TIP()具有形式C.p:mR?(){C.p:r(C.q).s()},其中pthread C.p:r(C.q)用于处理和响应于在端口C.p接收到的消息,pthread C.p:r(C.q)具有作为它的自变量的C.q,该自变量使得C.p:r(C.q)能使用C.q的当前状态和C.q.vM中的消息、以及C.p的状态和C.p.vM中的消息同时响应于在C.p接收到的消息,多于一个端口可以出现在这样的响应方法C.p:r(C.q)的自变量中,在依赖端口的TIP的执行如具体实施方式的部分4.5所述被调整,如所述部分4.5所述,在特定情况TM
下可以将依赖的或独立的端口从一个蜂窝移动到该蜂窝的另一个副本,TICC -Ppde提供方法来定义TIP使得容易考虑到所有端口的依赖性;
方法(3.23),中断处理:没有操作系统能曾经中断由A:cells()中的任何蜂窝执行的计算,蜂窝C仅仅通过在其中断端口的中断消息的接收而被中断,这样的中断消息由A:cells()中的其它蜂窝发送到蜂窝C,在蜂窝C的中断端口的消息在一个轮询周期中仅由蜂窝C服务一次,或每个中断端口发信号通知运行该蜂窝C的CPU在中断消息传递到它时使用CCP(因果通信原语),且该CPU仅在连续的TIP执行之间响应它,因为10-100纳秒级的低粒度大小的TIP执行这是可以接受的,通过数百纳秒范围的低信息交换等待时间可以进行这样的低粒度大小的执行,因此相对快地注意到中断,即使中断仅在连续的TIP执行期间被注意到,在蜂窝C的中断端口接收中断消息使得蜂窝C执行以下任何一个:(i)在蜂窝C的当前TIP执行结束时暂停蜂窝C的操作,该暂停操作由在蜂窝C的任何端口接收的下一条消息自动恢复,用于蜂窝C中的计算的暂停和恢复的机制由蜂窝C自身自动处理而无需操作系统介入,(ii)动态改变蜂窝C中的TIP执行的顺序,或(iii)终止蜂窝C的操作并释放分配给蜂窝C的CPU,所有这些仅仅发生在连续的TIP执行之间,实施者有责任保证蜂窝TM
C在终止前服务在其端口接收到的所有至今未决的未被服务的业务请求消息,TICC -Ppde提供方法使得没有TIP执行曾被中断并且同时迅速注意到所有中断;
方法(3.24),被编程的暂停:在蜂窝C的端口C.p的C.p:TIP()中的pthread被编程来在C.p:TIP()执行中间暂停其执行,蜂窝C在暂停它的C.p:TIP()中计算后立即进行轮询它的下一个端口,由于在暂停时不满足进行C.p:TIP()执行中的进程所需的条件而导致这样的被编程的暂停,当所述所需的条件满足时在蜂窝C的保证轮询周期中自动恢复在端TM
口C.p的被暂停的计算,TICC -Ppde提供用于执行这样的被编程的暂停的工具;
方法(3.25),启动A:implementation()中的并行计算:也被称作配置器蜂窝的用于TM
设置环境的蜂窝还被用于启动应用A中的计算,通过用户点击由TICC -GUI显示的环境蜂窝的图像并从显示的目录中选择启动计算的选项来启动计算,环境蜂窝通过将预定消息发送到A:cells()中的指定启动蜂窝的指定端口来响应这个选择的选项,将所述消息传递到所述指定的蜂窝的协议在消息传递前自动激活所述指定的蜂窝,所述指定的蜂窝在由TM
TICC -Ppde分配给它们的CPU中运行,一旦被激活,如果必要,所述指定的蜂窝初始化自己,,如果必要,在这样的初始化中安装其余的A:TICCTM-network(),此后所述指定的蜂窝中的每个启动它们各自的轮询周期并且在这些轮询周期中感应传递的消息,响应这些消息TM
并使计算生成其余的A:TICCTM-network(),TICC -Ppde提供工具来如上所述启动并行计算;
方法(3.26),停止并行计算:当A:cells()中的蜂窝正运行于它们各自分配到的CPU中时A:cells()中的特定的指定蜂窝负责终止计算,发送中断消息到环境蜂窝要求环境蜂窝终止计算,这些终止请求到达环境蜂窝的中断端口矢量的不同中断端口,中断消息在不同时间到达所述端口矢量的中断端口,环境蜂窝仅在所有中断端口已经接收到中断消息后才响应在所述中断端口接收到的中断消息,当所述矢量中的所有中断端口已经接收到中断消息时环境蜂窝通过它的其中一个总端口将终止中断消息广播到应用A中的所有其他端口,A:cells()中的每个蜂窝接收终止中断消息,终止自己感应该终止中断消息的接收,每个这样的蜂窝仅在服务了所有在其端口的至今未服务的待决消息并在终止前将响应消息发回环境蜂窝以确收终止中断消息后终止,路径上的代理仅在A:cells()中的接收到终止中断消息的所有蜂窝已经响应了中断消息后将A:cells()中的蜂窝连接到环境蜂窝以调整所有这样的响应并将一条确认消息前传到环境蜂窝,并且如果必要,在从A:cells()的TM
所有其他蜂窝接收到此确认时环境蜂窝终止自身,ITCC -Ppde提供工具来如上所述停止并行计算;
方法(3.27),定义特权:A:cells()中的每个蜂窝具有能力来在自身上动态安装新的端口C.p,在A:cells()中安装其他的蜂窝C’,并且在所述端口C.q和新安装的蜂窝C’的端口C’.p之间安装路径,蜂窝C发送请求来安装这样的新蜂窝和路径到应用A中的配置器蜂窝,应用可以具有多于一个配置器蜂窝,配置器接收这样的请求以首先检查请求这样的安装的蜂窝是否具有必须的特权来使该安装执行,仅在满足必须的特权时执行服务该安装请求,并且然后将适当的响应回应发出请求的蜂窝,如果不满足必须的特权,则将特权违背通知到发出请求的蜂窝,根据该安装中的端口的数目,新蜂窝或新路径的安装需要大约250至500微秒,在2千兆CPU中新端口的安装需要30至50微秒,配置器在特权被违TM
背时发出特权违背报告,实施者有责任以满足ITCC -Ppde中的特权定义格式的方式定义A:cells()中与端口相关联的蜂窝,该端口将该蜂窝连接到应用A中的配置器,可以预安装各种空闲蜂窝、端口、代理、虚拟存储器和路径并将它们保持在保留池中,以在需要时被如TM
应用A中的配置器使用,由此很大程度加速部件的动态安装,ITCC -Ppde提供工具用于定TM
义与ITCC -network()中的端口相关联的特权;
方法(3.28),定义安全功能:如具体实施方式的部分7所指定的,路径中的代理仅在端口满足该消息的事先指定的安装条件时将消息传递到端口,如果在该端口违背了指定的安全条件则代理发出安全违背报告,所有消息交换等待时间将这样的安全检查所需的时TM
间包含于其中,应用A的实施者有责任遵循ITCC -Ppde中的规范定义所需的安全功能,TM
ITCC -Ppde提供工具来定义安全功能;
方法(3.29),从次存储设备和英特网访问外部数据:每个应用A具有A:cells()中的专用于从次存储设备和/或英特网访问数据的特定数目的蜂窝,并且将它们分发到请求该数据的端口的虚拟存储器,或者蜂窝将该数据请求发送到配置器,该配置器在检查请求了该数据的蜂窝的特权后发送对于该数据的请求到专用于获取该数据的蜂窝,或者蜂窝在自身上安装专用的新总端口,设置从这些总端口到专用于获取该数据的蜂窝的路径,用于这样的总端口和路径安装的特权已被预先授予这样的蜂窝,仅在满足了用于所请求的安装功能的、事先指定的安全功能时,蜂窝才经由新建立的路径发送对该数据的请求并获取返回TM
的所需数据,ITCC -Ppde提供工具来访问外部数据;
TM
方法(3.30),在使用断点运行应用时动态监视该应用:在的确可以使用ITCC -GUI检查SMS(自监视系统)的活动性来监视运行中的程序时,这样的监视不会向用户呈现于由SMS注册的事件相关联的数据,因此用户需要将断点插入到TIP C.p:TIP()中来检查与SMS中注册的事件相关联的数据,这里对于具有形式C.p:TIP()=C.p:guard?(){C.p:r().s()}的简单TIP描述断点的安装以动态地监视运行中的应用A,如在以下所示的修改的C.p:TIP()中,这样的断点的引入要求将短语C.g:pR?(){C.g:b().s();}附到C.p:tip(),
修改的C.p:TIP()=C.p:guard?(){C.p:r().s();C.g:pR?(){C.g.b(C,C.p).s();}}C.g是蜂窝C的空闲的未使用的总端口,路径C.g.pathway是在端口C.g与TM
ITCC -GUI的配置器的功能端口之间动态建立的,pthread C.g:b(C,C.p)是断点方法,C.g:b(C,C.p)从虚拟存储器C.g.vM读取蜂窝C和端口C.p的状态以及将蜂窝C和端口C.p的状态写入虚拟存储器C.g.vM,还在执行C.g:b(C,C.p)时将与C.p:TIP()相关联的消息TM TM
写入C.g.vM,蜂窝C将写入到C.g.vM中的消息派送到ITCC -GUI的配置器中,ITCC -GUI的配置器使接收到的数据显示在屏幕上,可以将这样的断点插入到所有种类的TIP中,以此方式使用断点总是中断应用A中发生的事件的定时,因此仅在应用A的测试模式中使用TM
这样的断点,ITCC -Ppde提供工具来在TIP中定义和安装这样的断点;
TM TM
方法(3.31),用于封装A:ITCC -network()的子网络:ITCC -Ppde提供方法来将与TM
应用A的子系统B相关联的A:ITCC -network()的子网络封装到多个复合蜂窝,应用A的TM TM
子系统B的封装到复合蜂窝中的网络称作B:ITCC -network(),封装B:ITCC -network()的复合蜂窝称作复合蜂窝B,B具有两种端口即内部端口和外部端口,内部端口是附接TM
到B:ITCC -network()中的蜂窝的端口而外部端口是附接到复合蜂窝B的端口,存在TM
B:ITCC -network()的子集包含通过分支连接到内部端口的外部端口,每个内部端口实际上这样连接到B的一个外部端口,可以将复合蜂窝中的端口组中的内部端口通过复合蜂窝B的内部代理连接到B的外部端口,外部端口立即将它们接收的信号发送到它们连接到的TM
内部端口,B:ITCC -network()中的具有连接到B的外部端口的端口的不同父蜂窝并行感应和响应它们从外部端口接收到的信号,B中的没有连接到B的外部端口的所有其他内部TM TM
端口通过ITCC -Ppde的sm路径彼此连接,复合蜂窝B将A:ITCC -network()中的除了连接TM
到B的外部端口的内部端口之外的所有部件从A:ITCC -network()中的其他蜂窝隐藏,在复合蜂窝B的每个外部端口B.p的其余的TIP即B.p:TIP()与在连接到B.p的内部端口定义的其余的TIP即C.p:TIP()相同,这样封装的每个具有自身内置的SMS(自监视系统)的复合蜂窝B用作软件部件,该软件部件可以通过路径将复合蜂窝B的每个外部端口B.p连接到B外部的更大的软件系统中的蜂窝D的端口D.q,确保每对端口(B.p,D.q)充分匹配,而插入到该更大的软件系统,由此将封装的部件插入到更大网络中的能力使得能重新使用TM
软件子系统,具体实施方式的部分2.2中示出了这样的复合蜂窝的例子,ITCC -Ppde提供TM
工具来封装A:ITCC -network()的子网络。
4.根据权利要求1、2或3所述的方法,进一步包括以下属于多核芯片中的CPU的设计的额外方法以有效运行A:implementation():
方法(4.1),CPU设计和特定CPU要求的简化:如具体实施方式的部分4.6中所述,TM
ITCC -Ppde通过消除对使用加速技术的需要来简化CPU的设计,加速技术例如为高速缓冲TM
存储器执行、多指令流执行、指令的预测未来调度和流水线处理,但ITCC -Ppde需要在运行A:cells()的蜂窝的每个CPU中的小数目的特定设备,所述特定设备是(i)每个CPU中的硬件时钟,使能至附接到由该CPU运行的蜂窝的端口的消息传递的时间戳,在消息传递到所述端口时完成时间戳,消息并行地传递到所述蜂窝的端口,多个消息同时传递到所述蜂窝的多个端口是可能的,这样的多个消息同时传递到多个端口需要由所述蜂窝的所述多个端口同时询问的硬件时钟的设备来在消息传递时设置时间戳,(ii)需要每个这样的CPU实施CCP(因果通信原语)作为硬件指令,(iii)需要中断处理设备使得每个中断端口可以通过CPU运行所述中断端口的父蜂窝而直接使用CCP(因果通信原语)进行通信,CPU响应接收到的、由仅仅在所述蜂窝的连续TIP执行之间的CCP发送的中断信号,以及(iv)需要每个在单个芯片中具有多个SMP(共享存储器多处理器)的DMP(分布式存储器多存储器)TM TM
多核芯片也包含该芯片中集成的TICCNET ,所述TICCNET 将该芯片中的SMP互连,这些要求不会使得CPU设计复杂,然而会使芯片设计复杂,简化的CPU的设计增加了多核芯片中的TM
可实现的CPU的密度,TICC -Ppde提供的工具用于组织和执行并行计算由此简化CPU设计而不危及执行的效率;
方法(4.2),开发虚拟存储器组织:仅以不超过1万字至100万字的小私有存储器在SMP中设计每个CPU,但以使用可编程逻辑网络动态连接到任何一个独立硬件存储器模块集的能力来实施每个CPU,这些存储器硬件模块称作SMM(共享存储器模块),SMM保存在这样的硬件设备的池中,该池中的每个SMM具有1万字至十亿字范围内的存储容量,该池中的每个SMM允许不超过大约16个CPU同时访问它,在编译或运行时完成将SMM分配给虚拟存储器,应用A的A:cells()中的每个蜂窝的每个端口C.p仅在C.p授权蜂窝C访问虚拟存储器C.p.vM时动态将分配给父蜂窝的CPU连接到分配给虚拟存储器C.p.vM的SMM,在终止访问时将CPU从SMM断开连接,并可能将相同的CPU连接到与在蜂窝C的下一个端口的业务相关联的另一个SMM,这个安排使得能以减少的存储器干扰进行高速共享存储器访问、显著最小化具有256或更多数量级的大量CPU的多核芯片中的并行共享存储器软件系统中的存储器争用,对任何应用A提供本质的数据保护、数据保密和系统安全,然而,该安排要求存储器组织具有多条总线,每个SMM一条总线,每个SMM通过独立地运行与其连接的CPU可以被独立地同时寻址,且可编程逻辑网络在运行时间有效地动态改变CPU和SMM之间的连接,SMM从根本上消除在SMP中以数十或数百个十亿字大小的巨大共享主存储器组织CPU的破坏性遗留,简化CPU设计,但使得芯片设计复杂,而同时对更高的效率、软件安全性、私密TM
性和保护做出本质的贡献,TICC -Ppde因此使得能进行任意可升级安全保护的并行计算;
方法(4.3),异步硬件子系统封装:可以使用设计、实施到改进,正式验证和自监视的TM
相同技术来实施任何异步硬件系统,可以使用TICC Ppde封装技术来将硬件子系统封装到复合蜂窝,每个这样的复合蜂窝具有自身的SMS(自监视系统),将所有封装的部件对硬件系统中的其他部件隐藏,每个这样的复合蜂窝自己被用作硬件系统部件,在该复合蜂窝的所有外部端口与和其连接的更大系统的端口充分匹配的情景下被插入到该更大的软件系TM TM
统,由此促进具有嵌入式TICCNET 的多核芯片的制造,TICC -Ppde提供的软件封装方法由此也可应用于硬件系统;
5.根据权利要求1、2、3或4所述的方法,还包括以下方法用于正式使
A:implementation()有效:
方法(5.1),从A:implementation()得到A:ALLEOPS():方法在A:implementation()的改进的每个阶段自动从A:DESIGN()和A:implementation()中得到在该设计和实施中指定的计算的ALLEOP(允许事件发生模式)模型,这些模型使A:DESIGN()和A:implementation()中隐含的所有事件分类变得清楚,展示所述事件分类的因果链,该模型还展示可能在该设计和实施中指定的计算中出现的事件分类的模型,在A正运行时ALLEOP中的每个事件分类的多个事件实例出现在计算中,ALLEOP中存在两种事件分类,一种称作具有形式X的动作事件分类,动作事件是编程语言的语句的评估、条件的评估或pthread的评估,另一种事件分类称作通信事件分类,该通信事件分类具有用于发送消息的S F
端口C.p的C.p[t(C.p,#)]的形式或用于前传消息的端口C.p的C.p[t(C.p,#)]的形式,D
和用于传递消息到其他端口C’.p的C.p的C’.q[t(C.p,#)]的形式,在通信事件分类中出现的术语t(C.p,#)称作时间地图,每个t(C.p,#)是指时间实例的顺序t1<t2<…<tn,S F D
n≥0,所述事件分类C.p 或C.p 或C’.q 以该顺序出现在A:implementation()的运行中,符号#,0≤#<n≥0,(n-1)是具有端口C.p的时间地图出现在CIP(蜂窝交互协议)中的总次数,符号X和Y此后用于指任何的所述事件分类,ALLEOP中的动作事件或通信事C(X,Y)
件分类X和Y的一些对通过具有形式X →Y的加权的定向因果链来链接,ALLEOP中的其他事件分类的对由如X(t)→Y中的不加权的因果链来链接,ALLEOP的事件分类的又一些其他对不通过任何因果链链接,具有权重C(X,Y)的因果链如后所述被中断,在A正在运行中时出现ALLEOP中的每种事件分类的多个实例X(t),t=t1<t2<…<tn,n≥1,如TM
具体实施方式的部分2中所定义和描述的,TICC -Ppde提供了用于从A:implementation()得到A:ALLEOPS()的方法;
方法(5.2),得 到端口ALLEOP:方法用于 从C.p:TIP()得到端口ALLEOP 即C.p:ALLEOP(),端口C.p:ALLEOP()是A:TIPS()的C.p:TIP()的模型,C.p:ALLEOP()具有形式
C.p:ALLEOP()=C.p:ALLEOP-guard?(){C.p:ALLEOP-body()} (C.8)
在具体实施方式的部分2中描述了用于从C.p:TIP()自动得到C.p:ALLEOP()的方法,使用称作BILL-BEN应用的示例应用用于描述上述方法,C.p:ALLEOP()提供A:implementation()的ALLEOP的便利模块化描述;
方法(5.3),用于构建ALLEOP图表:具体实施方式的部分2的图6A中描述了
BILL-BEN:ALLEOPS()中的所有端口ALLEOP即C.p:ALLEOP()的图表,该图表是以与TM
BILL-BEN:TICC -network()和BILL-BEN:TIPS()中的TIP指定的路径互连一致的方式,通过链接与BILL-BEN:cells()中的不同蜂窝C1和C2的端口C1.p和C2.p附接的端口的ALLEOP对C1.p:ALLEOP()和C2.p:ALLEOP()而获得的,具有加权的定向因果链C(X,Y)→或因果链→不加权,因果链代表了反自反的、传递的和非对称的因果关系,在以下方法(5.4)中描TM
述了用于解释这些定向因果链的方法,由TICC -Ppde自动从A:implementation()得到在与因关联互连的端口ALLEOP中的所有事件类型和与通信事件类型相关联的时间地图,所TM
述图6A的图表是BILL-BEN:ALLEOPS()的代表,TICC -Ppde提供方法来类似地对任何应用A自动从A:implementation()得到并对任何应用A构建与所述图6A中所示的相同的A:ALLEOP()的图表代表;
方法(5.4),解释ALLEOP图表中的因果链:在方法(5.3)中引入的ALLEOP图表中出C(X,Y)
现的具有形式X →Y的每个加权的定向因果链代表了有条件的因果链,所述ALLEOP图表中出现的具有形式X→Y的每个定向因果链代表了无条件的因果链,这些因果链被解释如下:如果在时间t1事件分类X的事件实例X(t1)的出现导致之后事件分类Y在A:implementation()的运行中在时间t2出现,写作X(t1)→Y(t2),则在A:ALLEOPS()C(X,Y)
的图表代表中应当存在有条件的因果链X →Y或无条件的因果链X→Y,从而在有条件的因果链的情况下Y(t2)是Y的实例且条件C(X,Y)在时间t2为true或在无条件的因果链并且t2≤t1+τ(X,Y)的情况下Y的实例Y(t2)无条件地出现,τ(X,Y)是在TM
X(t1)→Y(t2)中的两个事件X(t1)和Y(t2)的出现之间的最大允许的延迟,TICC -Ppde中的并行程序的执行特性使得可以以精确定义的时间界限来预计事件执行,上界τ(X,Y)首先由A的实施者从pthread和协议的期望的或测量的运行时间估计且之后在利用完成的TM
A:implementation()确认的,TICC -Ppde提供工具来正确解释ALLEOP图表;
TM
方法(5.5),构建因果网:在A:implementation()的运行期间由TICC -Ppde的SMS(自监视系统)自动产生的、ALLEOP中的具有因果链的仅仅通信事件分类的事件实例的网络被称作A中运行的因果网,可能在应用A中任何运行中出现的所有可能的因果网的集合的代表被称作A:CausalNet(),在具体实施方式的部分2的图6B和6C中描述了BILL-BEN示例的因果网,A的不同运行由于不同的条件在不同的运行中变成true而产生不同的因果网,不是所有ALLEOP节点都具有在A:implementation()的任何给定运行中的因果链中出现的实例,(A:CausalNet()satisfies A:ALLEOPS())在且仅在以下逻辑条件保持true时才为true,
语句(C.9)断言,当且仅当A:ALLEOPS()中的通信事件分类X[t(C.p,#)]的每个通信事件实例X(t1)以及每个因果链(X(t1)→Y(t2))出现在A:CausalNet()中时,应用A的A:CausalNet()满足A:ALLEOPS(),A:ALLEOPS()的图表中存在具有因果链x[t(C.p,#)]→…→Y[t(C’.q,#)])的通信事件分类Y[t(C’.q,#)],如此Y(t2)是Y[t(C’.q,#)]的实例且t2≤t1+τ(X[t(C.p,#)],Y[t(C’.q,#)]),因果链x[t(C.p,#)]→…→Y[t(C’.q,#)]表示存在由因果链链接的一个或更多事件分类的序列从ALLEOP中的事件分类X[t(C.p,#)]导致事件分类Y[t(C’.q,#)],以精确指定的时间界限预计因果网中出现的事件的能TM
力使得可以使用TICC -Ppde平台来利用自监视应用对信息物理并行软件系统进行设计、TM
研发、实施、有效和运行,从(C.9)的意义上说,TICC -Ppde提供了工具来构建因果网并验证所述因果网满足与其相关联的ALLEOP;
方法(5.6),从A:ALLEOPS()自动得到A:TRACES():轨迹通常描述了在程序运行时TM
发生了什么,不同编程规定使用不同格式来描述轨迹,TICC -Ppde中的轨迹不仅描述了A:implementation()运行时可能发生什么,还指定了在应用A的运行中出现的动作事件的语义,语义是由条件指定的,在该条件下在任何给定的运行中可能出现交替事件集的交替,该轨迹还对每个动作事件指定应用A中的逻辑预条件和应用A中的逻辑后条件,该逻辑预条件对于发生的该动作时间应保持true,该逻辑后条件在动作发生后应保持true,如语句(C.7)和具体实施方式的部分3和5所述且如具体实施方式的附录I至III示出的定义中所描述,端口ALLEOP即C.p:ALLEOP()的轨迹称作C.p:trace(tp),tp是虚拟时间,在该虚拟时间中C.p:trace(tp)的事件可能开始出现在A:implementation()的运行中,TM
TICC -Ppde提供方法来使用A:implementation()中的规范和A:implementation()给出的TM
A:definitions()中的规范自动从A:ALLEOPS()得到A:TRACES(),TICC -Ppde提供工具来从ALLEOP自动得到轨迹;
方法(5.7),自动从A:TRACES()得到A:ECT-network():A:ports()中的端口C.p的TM
端口ECT(端口事件特性表)C.p:ECT(tp)由TICC -Ppde从C.p:trace(tp)自动得到,C.p:ECT(tp)代表便于正式提供由A:implementation()的实施者给出的CTL断言(因果暂时语言断言)的列表格式的C.p:trace(tp)中出现的事件,ECT网络是具有指定初始化条件的任何端口ECT集即C.p:ECT(tp)集的网络,遵照A:CIPS()的CIP中定义的轮询顺序和A:ALLEOPS()的C.p:alleop()中定义的消息交换彼此互连,如具体实施方式的部分
6中的表格I至V所示,A:ECT-network()是包含了用于A:ports()中的所有端口C.p的TM
C.p:ECT(tp)的网络,TICC -Ppde提供工具来从轨迹自动得到ECT网络;
TM TM
方法(5.8),设计验证:TICC -Ppde使用A:TICC -network()中的概要定义来自动得到称作A:designALLEOPS()的ALLEOP模型,A:TIPS() 和A:CIPS(),A:DESIGN()使得A:DESIGN()中隐含的所有动作和通信事件分类以及事件分类的因果链的同步和调整变得清楚,在具体实施方式的部分2中定义并描述了用于从A:DESIGN()得到A:designALLEOPS()的方法,在所述部分2中还定义和描述了用于从A:designALLEOPS()自动得到A:designTRACES()的方法,A:designTRACES()允许用户暂时地将定时和定时界限与所有的事件分类相关联并且验证事件分类的同步和调整以及A:designTRACES()中的时间分类的因果链,A:designECT-network()从A:designTRACES()中自动得到,A:designECT-network()用于正式使设计有效,有效标准由实施者如CTL语言中的断言TM
那样提供,所有这样被有效的CTL断言的集合称作A:requirements(),TICC -Ppde开发了用于A:requirements()中的CTL断言的正式证明,使用A:designECT-network()来使TM
A:DESIGN()有效,TICC -Ppde在正式证明的开发期间与用户交互,用户对在必要时通过提供额外的CTL断言来提供用于证明搜索的引导,在具体实施方式的部分6中描述了用于完成这些的方法,正式有效方法用于在所需要的CTL断言被发现在A:DESIGN()中不是有效的时候交互地产生计数器示例,实施者按照需要使用计数器示例来修改设计并使该设计重新有效,这样的有效还用于确保A:DESIGN()免于死锁和活锁,并确保A:DESIGN()中的进程,在出现死锁时死锁停止应用A中的所有操作,在出现活锁时活锁冻结A的一些子系统以防止它们执行所分配的任务,而其他子系统正常执行它们的任务,进程确保在应用A正在运行中出现的事件分类的事件实例的因果链总是满足如(C.9)中定义的A:designALLEOPS()TM
中的规范,TICC -Ppde提供工具来通过评估ECT网络上的CTL断言从而交互地验证给定的设计;
方法(5.9),验证pthreads的正确性:用于通过共有中间数据彼此交互的pthread的每个计算机程序集被联合地正式验证为是正确的,用于所有其他pthread的计算机程序被独立地正式验证为是正确的,实施pthread和条件的每个计算机程序被正式验证以确保该计算机程序满足语句(C.7)中给定的输入/输出特性,这是可能的因为每个pthread是仅仅运行大约10至100微妙的短计算机程序,提供A:implementation()的正确性需TM
要A:implementation()中的所有pthread的正确性,TICC -Ppde提供工具来交互地验证pthread;
TM
方法(5.10),用于证明实施者给定的CTL断言:TICC -Ppde提供方法来开发CTL断言(因果暂时逻辑断言)的交互证明,CTL断言的结构被非正式地定义在具体实施方式的部分
5.2的最后1段中,并且CTL断言的示例出现在具体实施方式的部分6中,CTL断言的特定语法不象对于任何CTL断言的明确解释那么重要,实施者给出的CTL断言通过在ECT网络上评估它们来使有效,在ECT网络上对CTL断言的评估生成与遵照具体实施方式的部分6中定义和描述的匹配标准给出的CTL断言相匹配的ECT网络中的事件的因果链,产生与给定的CTL断言相匹配的ECT网络中的事件实例的因果链的处理称作证明检查处理,证明检查的引导由用户提供,用于这样的交互的证明检查的方法在具体实施方式的部分6中说明,使用ETC网络的有效的CTL断言是A:implementation()的有效特性,因为在证明检查中使用的ECT网络所有都是自动从A:implementation()得到的,有效的CTL断言最终验证由A:implementation()中的路径连接的每对端口的充分匹配特性,由A:implementation()中的路径连接的端口对的充分匹配特性是从以下证明得出的:(i)pthread的正确性的正式证明,(ii)对表示A:CausalNet()中的每个因果网会总是满足如以上语句(C.9)中定义的A:ALLEOPS()的A:implementation()中的进程的正式证明,(iii)对用于A:DESIGN()的A:requirements()中的CTL断言的正式证明,(iv)对A:implementation()免于死锁的的证明,(v)对免于活锁的正式证明,在具体实施方式的部分6中示出了这样的证明的示例,(vi)对进程A:implementation()的正式证明,对A:implementation()的证明最终依赖于TM
所有被有效的CTL断言的集合,TICC -Ppde提供工具来使用ECT网络交互地验证CTL断言;
方法(5.11),用于对实施者提供引导来识别用于使A:implementation()有效的CTL断言:引导实施者定义使A:implementation()有效所需的CTL断言是由A:requirements()和以下断言(C.9)中指定的要求提供的,A:requirements()是由实施者在设计和实施应用A之前进行的对以CTL语言指定的应用A的要求的逻辑规范,可以在设计和改进期间更新,语句(C.9)提供引导来指定验证A:implementation()的正确性所需的CTL断言:
实施者使用标准(C.10)和关于由路径互连的所有端口对应当充分匹配的要求,来确TM
定它们没有错过使任何所需的CTL断言有效,TICC -Ppde提供方法来通过识别由路径连接TM
的还未被有效为充分匹配的端口来辅助用户,TICC -Ppde还辅助实施者交互地识别用于解释为什么给定的CTL断言在A:implementation()中不是有效的计算器示例,实施者使用计算器示例来按照需要修改A:implementation()并使修改后的实施有效;
方法(5.12),ad hoc同步和调整:与A:cells()中的两个与不同蜂窝相关联的且出现在A:implementation()的因果网中的两个事件X(t1)和Y(t2)从(t1≤t2)在A:implementation()的特定运行可能为true且(t1>t2)在其他特定运行中可能为true的度上说是不可比较的,A:implementation()的正确操作要求两个这样的不可比较的事件X(t1)和Y(t2)被调整或同步,事件X(t1)和Y(t2)的调整意味着它们中的一个应总在另一个出现之后才出现,例如,可以要求在A:implementation()的所有运行中(t1<t2)应保持true,事件X(t1)和Y(t2)的同步意味着在A:implementation()的所有运行中(t1TM
=t2)应保持true,TICC -Ppde提供ad hoc方法来调整和同步这样的不可比较的事件而不必改变A:implementation()的任何改进,这样的ad hoc同步和调整方法仅仅需要在出现了不可比较的事件的蜂窝的特定的新安装端口之间建立特定的新路径并以具体实施方式的部分6.6中描述的方式定义或重新定义在与所述蜂窝相关联的端口的TIP,可以还在A:implementation()中的任何两组不相交的不可比较的事件之间进行这样的ad hoc调整TM
和同步,这些ad hoc同步和调整对于TICC -Ppde是唯一的,不可能在任何其他并行编程范TM
例中不对改进进行外延修改而实施,TICC -Ppde提供用于这样的ad hoc同步和调整的方法。
6.根据权利要求1、2、3、4或5所述的方法,还包括以下SMS方法来在应用正在运行时并行于该应用动态地创建和分析因果网:
TM
方法(6.1),驱动SMS(自监视系统):以上语句(C.10)提供了用于TICC -Ppded中的操作的基础,路径中嵌入的代理使用CCP(因果通信原语)将信号发送到与SMS的EventBuilder蜂窝(eb蜂窝)附接的端口来在A:implementation()正在运行时在A:implementation()的成长的因果网中动态地安装消息分派和消息传递事件,如具体实施方式的部分7所述,每个eb蜂窝通过与其附接的端口矢量中的不同端口对连接到路径,该端口矢量中的一个端口从该路径中的代理接收表示在该路径中出现消息分派事件的信号,且该端口矢量中的另一个端口从该路径中的另一个代理接收表示在相同路径中的对应的消息传递事件的信号,如具体实施方式的图19中所示,在感应到传递到所述端口矢量中的两个端口的信号时,端口矢量的父eb蜂窝在成长的因果网中安装对应的消息分派和传递事件实例对,这样的因果网更新出现在接收到传递的消息的端口C.p的父蜂窝C正在执行C.p.tip()时,在成长的因果网中安装所述事件实例所花费的时间是执行C.p:tip()所需时间量的五十分之一至一百分之一,每个eb蜂窝能服务大约10至15条路径,允许由于所有蜂窝的轮询周期中的异步执行导致的延迟,由多个eb蜂窝进行的成长的因果网的并行更新是可能的因为每个eb蜂窝将仅在该因果网的不同的未互连分支中安装新通信事件,TM
TICC -Ppde提供工具来自动调整由eb蜂窝和ea蜂窝执行的并行计算,eb蜂窝通过使用CCP交换信号来与ea蜂窝通信;
方法(6.2),分析成长的因果网中的事件:A:cells()中的EventAnalyzer蜂窝(ea蜂窝)自动检查成长的因果网是否满足A:ALLEOPS(),eb蜂窝在每次它们在因果网中安装新通信事件时发信号通知ea蜂窝,ea蜂窝在每次A:implementation()的成长的因果网中的结构由于不满足以上给出的语句(C.9)而违背A:ALLEOPS()中的结构时报告错误,在成长的因果网中的一些事件违背事件出现的定时的指定上界时报告即将发生的错误,或在识别到成长的因果网中的预定义ALLEOP事件模式的出现时发出警报,一个或多个ea蜂窝专用于监视该成长的因果网发生预定义警告模式,存在至少一个ea蜂窝用于A:implementation()中的每个ea蜂窝,A:cells()包含与确保A:implementation()中的操作所需的蜂窝一样多的eb蜂窝和ea蜂窝而与A:implementation()中的事件的定时无干扰,所有eb蜂窝和ea蜂窝并行操作且并行于A:cells()中的所有其他蜂窝操作而与TM
A:cells()中的任何蜂窝的操作几乎没有干扰,TICC -Ppde提供工具来通过使eb蜂窝和ea蜂窝通过使用CCP交换信号而相互通信来调整由ea蜂窝和eb蜂窝执行的并行计算;
方法(6.3),自诊断和自修复:SMS提供用于在A:implementation()中最终构建自诊断和自修改设备的基础,ea蜂窝识别错误或即将发生的错误,直接与犯错误的蜂窝通信,并使用包含与犯错误的蜂窝相关联的事件的已被有效CTL断言来诊断和修复犯错误的蜂窝或动态地以新蜂窝来替换它们而不干扰A:TICCTM-network()中的其余的蜂窝的正常操作,在必要时,ea蜂窝通过以预定方式动态地改变并行计算来识别与识别的警报模式对应的预定义警报模式。
7.根据权利要求1、2、3、4、5或6所述的方法,还包括由TICC-Ppde引入的以下12种编程概要,使得能进行概要设计、通过连续改进的设计的实施,编程概要使得具有自动自监视的任意可升级大规模并行计算系统能有效运行,这十二种概要是,
概要(7.1),蜂窝:蜂窝是并行编程软件系统的计算单元的软件概要,蜂窝使得能进行并行软件系统设计、通过连续改进的实施的概要规范,每个蜂窝运行于专用的CPU(硬件计算单元)中,蜂窝通过彼此交换消息来执行并行计算,使用它们的端口来经由将蜂窝的端口互连的通信路径来发送和接收消息,由应用A中的路径互连的蜂窝的图表被称作TM TM
A:TICC -network(),蜂窝完全是自包括的而不使用操作系统辅助它们的操作,TIC -PpdeTM
提供工具来使得蜂窝自身执行构建A:TICC -network()所需的所有计算,调用并执行pthread来处理和构造它们彼此交换的消息,调用并执行协议来发送/传递消息,以及在接收到中断消息时暂停/恢复它们的操作,而无需来自蜂窝自身中未定义的任何软件的辅助或附接到或调谐到该蜂窝的软件部件的辅助;
概要(7.2),路径:路径是通信通道的概要,存在两种路径sm路径和dm路径,sm路径将SMP(共享存储器多处理器)中运行的蜂窝的端口互连,dm路径将DMP(分布式存储器多处理器)中运行的蜂窝的端口互连,DMP的计算节点是SMP,SMP或DMP中的每个端口仅附接到一个唯一的、称作该端口的父蜂窝的蜂窝,每个蜂窝具有与其附接的多个端口,蜂窝的每个端口仅连接到一条唯一的路径,附接到不同蜂窝的多个端口连接到相同路径,由此能进行组对组通信,路径包含代理和其中嵌入的虚拟存储器,相同代理或虚拟存储器从不嵌入到多于一条路径,代理在其嵌入的路径上执行消息传输的路由、同步和调整,代理还发送信号到SMS(自监视系统)以安装在其嵌入的路径中出现的消息分派和消息传递事件,对于任何路径P,P:ports()是连接到P的端口的集合,P:agents()和P:virtualMemories()是P中嵌入的代理和虚拟存储器的集合,这些集合P:ports()、P:agents()和P:virtualMemories()的联合是路径P的路径部件,没有两条不同的路径曾具有任何共同的路径部件,由此路径TM TM
使得能在A:TICC -network()中进行同时并行消息交换而无消息干扰,TICC -Ppde提供工TM
具来在应用A运行时在A:TICC -network()中安装蜂窝和路径;
概要(7.3),虚拟存储器:在安装路径时声明被称作虚拟存储器的软件概要,在应用的编译时间或运行时间将实际的硬件存储器区域或存储器模块分配给虚拟存储器,每条sm路径S仅仅具有嵌入其中的一个唯一的虚拟存储器S.vM,与任何sm路径连接的所有端口Pi存在于相同的SMP(共享存储器多处理器)中,与任何sm路径S连接的所有端口Pi具有与其相关联的相同的虚拟存储器Pi.vM=S.vM,每条dm路径D将存在于DMP(分布式存储器多处理器)的不同SMP(共享存储器多处理器)即SMP[j]中的端口组pG[j]互连,每条dm路径D具有嵌入其中的多于一个虚拟存储器,一个虚拟存储器pG[j].vM被调谐到每个SMP[j]中的端口组pG[j],pG[j].vM与pG[j]中的所有qj的qj.vM相同,虚拟存储器pi.vM和qj.vM保存经由所述路径传送的消息,所述虚拟存储器还保存端口pi和qj的父蜂窝分别使用的pthread和方法来处理和创建消息,此外,所述虚拟存储器还保存协议pi.protocol和qj.protocol,以分别在路径S和D上传送消息,虚拟存储器和路径对它们保存的所有pthread、方法和协议提供执行环境,虚拟存储器组织对以下方面做出贡献:数据安全、私密性和完整性,蜂窝执行的并行计算的隔离,并行计算的高效执行以及多核芯片的共享存储器多处理器设计的简化;
概要(7.4),协议:与每条路径连接的每个端口p具有对其定义的协议p.protocol,仅允许p的父蜂窝执行p.protocol,由端口p的父蜂窝进行的p.protocol的执行使得信号由路径部件交换,由路径部件交换的信号在路径上行进最终建立上下文,在该上下文中,p.vM中的消息在sm路径中被传递到它的期望接收者或在dm路径中经由硬件信号传输线传送到它的期望接收者,dm路径中嵌入的硬件代理还参与到协议执行中来在所述带代理嵌入的dm路径上发送、调整、同步和路由消息,协议使得能够进行仅由应用中的路径数目限制的该应用中的多个同时并行消息交换;
概要(7.5),CCP(因果通信原语):CCP用于在路径中的部件之间可编程地交换信号,TM
每个CCP是TICC -Ppde编程语言中的具有形式X:x→Y的语句,X、Y是路径中嵌入的部件,x是由CCP从X到向Y发送的信号,通过部件X、Y发送/接收的信号控制X、Y中嵌入的ndFSM(非确定性的有限状态机)的状态,CCP以软件或硬件执行,硬件CCP被执行作为CUP中的机器指令,每个协议由CCP的串联来定义,这样的串联具有X:x1→Y:x2→Z的形式,TM
X、Y、Z是相同路径中的所有部件,协议中出现的CCP有时嵌入在TICC -Ppde的其他编程语句中,仅花费25至50纳秒来在2千兆赫兹CPU中执行软件CCP,仅花费5纳秒在2千兆赫TM
兹CPU中执行硬件CCP,CCP是TICC -Ppde引入的中心的且最重要的概要,CCP单独负责使TM
TICC -Ppde中的并行程序组织成为可能;
概要(7.6),调谐和附接:任何交换信号的路径p的所有部件总是彼此调谐,调谐使得每个这样的部件总是准备好接收并立即响应它们从该路径中的其他部件接收到的信号,由此使得能够以最多几百纳秒范围内的等待时间使用2千兆赫兹CPU经由路径P进行确保的高速消息交换,调谐是自反的对称关系,任何蜂窝C仅仅能执行C或连接到与C附接的任何端口的任何路径中嵌入的部件中定义的方法或pthread,C仅仅使用附接C的部件中定义的数据或所述路径的部件中定义的数据,附接是自反的、对称的、传递的关系,调谐和附接对TM
TICC -Ppde中的并行软件系统的模块化面向对象组织做出贡献;
概要(7.7),端口:端口是软件概要,每个端口p附接到它的唯一的父蜂窝,端口p具有与其相关联的唯一虚拟存储器p.vM,端口p的父蜂窝使用p将p.vM中的消息经由与p连接的路径发送到其他蜂窝并经由相同的路径从其他蜂窝接收消息,每个端口p通过仅在它的父蜂窝准备好使用数据和方法时对它的父蜂窝给出对于数据和方法的访问权来保护p.vM中的数据和方法,每个端口p具有嵌入其中的包括S(发送)和R(接收)2个状态的非确定性有限状态机p.ndFSM,该状态被使用于调整由p的父蜂窝执行的消息发送/接收操作,该状态还被用于控制由p的父蜂窝对虚拟存储器p.vM的访问,在具体实施方式的部分1的图
1至4中描述了该调整和访问控制方法,p的父蜂窝仅在p.ndFSM的状态为S时具有对虚拟存储器p.vM的访问权以经由端口p将消息发送出去,端口p仅在p.ndFSM的状态为R时接收消息,dm路径中的端口包含具有S、S’、R、R’即两个消息发送和两个消息接收状态共四种状态的p.ndFSM,端口不仅对它们的父蜂窝发送和接收消息,端口还控制对于虚拟存储器的访问权且由此保护虚拟存储器中的数据和方法,此外它们使得动态分配给虚拟存储器并在需要时由CPU使用的硬件共享存储器模块的分布式组织成为可能;
概要(7.8),代理:sm路径中的代理是软件概要,代理嵌入在路径中,每个代理a包含嵌入其中的具有状态S(发送)和R(接收)两个状态的ndFSM即a.ndFSM,代理使用它们的状态来在它们嵌入的路径上路由、同步和调整消息传送,如具体实施方式的部分1、图2至4中所述,代理还发信号到SMS的部件以在运行中的应用的因果网中安装所述代理嵌入到的路径中出现的消息分派和消息传递事件,如具体实施方式的部分6、图19中所述,dm路径包含具有S、S’、R、R’四种状态的硬件代理,代理自动同步和调整所有通信,加强安全并驱动TM
自监视系统,由此在TICC -Ppde中扮演唯一且中心的角色;
概要(7.9),TIP(线程交互原语):TIP是指定应用A中的端口p的父蜂窝如何接收和响应传递到p的消息的、或指定父蜂窝如何检查端口p准备好发出消息、构造消息并经由端口将消息发送出去的软件概要,附接到应用A的每个蜂窝的每个端口具有对其定义的TIP,一些TIP嵌入在其他TIP中,在蜂窝的端口定义的所有TIP的集合被该蜂窝使用来执行应用A中的并行计算,存在指定所有并行计算所需的五种TIP,每种中存在两类TIP即同步TIP或异步TIP,TIP提供蜂窝间的交互的紧凑模块化规范,该规范可以如任何计算那样变得复杂,TIP提供的交互的模块化特性促进应用的实施的正式验证和有效;
概要(7.10)CIP(蜂窝交互协议):CIP是指定蜂窝如何初始化本身、轮询自己的端口、处理传递到自己的端口的消息并且响应该消息、或者创建新消息并将该新消息经由自己的TM
一个或多个端口发送出去的软件概要,CIP提供使得TICC -Ppde中所有的并行计算可能的基本引擎;
TM TM
概要(7.11),A:TICC -network():A:TICC -network()是应用A中的并行程序执行的TM
控制结构的软件概要,A:TICC -network()隐含指定了在对应用A的并行程序的执行期间出现的所有计算和通信活动的同步和调整,正如相同的顺序程序可以运行于不同数据结构定义中一样,如果正确地定义了该顺序程序和数据结构,则应用A的相同的pthread的集合TM
A:pthreads()可以运行于不同的A:TICC -network(),如果正确地定义了CIP(蜂窝交互协议)中的初始化规则,则由此使得能够通过改变执行控制结构来继续使能程序优化;
TM TM
概要(7.12),自监视系统SMS:SMS是对于TICC -Ppde唯一的概要,SMS是TICC -Ppde中使用来在应用A正运行时与该应用并行且与该应用中出现的事件的定时无干扰地监视正运行的应用A的性能以检测和报告性能中的错误、待决的错误以及事件的预定义模式的出现的机制的软件概要,SMS使用被称作eb蜂窝(事件构建器蜂窝)和ea蜂窝(事件分析器蜂窝)来构建并不断地监视运行中的应用的成长的因果网。
TM
8.根据权利要求1、2、3、4、5、6或7所述的方法,还包括TICC -Ppde中引入的五种验证TM
概要,该验证概要能使TICC -Ppde正式使使用权利要求7中的概要执行的并行程序有效,并通过自动自监视运行它们,这五种验证概要是,
概要(8.1),事件分类:事件分类是应用A正在运行时出现的计算和通信事件的概要,每个事件分类是一对(name,t),存在动作事件分类和通信事件分类两种事件分类,动作事TM
件分类中的分类名称表示TICC 编程语言的语句,或表示线程,或表示实施应用A的并行程S F D
序中的条件,通信事件分类中的分类名称具有形式p、p 或p 中的一种,其中,p是应用A的端口的名称,上标S表示端口p正在发送消息,上标F表示端口p正在前传消息,以及上标D表示消息正在被传送到端口p,t代表应用A的运行中可能出现的事件分类的事件实例的时间点顺序,t被称作命名的事件分类的时间地图;
概要(8.2),允许的事件出现模式ALLEOP:ALLEOP代表计算的依赖性的概要,通过事件分类之间的二进制因果关系来表示所述依赖性,ALLEOP是通过代表事件分类对之间的因果关系的有条件或无条件定向箭头彼此连接的事件分类的网络,因果链是由定向箭头(因果关系)连接的事件的顺序,因果关系是反自反的传递的非对称关系,事件类型的因果链的网络捕获在应用A正在运行时应用A的并行程序中出现的计算的事件实例的模式,p:port-ALLEOP()是在p:TIP()中出现的事件分类的所有因果链的集合,C:cell-ALLEOP()是在C:CIP()中出现的事件分类的所有因果链的集合,A:ALLEOPS()是应用A中出现的事件分类的所有因果链的集合;
概要(8.3),事件实例和轨迹:事件(name,ti)是在应用A正在运行时在时间实例t=[t1,t2,…,tn,…]出现的事件分类(name,t)的实例,i=1,2…,n…,n≥0,在n=0时不存在事件分类(name,t)的实例,各事件分类(X,tx)和(Y,ty)的事件实例对X(ti)和Y(tj)仅在它的对应的事件分类由ALLEOP中的这样的箭头连接时通过表示因果关系的有条件或无条件的定向箭头彼此连接,应用A的任何运行中出现的事件实例的所有可能的因果链的集合被称作A:TRACES(),A:TRACES()是从A:ALLEOPS()自动得到的,p:port-trace(tp)是从p:port-ALLEOP()自动得到的轨迹,C:cell-trace(tc)是从C:cell-ALLEOP()自动得到的;
概要(8.4),ETC网络:p:port-ECT(tp)是代表以列表形式组织的p:port-trace(tp)中出现的所有事件实例的因果链,p:port-ECT(tp)的网络是应用A中的端口的端口ECTTM TM
集,端口以与A:TICC -network()一致的方式互连,这样的ECT网络促进由TICC -Ppde进行的正式交互证明产生,C:cell-ECT(tc)是与C:cell-trace(tc)对应的ECT网络,A:ECT-network()是与A:TRACES()对应的ECT网络;
概要(8.5),因果网:p:causalnet(tp)是仅含有p:port-trace(tp)中出现的通信事件实例的因果链的p:port-trace(tp)的概要,C:causalnet(tc)是仅含有C:port-trace(tc)中的通信事件实例的因果链的C:port-trace(tc)的概要,A:causalnet()是仅含有A:TRACES()中的通信事件实例的因果链的A:TRACES()的概要,SMS(自监视系统)在其运行时自动产生应用A的因果网,并行于该运行,自动地监视动态成长的因果网以识别和报告错误、待决的错误以及事件实例的预定义模式的出现。
9.根据权利要求1、2、3、4、5、6、7或8所述的方法,还包括以下方法来提供集成的环境用于应用A的设计、开发、校验以及具有自监视的运行:
TM
TICC -Ppde自身执行对蜂窝的CPU分配,分配给蜂窝的CPU中的蜂窝的激活、并行处理管理、线程管理、通信、中断管理、安全增强、同步和调整,而不必调用操作系统或任何软TM
件来辅助执行这些服务的任何部分,TICC -Ppde仅针对存储器管理、高速缓冲存储器管理和对次存储器和英特网的访问权,使用当前原型实施中的操作系统,通过并行地提供所有TM
所需操作系统业务可以实施由TICC -Ppde中的操作系统当前提供的所有业务,由此提供环境用于集成设计、开发、验证和具有自我监控的并行软件系统的运行。
10.根据权利要求1、2、3、4、5、6、7、8或9所述的方法,还包括以下方法来设计、实施和运行并行编程应用A:
任何应用A的任何并行计算机程序使用任何或所有根据权利要求1至9所述的方法和概要,使用编程的信号交换,以或不以正式有效和自监视、或仅以部分正式有效和部分自监视,来组织和控制以硬件或软件实施的并行软件系统。

说明书全文

对于多核芯片建立正式验证的并行软件的TICC-范例

[0001] 发明人:Chitoor V.Srinivasan President,EDSS,Inc.
[0002] 优先权申请号:US 61/195,965
[0003] 优先权日期:10/14/2008
[0004] 第一部分:摘要
[0005] 第二部分:背景技术
[0006] 第三部分:发明内容
[0007] 第四部分:具体实施方式
[0008] 第五部分:权利要求
[0009] 第六部分:附图及简要描述
[0010] 词汇表:按照字母顺序的缩写
[0011] ALLEOP:允许的事件发生模式
[0012] CCP:因果通信原语
[0013] CCS:用于通信系统的微积分
[0014] CIP:蜂窝交互协议
[0015] CPU:硬件计算单元
[0016] CSP:通信序列处理
[0017] CTL:因果时间逻辑
[0018] Dm路径:分配的存储器通信路径
[0019] ECT:事件特征表
[0020] FSP:有限状态处理
[0021] ndFSP:非确定FSP
[0022] NFSP:非FSP
[0023] OO:对象导向的
[0024] Sm-路径:共享存储器通信路径
[0025] SMS:自我监控系统
[0026] TICCTM:用于集成计算和通信的技术
[0027] TICCTM-Ppde:基于TICCTM的并行程序开发和执行平台
[0028] TICCNETTM:基于TICCTM的局域通信网
[0029] TIP:线程交互协议
[0030] 第二部分:背景技术
[0031] 本发明教导如何使用TICC(用于集成计算和通信的技术,US专利No.:US7,210,145B2,2007年4月24日,发明人:Chitoor V.Srinivasan)来建立正式验证的大量并行软件系统,该大量并行软件系统是在任意大量共享存储器多核芯片(SMMC)或由局域TM TM
网互连的共享存储器多处理器(SMP)、TICCNET (基于TICC 的局域通信网)的任意集合上运行,并且以80%-100%的效率运行。组织和操作提供:(i)用于设计、实现和正式验证并行软件系统的理想环境;(ii)从被称为蜂窝的并行软件计算单元中的交互的摘要规范TM
开始,并且逐渐地将实现改进到它的最终形式;(iii)在具有TICCNET 的SMMC网络的多样性中提供用于开发大量并行软件应用的正确的编程摘要和工具;(iv)在实现的每一阶自动生成基于正式事件的定义的计算的模型,称为允许的事件发生模式(ALLEOP),其中(v)不仅被用于正式验证定义的计算的属性,例如在因果时间逻辑语言(CTL语言)中陈述的正确性、定时、同步、调整、进展、活跃度、避免死度,还用于(vi)自动实现自我监控系统(SMS),其监控在实现的应用的整个生命周期实现的应用的性能,该监控是与操作并行进行的并且不干扰实现的应用的定时,从而识别和报告性能的错误、即将发生的错误和告警情况定义的先验的发生。
[0032] TICCTM-Ppde是用于开发和执行基于TICCTM的并行程序的平台。其具有将所有将来的应用软件转换为完全验证的并行软件系统的潜,在具有多核芯片的各种台式机和笔记本计算机上运行,由此提供对于在我们今天使用的技术中不能实现的大量计算能力的简单的访问
[0033] TICCTM-Ppde采用和集成修改版本的七个其他编程范例(i)OO(对象导向的)范例[Martin 1,Alan 2,Armstrong 3,Bertrand 4],(ii))在参与者[Hewitt,5][Agha,6][Clinger,37]中的并行计算,(iii)如在π微积分[Milner,7,8,9]中的交互规范,(iv)如在CSP(通信序列处理)[Hoare,10,11,12]中的计算和通信的集成,(v)与通过FSP(有限状态处理)[Magee & Kramer,13]设计认证类似的实现的认证,(vi)与[Hoare,15]和[Manna,16.17,18]类似的NFSP(非NFS)系统的认证,以及(vii)使用修改的RESTCLK-路TM径的通信。在TICC -Ppde中使用的通信机制、并行程序组织和证明方法是新的。
[0034] 通过使用不同的TICCTM而可能进行这些范例的集成,其能够使得硬件和软件计算部件有计划地互换信号。通过有计划的信号互换来驱动所有通信、并行处理、p线程(并行线程)交互、安全执行、中断处理、同步、调整和自我监控,而不需要使用操作系统(OS),同时保持所有软件和硬件部件的相互隔离。应用的软件计算部件,称为蜂窝,并行操作并且不是如在FSP[Maggie & Kramer,13]和CCS(用于通信系统的微积分)[Milner,14]中时间分割的并发。每个蜂窝在它自己分配的硬件CPU中操作,并且除非已经被分配了CPU的该蜂TM窝暂停或终止其操作并释放了该CPU,否则其他蜂窝不使用该CPU。基于TICC 的并行处理需要并可以容纳大量CPU。除了简化并行编程和提供用于正式验证和动态自我监控的方法TM
之外,TICC -Ppde还提供一些其他益处,如在发明内容部分描述。
[0035] 具体实施方式部分通过一系列例子表示如下内容:(i)组织的基本原理;(ii)通信和计算的本质;(iii)由ALLEOP定义的计算模型,其是自动从实施中得出的;(iv)使用自动从ALLEOP得到的ECT网络(时间特征表网络)上给定CTL断言(因果时间逻辑断言)的评估来验证实施;以及(v)同步、调整、数据保护、安全实施和自我监控。
[0036] TICCNETTM是基于TICCTM的分布式存储器硬件通信网络,可以用于在包含256或更多SMMC(共享存储器多处理器芯片)和/或SMP(共享存储器多处理器)局域超级计算格网中在SMMC和/或SMP之间组对组的高速消息互换,每个SMMC或SMP具有32或64个处理器或更多。我们以单个芯片中集成的多个SMMC想象不远的将来的多核芯片。假设将TMTICCNET 本身集成到这样的多核多SMP芯片,用于在芯片中的SMP之间高速组对组地分布TM
式存储器消息互换。在本专利申请中仅描述TICCNET 中分布式存储器路径的结构,不描述TM
在TICCNET 中安装路径并且在安装的路径上发送消息的机制。
[0037] 第三部分:发明内容
[0038] 1.通过连续改进的实施:TICCTM-范例介绍了从被称为蜂窝的并行软件计算单元的集合之间交互的概要规范开始的通过连续的改进的应用实施方法。蜂窝经由附接于蜂窝的端口连接的通信路径在蜂窝之间交换消息来执行并行计算。如果存在任何名称的自变量的话,如果与调用和执行名称和自变量的实施上下文中一起指定名称和自变量,但是没有定义实施它们的计算机程序,则消息子分类、方法、并行线程或条件是概要。改进涉及消息子分类和计算机程序的定义,其定义了在应用的给定概要设计中的概要方法、p线程(并行线程)和条件。在给定概要规范中随着蜂窝之间的消息流以目标导向的方式执行改进。在每一级改进中,从实施规范中自动得出由定义的计算机程序执行的计算的ALLEOP模型。该模型被用于使得在不同级的改进中在CTL语言(因果时间逻辑)中断言的属性有效。如果已经对于实施中的所有概要方法、并行线程和条件定义了计算机程序并且已经完全定义了所有消息子分类,则完全改进了实施。
[0039] 2.ALLEOP和证明:如在部分2的具体实施方式中描述,ALLEOP指定应用中的允许的事件发生模式。存在两种事件分类:通信事件分类和动作事件分类。大体来说(在具体S F D实施方式的部分2和5中详细描述),通信事件分类是(p,t),(p,t)或者(p,t)对,其中p是通过路径发送、转发和接收消息的端口,上标S用于发送,上标F用于转发,上标D用于传递,并且t被称为时间地图,代表时间点的序列,在该时间点上在应用的运行中可以发生事件分类的实例。动作事件分类是对(name,t),其中name是变量、条件或动作并且t是表示时间点的序列的时间地图,在该时间点上设置和/或访问命名的变量,命名的条件变成真或者执行命名的动作。但是动作事件的实例可以改变并行计算的世界状态,通信事件的实例仅改变通信路径中部件的状态。
[0040] 用于正确操作的条件:我们写X(t1)来指事件分类(X,t)的实例,在时间t1发生事件实例X。如果在ALLEOP中(X causes Y)保持真,我们写(X→Y),如果(X causes Y)仅C(X,Y)当条件C(X,Y)为真,则写(X →Y)或者C(X,Y)?(){X→Y}。因果关系是不自反的传递的不对称关系,表示(X→Y)是不可能的,(X→Y)&(Y→X)也是不可能的,(X→Y→Z)C(X,Y) C(Y,Z) C(X,Y)&C(Y,Z)
暗示(X→Z),并且(X →Y →Z)暗示(X →Z)。因果链是连续因果关系
C(X,Y) C(Y,Z)
串联,如在(X→Y→Z)或(X →Y →Z)。以下解释因果关系:
[0041] 解释1:如果在应用的运行中,X的实例X(t1)使得Y的实例Y(t2)发生,那么在C(X,Y)ALLEOP中或者(X→Y)为真或者(X →Y)&(t2)为真,并且在两种情况下,(t2≤t1+τ(X,Y))应该也保持为真。
[0042] 项目(t2)断言在时间t2条件C(X,Y)是真。项目τ(X,Y)是是在两个事件实例(X,Y)的方式之间的最大允许延时。实施者在设计时估算这些最大值并且在以完成的实施进行试验时对它们进行确认。应用的因果网代表了在该应用运行过程中可能发生的通信事件实例的所有可能因果链的集合,动作事件被忽略。仅当在应用的每个因果网中下面的条件1保持真时,正确地操作应用(部分6.5,具体实施方式):
[0043] 条件1:
[0044]
[0045]
[0046] 这个条件断言对于在任何应用运行中发生的所有事件实例解释1应该保持真。这里的定时是用于模型计算的事件的属性,不是计算的参数。每个计算步骤具有与其相关的一个或多个事件。所有这样的时间发生在离散的实时时间点。在证明构建的过程中,以与ALLEOP中指定的时间地图一致的方式对于事件假定时间点。在条件1中以给定的紧的边界TMτ(X,Y)预期事件的定时的能力是TICC -Ppde执行特征(具体实施方式中的部分4.6)和参考下面的特征4加速技术的消除的结果。在证明构建中均使用事件发生模式、因果链、与它们相关的条件、事件定时和计算单元的状态。
[0047] ALLEOP对FSP(有限状态处理)和NFSP(无限状态处理)系统建模。不像在Maggie & Kramer[13]中使用的FSP模型,ALLEOP不是期望的系统设计的模型,而是实际实施的模型,自动地从改进的不同级的实施规范中得到。迹线自动地从ALLEOP得到并且从迹线自动地得到ECT(时间特征表)。ECT网络以表格的方式表示迹线中的信息,这对于ALLEOP证明构建是方便的。通过ECT网络上的CTL断言(因果时间逻辑断言)的符号评估进行被称为CTL断言的实施的属性的交互证明。CTL断言类似于Clark[38-40]Emerson,[41]和Sifakis,[42]中使用的断言,它们还以某种方式类似于[Magee & Kramer,13]中使用的FSP语言。但是,存在不同之处,这可以在具体实施方式的例子中被注意。用于CTL断言的特定句法不是重要的,只要其具有共同接受的毫无疑义的解释[38-42]。
[0048] 证明不需要用于CTL语言的推断引擎,证明仅需要在ECT网络(ECT的网络)上评估CTL断言的方法。然而,证明确实需要用于提议的表达式的推断引擎。在ECT网络上CTL表达式的评估提供了在证明中需要的提议推断的上下文。用户指定实施,要被证明的CTL断言以及提供可能与证明相关的定义、公理和其他CTL断言。在具体实施方式的部分6中示出的证明方法。有限ALLEOP具有等效FSP模型。给定的ALLEOP具有FSP和NFSP属性;后者的证明更复杂。
[0049] 3.动态自我监控SMS:SMS(自我监控系统)是TICCTM-Ppde程序执行机制的固有TM的内建部分。由此,当完成应用A的TICC -Ppde实施时,自我监控是自动的。实施者不用必须指定SMS的任何部分。在应用A运行时,与A的运行并行地,在A的生命周期中,对A的执行效率和定时具有很少甚至没有恶化,SMS动态地生成应用A的因果网,A的因果网是在A的运行过程中发生的所有且仅为通信事件链的网络。当违反条件1时报告错误;仅当对于ALLEOP中的一些事件分类X和Y违反了条件1中的指定上边界τ(X,Y)时报告紧急错误。甚至可以使用ALLEOP节点作为终端符号来定义正规文法中关键行为的模式,并且当在因果网中发生了任何定义的模式时,使得SMS发布告警。SMS提供用于进行自我诊断、自我修复和学习能力的基础
[0050] 4.高速并行通信:如在2007年4月24日的US专利No.7210145B2中描述的,TICCTMTM采用RESTCLK[Das,19]通信范例。TICC 中的通信是面向连接的:仅当两个蜂窝具有由通TM
信路径彼此连接的端口时,该两个蜂窝可以彼此通信。对TICC -Ppde采用RESTCLK改变了用于在路径中的部件之间交换信号的协议,修改了路径的结构以并入SMS,并且更重要的,不像RESTCLK,能够通过保证的高速消息传递来进行并行同步瞬时异步通信。
[0051] 每个端口可以仅附接于被称为端口的父蜂窝的一个蜂窝(防止端口争用),并且每个端口可以仅连接至一个路径(防止消息干扰)。存在三种端口,均为软件部件:用于发出业务请求消息的总端口,用于接收和响应业务请求消息的功能端口以及用于接收中断消息并对其做出响应的中断端口。每个蜂窝应该具有至少一个每种端口。
[0052] 在专利US7210145B2中描述的TICCTM,使用被称为通信处理器的特定蜂窝调度和实施消息交换,该蜂窝在应用A中与其他蜂窝并行操作。在应用A中的每个蜂窝发送请求以通过连接至该蜂窝的端口的路径将消息发送至A的通信处理器。通信处理器通过与在请求中指定的路径相关联地执行协议来发出消息。以通信处理器接收请求的顺序执行协议。由此,尽管使用具有1千兆比特每秒存储器总线的2千兆赫兹CPU,在共享存储器环境中仅花费几百纳秒来传递消息,用于传递消息的等待时间可以是6到10微妙那么多,因为用于发送消息的请求将不得不在队列中等待轮到它被通信处理器服务。在应用中可以被同时并行发送的消息的数目被限制为在该应用中不同通信处理器的数目。
[0053] 这个组织应该与下面说明的其中没有使用通信处理器的TICCTM-Ppde中的并行消息交换机制进行比较。每个蜂窝本身发送和传递所有它的消息并且可以被同时并行发送的消息的数目仅由在应用中不同路径的总数目限制。此外,在共享存储器和分布式存储器环TM境中均可以发生通信。如下列出在TICC -Ppde中通信的特征:
[0054] (4-i)路径和协议:蜂窝C的每个端口C.p连接至唯一的路径C.p.pathway。存在两种路径sm路径(共享存储器路径)和dm路径(分布式存储器路径)。术语路径指的是它们中的任一个。仅传递消息的路径具有与它们相关的虚拟存储器。不传递消息仅传递信号的路径被称为简单路径。在安装路径时对于路径声明虚拟存储器。在编译时间或者在运行时间将真实存储器分配给虚拟存储器。虚拟存储器保存被交换的消息,还保存处理和建立消息的方法和p线程(并行线程)。
[0055] 每个sm路径具有与其相关的唯一虚拟存储器。如果c.p.pathway是sm路径,则C.p.vM参考C.p.pathway的虚拟存储器。如果C.p.pathway是dm路径,则连接至C.p.pathway的每个端口q(C.p是这些端口q中的一个)将具有与其相关联的不同虚拟存储器q.vM,这些不同的虚拟存储器驻留在由dm路径互连的不同SMP(共享存储器多处理器)。每个端口C.p也具有与其相关联的不同的协议C.p.protocol。仅端口C.p的父蜂窝可以执行C.p.protocol。C执行C.p.protocol以通过C.p.pathway发送消息。在C.p.pathway上行进的信号最终建立了如下上下文:如果C.p.pathway是sm路径,则C.p.vM中的信号被传递给也连接至C.p.pathway的它的期望的接收者端口。在C.p.pathway是dm路径的情况下,C.p.vM中的消息通过硬件传输线被传送到连接至相同dm路径的其他端口q的虚拟TM TM
存储器q.vM。TICCNET 是包含在应用中的所有dm路径的通信网。在TICCNET 中不同的dm路径的数目可以是成千。简单路径将不具有与其相关联的虚拟存储器。
[0056] (4-ii)协议和CCP:所有协议由CCP(因果通信原语)序列定义,当执行这些序列时,使得与协议相关联的路径中的部件在它们之间交换信号,并且对接收的信号做出响应。每个CCP具有格式X:x→Y,其中X和Y是在路径中嵌入的部件,并且x是信号。由CCP的串联定义协议,该串联具有格式X:x1→Y:x2→Z,其中X、Y和Z是相同路径中的所有部件,并且x1和x2是信号。由路径部件交换的信号在路径上行进并且最终建立用于消息传递或传输的上下文。协议中的CCP可以嵌入到其他编程语句中,如在具体实施方式的部分1和
7所述。
[0057] 如在具体实施方式的部分1中描述,每个CCP的操作由路径部件中嵌入的ndFSM(非确定有限状态机)定义。花费了大约25到50纳秒以100百万比特每秒存储器总线在2千兆赫兹CPU(硬件计算单元)执行在软件中实施的CCP。CCP也可以被实施为CPU中的硬件机器指令。如果在硬件中实施,CCP执行将在2千兆赫兹CPU中花费不超过5纳秒。
[0058] (4-iii)调度延时的消除:为了发送消息,蜂窝C首先在与一个它的端口C.p相关联的虚拟存储器C.p.vM中写入要发送的消息。在C.p.vM中写入要发送的消息之后,蜂窝C本身立刻执行也与端口C.p相关联的协议C.p.protocol。C.p.protocol的执行使得信号沿着C.p.pathway行进。C.p.pathway可以是dm路径或sm路径。消息写和协议执行事件以相同方式发生,而不管哪种路径连接至端口C.p。当执行协议时在路径上行进的信号最终将C.p.vM中的消息或者传递或者传送到期望的接收者。不具有虚拟存储器的路径将仅传递信号而不是消息至它的期望的接收者。
[0059] 当执行协议时,蜂窝不使用在协议本身中没有定义的任何方法,蜂窝也不调用蜂窝外部的任何处理。在蜂窝执行的计算以创建和写入消息至虚拟存储器以及相同的蜂窝执行的计算以分派和传递消息/信号至它的期望的接收者之间不存在差异,除了定义这些计算的计算机程序的细节之外。这两个计算对于该蜂窝是严格私有的,并且完全独立于在其他蜂窝中发生的一切。因为只要蜂窝准备好发送消息/信号,由相同的蜂窝立即进行消息创建和消息/信号传输,完全消除了调度延迟。
[0060] (4-iv)同步延迟的消除:通过保持交换信号的每个路径的硬件和软件部件总是彼此调谐来消除同步延迟。每个这样的部件将总是准备好接收和立即响应由路径中的其他部件发送的信号。这种调谐是使用具体实施方式的部分1中描述的方法来实现的。调谐总地消除了在信号交换过程中的同步延时。
[0061] (4-v)异步通信&序列缓存的消除:任何蜂窝可以在它准备好发出和传递消息/信号的时候这样做。在通信的过程中既不阻碍消息发送也不阻碍消息接收。所有消息/信号交换是异步的。如在具体实施方式中定义的,从不使用队列缓存来支持这样的异步消息/信号交换,而是使用并行缓存机制,使用路径的虚拟存储器。
[0062] (4-vi)并行同步消息交换:不同的蜂窝可以同时仅执行与不同路径相关联的不同协议,这总是真的。这是因为:(a)每个蜂窝可以执行仅与附接于该蜂窝的端口相关联的协议,(b)每个蜂窝在任何时间仅执行一个协议,(c)每个端口可以仅附接于一个唯一的蜂窝,(d)没有路径可以在附接于相同蜂窝的两个端口之间传输消息,(e)连接至路径的消息发送和消息接收的父蜂窝在任何时间不能均执行与该路径相关联的协议,(f)由该路径上的代理自动调整多于一个连接至该路径的消息发送端口的由父蜂窝的路径的协议的同时执行,(g)路径(sm路径或dm路径)的协议的执行可以仅改变路径中部件的状态而不改变其他,(h)没有两个路径(sm路径或dm路径)共同共享任何部件,以及(j)每个蜂窝在它自己指定的CPU中运行,该CPU不与任何其他蜂窝共享。这些特征在一起保证了由不同蜂窝同时并行执行协议而不相互干扰,由此使得能够在sm路径和dm路径二者中进行并行消息传送,这样的并行同时消息传送的数目仅由应用中的不同路径的数目限制。
[0063] (4-vii)确保的高速并行通信:在TICCTM-Ppde中通信的下面四个特征确保在几百纳秒或更少的范围内的等待时间进行高速并行消息交换:(a)没有协议执行曾经由任何处理中断;(b)通过不同路径可以交换多个消息;(c)所有同步和调度延时可以被完全消除;以及(d)在异步通信中不使用序列缓存。
[0064] 如果在硬件中将CCP实施为在具有1千兆比特每秒存储器总线的2千兆赫兹计算单元中的机器指令,可以以几十纳秒通过sm路径交换点对点消息。根据每个端口组中端口的数目花费一百到三百纳秒经过sm路径进行从一组端口到另一组端口的组对组消息交换。可以在小于500纳秒(估计)加上信号传输时间中通过dm路径交换组对组消息/信号,在一个SMP中的消息发送端口组总是同步地将消息/信号传递到另一个SMP中的一个或多个消息接收端口组。在任意给定时间内在应用中同步发生的并行消息/信号传送的数TM目仅由应用的TICCNET 中不同dm路径的数目(其可以为上千个)加上在该应用的共享存储器环境中不同sm路径的数目(其可以为上万个)限制。
[0065] 由此,不像RESTCLK[Das,19],TICCTM-Ppde能够在大量并行软件应用的共享存储器和分布式存储器环境下在蜂窝之间进行高速同时并行消息/信号交换,具有确保的消息传递。
[0066] 5.自我调整和自我同步:在TICCTM-Ppde中由发送信号的路径中的代理自动调整和同步组对组通信和计算。每个组对组sm路径将一组总端口连接至一组功能端口。在端口组中没有两个端口属于相同蜂窝。sm路径仅包含一个虚拟存储器M。M具有附接于M的两个代理。一个代理连接至所有消息发送端口并且另一个代理连接至所有消息接收端口(见具体实施方式的部分7,图19)。组对组路径将由端口组发送的消息传递回到相同的端口组也是可能的(图17),这样的路径被称为在自我闭环路径。
[0067] 在端口组中的端口的父蜂窝被称为蜂窝组。如图19所示,总端口组G的父蜂窝可以经过将G中的端口连接至F中的端口的路径将联合业务请求消息发送给功能端口组F。与G中的所有端口和F中的所有端口相关联的路径的虚拟存储器被称为G.vM=F.vM。这个虚拟存储器保存由G中的端口发送的业务请求消息。仅在G中的端口的所有父蜂窝已经完成了它们各自的计算之后,路径中的代理分派G.vM中的业务请求消息,并且对G.vM中写入的联合业务请求消息做出贡献。这是分派调整,一旦被分派,在相同路径中的其他代理以在F中的连续端口之间在传递时间上不超过2或3纳秒来同步地将G.vM中的消息传递给F中的所有端口。这是传递同步。答复消息由F中的端口的服务网联合地写入到相同的虚拟存储器F.vM。在路径中的相同的两个蜂窝再次执行从F到G的答复消息的分派调整和传递同步。我们假设,通常端口组可以包含一个或多个端口,我们使用符号P来指代路径。
[0068] 彼此通信的蜂窝组中的蜂窝不参与分派调整和传递同步。在蜂窝组中的每个蜂窝与在该蜂窝组中的其他蜂窝并行地简单执行组对组路径的协议,只要蜂窝完成将要被发送的消息写入到路径的虚拟存储器中。在蜂窝组中的蜂窝的协议执行可以不都是同步发生,因为由蜂窝执行的计算不是彼此同步的。在路径中的蜂窝调整它的并行协议执行并且确保仅一次将联合业务请求消息同步地传递给接收功能端口。在路径P中的代理还执行若干其他任务:它们发送信号至连接至P的SMS(自我监控系统)的部件,从而指示这些部件安装与经过P发送的每个消息相对应的SMS中的消息分派和消息传递事件。此外,P中的代理实现数据安全性。仅当端口满足用于消息和端口的先验指定的安全条件时,代理将消息传递给端口。
[0069] 由P的协议指定在P中的代理执行的所有动作。所有这样的动作由代理独立于连接至P的蜂窝组中的蜂窝执行。系统实施者不用必须对它们的程序指定调整和同步方法。我们称这个为自我调整和自我同步(在具体实施方式的部分1和7中描述)
[0070] 蜂窝组中的每个蜂窝在它自己指定的CPU中运行,该CPU是不同的并且不与应用的任何其他蜂窝共享。当蜂窝组中的蜂窝处理被联合地传递给所有蜂窝的业务请求消息时,它们可能遇到彼此调整它们各自的计算的需要。它们通过彼此交换数据同时通过由保存业务请求消息的虚拟存储器提供的便签式存储器来对服务请求进行响应来进行调整。实施者应该并入由这样的蜂窝组中的蜂窝使用的方法、机制以通过使用便签式存储器交换数据来调整它们各自的计算。
[0071] 在TICCTM-Ppde中的组对组通信在并行计算中实施并行自我调整的和自我同步的分支/接合操作。
[0072] 6.有效的低粒度执行:TICCTM-Ppde的组织允许有效的高速执行,因为:(i)消除了通信、处理和p线程(并行线程)管理、调整、同步、中断处理、数据包含的安全加强中的操作系统干涉;(ii)消除了在所有通信中的调度和同步会话的需要;(iii)非常低的通信等待时间;(iv)并行同时消息交换;(v)消除了异步通信中的序列缓存;(vi)精确定时的程序和协议执行以及(vii)使用便签式存储器使得虚拟存储器组织可能进行最小存储器争用。因为通信的等待时间处于纳秒范围内,可以在大量并行计算中以几十到几百微秒量级的非常低的粒度来以好的效率(80%到100%)运行并行程序。
[0073] 7.多核芯片的理想环境:TICCTM-Ppde引入若干编程概要,他们中的许多对于编程技术是新的。与概要相关的软件工具有助于建立可以在多样化的多核芯片中运行的并行程序。在下面的列表中分项说明概要在并行程序开发和多核芯片环境的执行中的色以及与它们相关的工具。
[0074] 概要1:蜂窝、端口和路径:这些概要不是新的,但是它们在TICCTM-Ppde中特定的体现是新的。它们隔离和包含由在多核芯片中的每个CPU执行的计算,并且防止在由芯片中的不同CPU并行同时执行的计算之间的相互干扰。路径也隔离和保护消息,并且防止在芯片的不同CPU组之间并行同时交换的异步消息之间的相互干扰。提供工具以定义、安装和更新蜂窝和路径,管理至蜂窝的CPU分配、在分配的CPU中的蜂窝活动以及控制由CPU对TM虚拟存储器的访问。在TICC -Ppde中预先定义在任何并行编程应用中要被使用的端口和TM
路径的子分类。实施者必须定义在TICC -Ppde中没有被定义的非常规端口和路径子分类。
在应用中使用的每个蜂窝子分类应该被实施者定义。
[0075] 概要2:附接、调谐和代理:仅附接的和相互调谐的应用/软件部件可以彼此共享方法和数据,并且彼此交换信号。这不仅实现了蜂窝、CPU和消息隔离,而且巩固了在使用计算的自我同步和自我调整,以及消息/信号交换。附接和调谐作为编程概要对于编程不是TM TM新的。软件代理的概念不是新的。然而,TICC -Ppde中的代理的特定特性对于TICC -PpdeTM
是唯一的。由TICC -Ppde从蜂窝和路径的定义自动地执行附接和调谐。实施者不用必须TM
指定它们。在TICC -Ppde中预先定义在任何并行编程应用中可能使用的代理的子分类。
TM
实施者必须仅定义在TICC -Ppde中还没有被定义的非常规代理子分类。
[0076] 概要3:虚拟存储器:在计算系统中将专用硬件存储器与硬件系统相关联是常见的。但是使用专用的虚拟存储器作为软件系统中使用的硬件存储器的软件概要的概念是新的。这个概念首先由Gopinath[21]引入(即使没有使用这个术语),并且下面后本发明的TM发明人适配,对于TICC -Ppde中的并行程序开发和执行进行一些实现。在编译或运行时间的过程中,真实的存储器被分配给虚拟存储器。虚拟存储器简化了使用多核芯片的并行编程以及多核芯片的设计。
[0077] 虚拟存储器保存消息并且实现蜂窝/消息隔离。除了它们实现数据保护、数据安全之外,对处理和创建消息使用的方法提供执行环境,最小化存储器干扰(具体实施方式TM部分6.2),并且对于蜂窝组中的蜂窝便签式存储器以调整它们的动作。TICC -Ppde提供工TM
具来定义、声明、安装和更新虚拟存储器。在TICC -Ppde中预先定义要在任何并行编程应TM
用中使用的虚拟存储器的子分类。实施者仅必须定义在TICC -Ppd没有被定义的非正常虚拟存储器子分类。
[0078] 如下面的特征4和特征7中所述,虚拟存储器使能在SMMC(共享存储器多核芯片)中存储器组织的新方法,该方法简化了SMMC设计并且改善了它的性能效率。在SMMC中的每个CPU由最小量的私有存储器实施,具有10千字到1百万字的范围内的尺寸,并且没有高速缓冲存储器或任何其他加速机制。然而,SMMC具有10千字到1千兆字的尺寸的范围TM的硬件共享存储器模SMM的池。TICC -Ppd在编译时间或者在运行时间将SMM分配给应用中定义的每个虚拟存储器。在并行程序执行过程中,运行蜂窝的CPU被动态地连接至已经被分配给由这些蜂窝使用的虚拟存储器的SMM。当需要时,应用中的端口动态地调度并CPU和SMM之间的这样的连接的建立和拆除。每个SMM仅可以同时服务约8到16个CPU。
这个组织极大地减小了在包含256或更多CPU的大规模SMMC中的存储器干扰,并且还有助于数据安全和保护。
[0079] 概要4:CCP和协议:一个重要的概要是CCP(因果通信原语),其实际上使得所有TM其他概要的集成变为可能。在TICC -Ppd中使用CCP来定义通信协议,当执行时,使得信号在与这些协议相关的路径上行进。它们使得硬件/软件部件动态地和程序化地交换信号,由此将它们隔离并且还使得它们能够彼此合作。CCP导出的信号交换同步、调整和管理异步TM
软件/硬件部件,就像开始/完成信号同步、调整和管理异步硬件部件。在TICC -Ppd中预TM
先定义在任何并行编程应用中要被使用的协议。实施者仅必须定义在TICC -Ppd中没有被定义的非常规协议。
[0080] CCP消除了使用操作系统来管理硬件/软件交互、资源分配、处理/线程管理、中断TM处理、同步、协作和安全加强的需要。因为CCP本身可以是机器指令,CCP消除了TICC -Ppd中计算和通信之间的不同。执行计算的相同的蜂窝也执行所有需要的通信。不需要来自操作系统的支持以交换消息/信号,不需要监视器来管理处理/线程,不需要旗语[23,24]用于软件调整,并且不需要会合技术[10,12]用于软件同步。CCP的使用极大加速了通信并且TM
自然地导致了TICC -Ppd并行处理结构。使用CCP作为基本编程语言原语的概念对于编程技术是新的,并且将其实施为机器指令对于CPU的设计也是新的。
[0081] 概要5:TIP:TIP是线程交互协议。在实施中附接于蜂窝C的每个端口C.p具有对其定义的TIP,C.p:TIP()。TIP执行下面的功能:(i)它们通过应用中的端口之间的交互的概要规范有助于软件开发,并且逐渐将概要规范改进为最终规范。(ii)它们隔离来自每个蜂窝中的消息处理和消息构建计算的通信。(iii)隔离由不同蜂窝执行的并行计算。(iv)在细化的不同级允许用于实施的基于模块化事件的ALLEOP模型的自动获取。(v)使得在细化的不同级能够进行实施的系统的形式验证的ALLEOP的灵活使用。(vi)能够进行SMS(自TM我监控系统)组织。TICC -Ppd提供工具以定义、安装和更新在实施规范中的TIP,细化它们,并且从给定的规范在细化的每一级得到ALLEOP和迹线。作为编程概要,TIP对于编程TM
技术是新的。存在一共10个不同种类的TIP。这是实施者的责任来以与TICC -Ppd中的TIP定义格式一致的形式对于应用中的每个端口定义TIP,以及在正在被实施的应用中的TIP的期望功能。
[0082] 概要6:同步:
[0083] 周期同步:如果总是在p:TIP()的评估完成之后开始q:TIP()的评估,并且仅在前一个q:TIP()的评估完成之后开始下一个p:TIP()的评估,则与在应用中任意两个不同端口p和q相关的两个TIP,p:TIP()和q:TIP()是周期同步的。端口p和q可以属于应用中的任两个蜂窝;它们甚至可以属于相同的蜂窝。周期同步在应用中强加动作的调整(顺TM序)。TICC -Ppd提供帮助以周期同步与应用中的任意两个端口相关的任意两个TIP。
[0084] 同步:属于不同蜂窝的端口的TIP,p:TIP()和q:TIP()是同步的,如果总是在相同TM时间开始它们的评估。TICC -Ppd提供帮助以同步与应用中的任意两个不同蜂窝的端口相关的任意两个TIP。
[0085] TICCTM-Ppd提供系统化的方法以将周期同步和同步引入到设计中,或者通过适当TM的TIP和路径的定义引入到实施中。TICC -Ppd还在细化的任何级提供方法以引入这些同步作为事后同步,不需要改变对该点完成的任何细化(具体实施方式的部分6.6)。我们将TM
用于这样的事后同步的方法称为自组织同步方法。在TICC -Ppd中使用的所有同步和调整TM
方法对于编程技术来说是新的,并且对TICC -Ppd是唯一的。
[0086] 概要7:CIP:CIP是蜂窝交互协议。CIP是与蜂窝的初始化过程一起在蜂窝的端口定义的所有TIP的集合。CIP指定了蜂窝周期地轮询它的端口的顺序。存在两种CIP:在端口上一旦感应到消息的存在就立即调用为该端口定义的TIP的那些CIP,以及根据蜂窝本地的排序规则将具有消息的端口放到排序的端口列表中,然后以端口在列表中出现的顺序通过执行端口的TIP主体对端口做出响应的那些CIP。也可能蜂窝立即响应于某些端口而不是首先将该端口排序然后将其他端口排序。
[0087] 每个CIP与在唯一的CPU中与并行处理系统中的所有其他处理并行运行的唯一处理相关联。我们将参考这个CIP处理作为C:CIP()。C:CIP()在对其发送了消息的C的端TM口周期地执行TIP,继续它的操作直到它终止或暂停。TICC -Ppd将运行C:CIP()的CPU分TM TM
配给蜂窝C。此外,TICC -Ppd将每个蜂窝在它指定的CPU激活。CIP处理是TICC -Ppd并行程序执行中的唯一处理。它们的调度、CPU中的激活、暂停、重新开始、同步和调整都是由TM
TICC -Ppd完全管理而不需要使用操作系统。轮询以识别业务请求的接收并且以某种顺序对其做出响应的概念不是新的。在所有软件系统中广泛使用该概念。但是在CIP中的这个TM
业务的特定体现对于TICC -Ppd是唯一的。
[0088] 概要8:TICCTM网络:这以图形格式指定了在实施中使用的蜂窝、附接于蜂窝的端TM口间的路径互连。TICC 网络暗含地指定和实现了在应用中发生的并行计算动作的所有同TM
步和调整。实施者有责任指定用于应用的TICC 网络。一旦完成该指定,实施者对于下述完全没有责任:在应用正在运行时,在它们的并行计算程序中并入用于调整、同步或任意种类的并行计算的监控的任意设施。
[0089] TICCTM网络提供了正确种类的概要以指定和分析并行程序执行的控制结构。就像数据结构概要能够以不同的数据结构定义运行相同的序列程序以优化序列程序,只要序列TM TM程序的结构与数据结构相匹配,TICC 网络结构能够以不同的TICC 网络运行相同的并行应用程序的集合,从而试验和优化并行程序组织,只要应用中的每个C:CIP()中的初始化TM
例程与TICC 网络结构匹配。
[0090] 使用图形表示以捕获系统的部件之间的交互的控制结构不是新的。但是使用基于TM TMTICC 的并行软件系统的唯一解释的TICC 网络的具体体现是新的。
[0091] 概要9:ALLEOP和迹线:这两个概要被定义和使用的方式是新的并且对于TM TMTICC -Ppde是唯一的。TICC -Ppde提供了工具以从实施规范中自动地得到ALLEOP,并且使用它们以使软件系统有效。迹线的概念本身来说并不是新的。术语迹线用于指代在特定轮的程序执行中发生的描述。不同的编程规程使用不同的句法结构或图形工具来指定迹线。
TM
TICC -Ppde迹线具有唯一的特性:它们不仅指定在特定轮的应用中所有发生的,还定义并行计算的语义。迹线从ALLEOP和动作的输入/输出特性中自动得到。动作可以是p线程TM
(并行线程),或者单独的程序语句或条件。TICC -Ppde提供交互地定义动作特性所必须的TM
工具并且使用工具以自动地从ALLEOP得到迹线(具体实施方式的部分2)。TICC -Ppde还提供使用从迹线中自动得到的ECT网络(时间特征表网络)来使实施的属性有效的方法。
[0092] 概要10:SMS、因果网和eb蜂窝:因果网是迹线的概要,它们仅包含在迹线中发生TM的通信事件的因果链。由TICC -Ppde的SMS(自我监控系统)与A的运行并行地建立应用A的因果网,同时A正在运行。在应用A中的每个路径p中的代理发送信号至连接至路径P的SMS的特定蜂窝,称为事件建立者蜂窝(eb蜂窝),同时信号沿着P行进。每个路径P由专用eb蜂窝服务。给定的eb蜂窝可以服务多个路径。由P的eb蜂窝接收的信号指示eb蜂窝来在应用的增长的因果网中安装在P中发生的消息分派和传递事件。在由接收消息的端口的父蜂窝正在处理由P传递的消息的时候,eb蜂窝安装分派和传递事件。以路径上的信号传输并行地发生eb蜂窝的信令,并且以防止SMS事件的定时和应用事件的定时之间的干扰的形式,在由消息接收蜂窝完成的消息处理并行发生分派和传递事件安装。当SMS中的eb蜂窝正在建立增长的因果网时并行运行四个动作:(i)在应用中运行的所有蜂窝的动作,(ii)在SMS中向eb蜂窝发送信号的路径中的代理的动作,(iii)在eb蜂窝以新的消息分派和传递事件更新增长的因果网时eb蜂窝的动作,以及(iv)分析增长的因果网的SMS的ea蜂窝的动作(见下面的概要11)。
[0093] 每个eb蜂窝使用运行eb的CPU的本地时间来确定在应用中何时发生给定的消息分派和传递事件。因为运行eb蜂窝的所有CPU的本地时间与标准的全球时钟同步,所以通过eb蜂窝与因果网中的事件实例相关联的所有定时将与相同的全球时钟同步。运行应用中的其他蜂窝的CPU可以使用既不与全球时钟同步也不彼此同步的不同本地时钟。
[0094] 应用实施的规范自动地定义应用所需的SMS结构。TICCTM-Ppde自动调用和使用对于应用这样定义的SMS以动态地监控应用的每次运行。应用实施者不用必须写任何程序TM以对此进行帮助。在分布式存储器计算网格中由TICCNET 互连的每个SMMC(共享存储器多核芯片)X将具有它自己独特的本地SMS,X:SMS()。由X:SMS()建立的因果网将驻留在TM TM
本地共享存储器X中。当需要时,使用TICC -GUI(图像用户接口),TICC -Ppde可以在分布式存储器计算网格的不同SMMC中集成因果网并且限制在给定蜂窝中心的或应用中的端口的它的任何部分。
[0095] 概要11:SMS和ea蜂窝:SMS使用特定的蜂窝,称为事件分析器蜂窝(ea蜂窝)来在每轮应用中正在创建因果网时,持续地监控增长的因果网。按照条件1中的定义,目标是识别和报告在增长的因果网中的错误和未决的错误。Ea蜂窝也可以监控因果网以识别在因果网中的先验定义的事件模式的发生,并且发布告警。Eb蜂窝通过使用CCP交换信号来与ea蜂窝通信,从而以ea蜂窝执行的因果网分析来调整它们自己的因果网更新。SMS是部分TMTICC -Ppde并行程序执行机制。
[0096] 总结:在TICCTM-Ppde并行程序开发、有效、执行和自我监控中使用的所有上述编TM程概要和方法对于TICC -Ppde是唯一的。概要和方法一起提供所需的工具以安装和管理TM
并行程序中的概要的实例并且正式建立可以在与TICCNET 集成的各种多核芯片中运行的验证的并行软件系统。
[0097] 8.TICCTM-Ppde的显著特征:
[0098] 特征1:集成的环境:TICCTM-Ppde执行对蜂窝的CPU分配、在分配的CPU中的蜂窝激活、并行处理管理,p线程(并行线程)管理、通信、中断管理、安全实现、同步和调整,而不用调用操作系统或任何其他部件来执行这些蜂窝的任何部分。在当前的原型实施中,TMTICC -Ppde仅使用用于存储器管理、高速缓存管理和对次级存储设备的访问、输入/输出和因特网访问的操作系统。如在特征4中所述,高速缓冲存储器和通常用于CPU设计的所TM
有其他种类的加速技术可以在被用于运行TICC -Ppde程序的SMMC(共享存储器多核芯片)TM TM
中被完全分配。当前由操作系统向TICC -Ppde提供的所有服务可以被并入到TICC -PpdeTM
本身。由此,TICC -Ppde提供集成的并行程序开发、验证、执行和运行时间监控环境,其完美地适于开发、验证、运行和监控SMMC中或由若干SMMC构成的计算网格中的并行程序。
[0099] 特征2:TICCTM-GUI:TICCTM-GUI显示了在给定蜂窝固定的TICCTM-网络的段、在给定端口或蜂窝固定的ALLEOP的段、以及在给定端口或蜂窝固定的因果网的段的图形表示。TM TM
在具体实施方式的部分中仅出现TICC -网络显示的例子。TICC -GUI提供帮助以检查在应用中任意蜂窝的状态,同时在响应于接收的业务请求GUI轮询蜂窝状态的时间点运行TM
TICC -GUI。实际上不可能在与进行显示请求的时间请求精确一致的时间点显示蜂窝的状态。然而,可以设置断点并且当发生某个事件时显示状态。然而,将这样的断点引入应用A将改变在A中发生的事件的定时。由此仅可以在测试模式使用断点。GUI对文档系统实施和动态系统监控是有用的。TICC-GUI是TICC-Ppde的完整部分。
[0100] 特征3:任意可升级性:只要由升级引起的交互开销是小的,当与程序执行时间相TM TM比,在TICC -Ppde中的并行程序是任意可升级的。TICC -Ppde并行程序的独特之处是可TM TM
相关于TICC -网络的结构来精确定义交互开销。假设N是蜂窝和路径的TICC -网络,并且nmax(N,C)是在任意轮询周期中N中由蜂窝交换的消息的最大数目。假设nmax(N)是在N:nmax(N)=Maximum{nmax(N,C)|C∈N}中对于C的所有nmax(N,C)的最大值。假设v(N)是网络N中蜂窝的数目,并且假设N’是具有v(N’)蜂窝的N的升级版本。那么用于任意可升级性的要求是:nmax(N’)是独立于升级因子α=[v(N’)/v(N)]。如果条件满足的话,α的值将达到百万。这主要是说每个蜂窝的通信和调整开销不应该随着升级因子的增加而增加。
[0101] 特征4:消除高速缓冲存储器和加速技术:可以分配高速缓冲存储器用于运行TMTICC -Ppde并行程序。在我们的原型实施中,我们发现了更大程度上是损害的高速缓冲存储器。通过小粒度执行,在高速缓存补充和高速缓存不连贯中浪费太多时间通常是个问TM
题。我们必须更新主存储器中的数据以避免高速缓存不连贯。对于TICC -Ppde中的高吞吐量程序执行,不需要高速缓冲存储器。高吞吐量可以由蜂窝中的低粒度并行程序执行的TM
任意升级所实现的。实际上对于TICC -Ppde中的高效率和高吞吐量不需要任一个通常的加速技术,例如多指令流执行[29]、预测未来调度[30]、流线处理[31]和高速缓存的执TM
行[32]。在TICC -Ppde中,每个CPU专用于服务一个蜂窝,仅使用与该蜂窝相关的虚拟存储器。每个蜂窝在任意给定时间仅执行一个TIP并且TIP执行是不可中断的(部分5,具体实施方式)。包括计算和通信的用于执行TIP时间可以是10到100微秒那么小。不存在TM
同步、调整和监控开销。由此,在TICC -Ppde中不存在自然的上下文来有利地应用任意上述加速技术。这具有两个优点:(i)简化在SMMC(共享存储器多核芯片)中的CPU设计由此增加在芯片中的CPU密度,以及(ii)能够以紧的边界进行事件定时预测。
[0102] 特征5:通过自我监控开发验证的计算机物理实时系统的理想环境:在给定边界TM中以精确定时的软件执行是建立计算机物理实时系统的必要和重要的需要。TICC -Ppde有助于软件系统的形式有效、使用SMS的自动自我监控,以及通过精确定义的边界预测事件TM
定时。现在应该清楚的是TICC -Ppde提供理想环境来开发、有效和应用计算机物理实时系统等用于实例飞行器或空间飞行系统的自动导航、自动的多传感器应用、在军事车辆中的自动防御/侵犯协调或任意其他这样的时间关键的反映系统。它还被用于建立安全信息系TM
统等医疗信息系统或智能信息系统或任意其他数据库系统。对于TICC -Ppde显著的最广泛使用的应用是具有SMMC的个人计算机系统,其确保私有性和保护不受到所有未授权的入侵和攻击。
[0103] 特征6:动态灵活性和移动性:通过动态地改变路径连接并通过动态地引入新的TM蜂窝和路径,TICC -Ppde并行程序可以被动态地修改和更新。见专利US7210145B2用于在正常操作中使用具有很小或没有改变的老版本并行地本地测试新版本的蜂窝。通过将一个处理器中的虚拟存储器的整个内容转移到在分布式系统中其他存储器的其他虚拟存储器来实现分布式环境中的程序移动性。
[0104] 特征7:需要的CPU特征:在本发明中假设每个CPU将具有需要的特定应用以帮助允许它的本地时钟由连接至蜂窝的固定有限数目的端口(最多10或15)并行同步轮询。端口可以使得运行它的父蜂窝的CPU的时钟在消息传递给该蜂窝的时候通过发送CCP消息而被轮询,从而注册消息传递时间。可以在硬件中如下实施这个设施:运行蜂窝C的CPU可以将它的当前时间持续广播给在蜂窝的端口C.p的虚拟存储器C.p.vM中安装的特别指定的时间寄存器的集合,RT(C.p)(‘T’用于‘时间’)。每个端口C.p可以具有与其相关的额外的时间寄存器,称为传递时间寄存器RD(C.p)。每次向端口C.p传递信号时,在RT(C.p)中的当前时间被自动电波传送进入RD(C.p)。由此,在RD(C.p)中的时间将标记在C.p中的信TM号传递时间。这个布置将建立到TICC -Ppde使用的所有CPU。不需要使用操作系统来执行这个任务的任何部分。
[0105] 对于端口C.p,使用方法C.p:timestamp()来调用在C.p的这个时钟读取设施。应该注意到,不由时钟时间正在被读取的CPU,而是由允许将消息传递给C.p的蜂窝的CPU执行方法C.p:timestamp()。由此需要上述布置。每次将传递信号发送给应用中的任意端口C.p(具体实施方式的部分7)时调用该方法。不需要应用中的所有时钟同步。仅eb蜂窝的时钟应该均同步于公共全球时钟。在每个蜂窝中需要时钟的并行同步读取,因为消息可能被并行地同步传递给蜂窝的端口。
[0106] 存在用于CPU的若干其他需要。在SMMC(共享存储器多核芯片)中的CPU应该被设计不具有高速缓冲存储器,而是具有大约10千字到1百万字尺寸的有限数量的私有存储器。每个SMMC应该具有在这样的模块的池中保持的硬件共享存储器模块的集合。我们将它们称为SMM(共享存储器模块)。每个SMM的尺寸可以在10千字到1千兆字的范围内。每个SMM应该具有同时服务最多仅16个CPU(蜂窝组的最大尺寸)的容量。在编译时间和TM TM
运行时间由TICC -Ppde将SMM分配给应用中的虚拟存储器,TICC -Ppde从给定的实施规范中决定要被分配给不同虚拟存储器的SMM的尺寸。当蜂窝给出到这些虚拟存储器的访问权时,运行蜂窝的每个CPU可以被动态地连接至被分配给此时由蜂窝使用的虚拟存储器的SMM。可以使用CPU设计中的可编程逻辑网络来动态地将CPU连接至SMM存储器总线。
[0107] 这个方案消除了将SMMC与多个千兆字尺寸的共享存储器集成(存在数据安全和存储器争用的问题)的需要。这里提出的方案显著地减少了运行时的存储器争用。此外,单个大的共享存储器的缺乏和具有用于共享的严格有限的容量的虚拟存储器的使用提供了增加的安全性、私有性和数据保护,因为:(i)仅当端口满足对该消息和端口指定的先验指TM定安全条件时,每个代理将虚拟存储器中的消息传递给端口,以及(ii)在TICC -Ppde中的每个端口保护它的虚拟存储器中的消息,仅对它的父蜂窝并且仅当父蜂窝准备好发送消息或准备好响应于安全地传递的消息/信号的时候给出对它的虚拟存储器的访问权。此外,TM
TICC -Ppde不具有中央调度机制,并且没有中央处理和方法激活目录(动态链接库)。这些特征在一起建立了对数据偷盗和系统破解的强大屏障。
[0108] 第四部分:具体实施方式
[0109] 1.因果通信原语(CCP)和RESTCLK路径的适配
[0110] 为了方便和连续性,我们在这个部分描述在US专利No.:US 7,210,145B2,(发明人Chitoor V.Srinivasan)介绍的一些概念和机制,但是从不同的观点。在这个部分中我们还描述简单TIP(线程交互协议)、CIP(蜂窝交互协议)和简单通信协议的结构。
[0111] 在硬件系统中,通常使用信号来控制、同步和调整硬件部件的活动。在同步硬件中,使用时钟信号,在异步硬件中,使用开始和完成信号。如在US专利No.,US7,210,145B2,Gopinath[21]首先提出了在软件/硬件部件之间有计划地交换信号,并且[Das,19]首先定义了在其上信号可以行进的共享存储器RESTCLK路径的结构。Gopinath和Das使用短线程来发送、接收和处理信号,并且使用操作系统(OS)管理的时间分割的并发来实现它们的系统。使用由线程定义的信号交换机制来实现在共享存储器环境中的信息交换。使用例如以太网的网络设施来完成分布式网络上的通信[Spurgeon,22]。
[0112] 时间分割的并发线程调度和活动对信号交换引入了不确定性。不能在有界限的TM等待时间内传递消息并且常常丢失消息。TICC 适配并修改Gopinath和Das介绍的框架以在几十或几百纳秒范围内以有界限的等待时间提供确保的并行消息传递,用于应用以在OO(目标引导的)编程语言的情境下并行编程共享的存储器和分布式存储器系统。
[0113] 以高速进行软件/硬件部件之间信号的确保的有计划交换允许软件直接控制该TM软件在硬件系统中的执行,同时保持部件隔离。在TICC 中,我们当前在共享存储器和分布式存储器环境中,对所有的通信、处理和p线程(并行线程)调度和活动、中断处理、数据保TM
护、安全实施、同步、调整和自我监控进行上述处理。原型TICC -Ppde仅对存储器管理、分TM
页、缓存和输入/输出使用操作系统。应该最终在TICC -Ppde本身中实现所有操作系统业务。
[0114] 1.1.CCP和有计划的信号交换
[0115] 通过使用被称为因果通信原语CCP的新的编程原语在TICCTM中有计划地指定硬件/软件部件对之间的信号交换。每个CCP具有格式,X:x->Y,其中x是开始或完成信号,并且X和Y是软件或硬件部件。每种类型的信号可以具有为其定义的子类型。CCP类似于分配,因为其将信号分配给部件。但是与分配不同,信号分配的效果仅在一定延时之后出现。TM
在TICC 中,期望的效果最终是消息传递或者消息分派,由此命名为CCP。
[0116] 使用CCP指定信号交换具有如下优势:(i)仅作为分配,CCP可以自由地嵌入到其他编程语句中,由此能够在计算中进行有计划的信号交换;(ii)CCP可以被实现为CPU中的硬件机器指令;(iii)灵活地组织程序执行;(iv)消除通信和计算之间的区别;(v)对于共TM享的存储器和分布式存储器使用相同的协议调用格式;以及(iv)即使TICC 信号交换机制不同于RESTCLK[Das,19]信号交换机制,也可以仅以最小的改变来保持RESTC LK路径结构。
[0117] 由2态或4态ndFSM(未确定有限状态机)实现每个CCP。仅对于在FSM的每个状态中对于所有输入没有定义状态转换,FSM是不确定的。在2千兆赫的计算机中使用100兆比特每秒的存储器总线,花费大约25到50纳秒来执行在软件中实现的CCP。如果在硬件中实现为机器指令,在2千兆赫的CPU中,应该不超过5纳秒(估算)。
[0118] 对于点对点的消息传送,仅使用CCP控制的四个2态ndFSM,对于在共享存储器环境中从一组蜂窝到另一组蜂窝的消息传送,根据在一个组中蜂窝的数目(第七部分)可以TM使用8个或更多2态ndFSM,并且在使用TICCNET 的分布式存储器环境中,对于类似的消息传送使用直到10个或更多2态和4态ndFSM。将SMS机制集成到消息传送中还需要两个2态ndFSM(第七部分)。由此,如前所述,如果CCP被实现为硬件指令,则仅使用几十或几百纳秒用于点对点和组对组消息传送。
[0119] 每个蜂窝在分配给自身的CPU中执行所有它自己的通信协议。通信被减少为由ndFSM执行的Turing计算[Turing,20],并且变成由蜂窝执行的计算的完整部分。只要蜂窝的消息准备好,每个蜂窝立即通过连接至蜂窝端口的硬件/软件路径发送它的消息。不存在同步或调度延迟。由并行操作的蜂窝执行多个协议而没有相互干扰。然而,每个蜂窝可以在任何时间仅执行一个协议。这使得能够进行并行同步消息传送。所有的通信是异步的,并且不使用顺序缓冲器
[0120] 在读者可以看到如何从此直接得到发明内容中提及的优势之前,必须解释如何使得上述处理变得可能并且如何组织由每个蜂窝执行的计算和通信。
[0121] 1.1.路径协议、TIP、消息传输和计算
[0122] 蜂窝使用它们的端口经由与端口互连的路径来彼此交换消息。每个端口可以仅附接于一个唯一的蜂窝,称为它的父蜂窝(防止端口干扰),并且每个端口可以仅连接至一个路径(防止消息干扰)。存在三种端口:总端口g,蜂窝通过总端口g向其他蜂窝送出业务请求(类似于π微积分代理的输出端口[Milner,7,8,9]),功能端口f,通过功能端口f从其他蜂窝接收业务请求并且对其做出响应(类似于π微积分的输入端口),以及中断端口2
i,通过中断端口i从其他蜂窝接收中断消息(对此没有π微积分的类似物)。总端口 (黑体字用于分类的名称,普通字体用于分类实例)和功能端口是摘要分类,端口的子分类。中断端口是功能端口的子分类。每个蜂窝子分类应该具有至少一个每种端口。
[0123] 每个端口持有通信协议以通过与其连接的路径发送信号。使用具有格式X:x->Y:y->z的CCP的串联来定义该协议,其中X、Y和Z是路径中的分量,并且x和y是信号。CCP可以出现在能够嵌入到其他编程语言语句中的协议。随着路径的改变而动态地更新协议。由执行CCP的相互作用的ndFSM的集合定义每个路径。仅端口的父蜂窝可以执行与该端口相关的协议。
[0124] 路径和CSP通道:在共享存储器环境中的路径仅包含软件部件,类似于CSP通TM道[Hoare,10-12]。但是与CSP通道不同,并且TICC -Ppde中的并行线程对应于CSP中的通信序列处理。路径(i)允许与时间同步的消息传递进行组对组的异步通信;(ii)在TM
TICC -Ppde中的相互作用的并行线程之间的数据交换机制没有被编码到并行线程;(iii)路径仅发送信号;以及(iv)如果发送了消息,则路径包含虚拟存储器,该虚拟存储器保留消息和并行线程以建立和处理消息。在编译时间或运行时间过程中,将实际存储器分配给虚拟存储器。
[0125] 在路径上行进的信号最终建立了如下情境:在共享的存储器路径(sm路径)的情况下将虚拟存储器中的消息传递给预期的接收者,或者在分布式存储器路径(dm路径)的情况下发送给属于预期的接收者的其他虚拟存储器。对于每个sm路径,保持消息的虚拟存储器(如果存在一个)是对该路径唯一并私有的。类似地,对于每个dm路径,在该路径中的所有虚拟存储器对于该路径是私有的。没有路径可以使用另一个路径的虚拟存储器。与CSP通道不同,路径不妨碍发送者和接收者。
[0126] 我们参考作为Das路径的具有虚拟存储器的sm路径,因为它们是首先由Souripriya Das[Das,19]引入的。我们使用术语路径来指代sm路径和dm路径。
[0127] 1.2简单sm路径
[0128] 让我们首先考虑一些简单的sm路径。端口的父蜂窝执行在端口处的协议,从而通过与该端口连接的路径发送信号。当执行协议时,父蜂窝仅使用它的本地存储器,以及与路径分量相关的存储器。协议执行将不调用任何在协议之外定义的方法、线程或处理。由此操作系统(OS)不用于消息交换。
[0129]
[0130] 图1:最简单的点对点路径
[0131] 考虑图1中所示的简单路径:这里,软件分支将蜂窝C的总端口C.g连接至蜂窝D的功能端口D.f。在图1中,请求业务的信号首先行进通过从C.g到D.f的分支,然后指示请求的业务完成的响应信号从D.f到C.g行进回来。仅当蜂窝通过端口发出信号或者当蜂窝接收和响应在端口接收的信号时,蜂窝使用它们的端口(软件部件)。如图1所示,连接至路径的两端的两个蜂窝可以从不使用在相同时间连接至该路径的端口。信号一个时间仅在一个方向上在路径上进行。这对于TICCTM中的所有路径均适用。
[0132] 如图所示,图1中的每个端口包含2态非确定有限状态机(ndFSM),具有状态S(发送)和R(接收)。所有总端口g以初始状态开始,并且所有功能端口f以初始状态R(图1中的双圆)开始。图1中的路径是[C.g,D.f]。该路径的初始状态是[S,R]。在这个初始状态中,路径准备从端口C.g到端口D.f发送信号。我们现在讨论图1中给出的规范。在下文中我们使用g来指代C.g,使用f来指代D.f。
[0133] 在Hoare′s[Hoare,15}前提条件/后置条件符号中表示了图1中的CCP特征。CCP的前提条件可以依赖于信号发送和信号接收ndFSM的状态。下面以从前到后的顺序描述图1中特征的解释。
[0134] (1到4)从g到f的信号传输:(1)当端口处于状态S,它从它的父蜂窝接收信号c(完成信号)作为它的输入信号。(2):当在输入c的状态S中,端口发出信号s并且移动到状态R,同时接收该信号s的ndFSM处于状态R。该接收ndFSM接收s作为它的输入信号。(3,4):当端口的父蜂窝感应到输入信号s时,接收ndFSM移动到状态S,该父蜂窝执行信号感应测试:mR?()(用于“信号准备好?”的‘mR?’)。如在后置条件所示,信号的感应返回真值true,如果输入信号是s,则返回false。信号s这里指的是消息传递信号。由接收蜂窝对消息传递信号的感应构成消息接收。应该注意到,在功能端口f处的传递信号可以被成功地感应多次,直到发送回响应消息,因为仅当发出响应时改变传递信号。
[0135] (5到10)从f到g回复信号传输:(5)蜂窝D发送完成信号c到f,指示完成了任务。(6)f发送开始信号s到端口g并且将其状态改变为R。这是来自D的响应信号。(7-10):蜂窝C可以使用两个感应测量中的一个来接收在其端口的传递信号g:g:mR?()或者g:pR?()(用于“路径准备好?”的‘pR?’)。注意,可以使用感应测试仅感应一次在总端口的传递信号g:mR?(),因为信号在感应后被复位到 (空符号)。然而可以成功地重复使用g:pR?()测试,因为在感应之后g状态改变为S。实际上,对于任何端口,p,其中p是总端口或功能端口,传递信号的感应总是使得p成为状态S。
[0136] 线程交互协议,TIP:在图1中的TIP(1)表示如下内容:如果路径准备好,则C执行并行线程g:x(),以在发送业务请求前做它应该做的任何事情。在蜂窝C中定义该并行线程(在整篇文章中我们使用符号‘X:’来代替符号‘x->,用于调用在对象X中定义的方法。这里假设X是对象x的指针。由此,在C.g:pR?()中,是在C.g的端口分类中定义的方法。我们还是用符号X.atbt来指代X的属性atbt的值。这里X可以是指针或实际对象),g:x()≡C:x(g),并且在指定给C的私有存储器中执行。在执行g:x()之后,在与连接至g的路径中的部件相关联的存储器中,C立即执行g:s()。在图1中,这将是与端口g和f相关联的共享存储器。这使得要执行图1中的通信协议(1),导致将业务请求信号传递到端口f。
[0137] 在图1中的TIP(2)指定以下内容:当D通过应用f:mR?()测试感应到由C对其端口f发送的业务请求信号时,D开始通过执行在蜂窝D中定义并且在D的私有存储器中执行的线程f:r()≡D:r(f)(‘r’用于“答复”)来响应于接收到的信号。在完成f:r()的执行之后,D立即执行f:s()。这使得要执行图1中通信协议(2),这导致答复信号传递回到端口g。由端口g的父蜂窝关系该答复信号标志事务(transaction)的结束,该事务是当C发送它的业务请求信号到D时开始的。
[0138] 由路径状态改变而施加的限制:在事务开始的时候,连接的状态是[S,R]。在蜂窝D感应信号的时候,路径的状态是[R,S]。在这个新状态中,路径准备好发送回答复信号。当蜂窝C感应到答复信号时,事务结束并且路径状态反转回到[S,R]。这些状态改变强制执行了下面的限制:仅在完成了交易之后,C.g可以发送第二业务请求信号,并且D.f可以仅在已经响应了第一业务请求之后接收第二业务请求信号。仅在接连的事务完成之后可以通过路径发送接连的业务请求信号。
[0139] 对业务请求的强制响应:对于所有TICCTM路径通用的总的规则是通过接收了请求的相同的路径不失败地响应每个业务请求。在“单程环形道路”(部分8.2)中发生了该总的规则的例外。由此,通过专用的路径发生每个事务。响应的接收者总是将路径复位到它的初始状态,即使在单程环形道路。在每个信号传输会话中,路径中的每个ndFSM总是处于TM以下状态:它准备接收并且立即响应于由另一个ndFSM发送的信号。对于所有TICC 路径都是成立的,不论它们多么复杂以及有多少ndFSM嵌入其中。这被称为调谐(tunning)。调谐消除了在信号传输过程中的同步会话的需要并且显著地加速信号传输。
[0140] 调谐:通过以下步骤彼此调谐路径中的ndFSM:(i)将它们设置到恰当的初始状态,(ii)通过要求经由相同的路径发送答复信号应该完成通过路径启动的每个交易来维持调谐,以及(iii)仅在通过路径完全完成了当前事务时候可以通过路径启动新的事务。
[0141] 计算和通信的集成:由相关的蜂窝执行计算和通信。在计算和通信执行之间不存在差异。二者均由线程交互协议TIP调用和执行。蜂窝的每个接口具有对其定义的TIP。由端口的父蜂窝执行TIP。TIP具有格式C.p:?(){},其中p是蜂窝C的端口。如果C.p:?()是真的,那么执行,否则跳过该端口。我们将使用C.p:tip()来指代由p的父蜂窝C在端口C.p执行TIP-body。每个蜂窝以某种顺序轮询它的端口。轮询顺序并不确定蜂窝的端口服务的顺序,因为仅当在端口感应到传递信号执行业务,并且信号传递时间和轮询时间彼此不同步,通信是异步的。
[0142] 1.2.1.具有虚拟存储器的简单的Das路径
[0143] 图2示出了Das路径,具有虚拟存储器M、在连接至M的所有端口的TIP、在端口的协议以及用于代理和端口的CCP特征。路径具有两个代理,a0和a1。每个端口仅当状态为S时给出对它的父蜂窝的访问以访问与其连接的虚拟存储器M中的数据。数据被包含并保留在虚拟存储器中直到进行访问。在图2中的路径中的代理按照需要在虚拟存储器中路由信号。
[0144] 在图2中,并行线程g:x()≡g:msg():x(g)和f:r()≡f:msg():r(f)。在由g和f写入到虚拟存储器M中的消息的消息子分类中定义了这些并行线程。这里,M对并行线程提供执行环境,并且虚拟存储器是蜂窝C和D的共享存储器环境的一部分。在部分7.2中描述允许用于这种活动的虚拟存储器的结构。
[0145]
[0146] 图2.具有虚拟存储器的点对点的Das路径
[0147] 在图1和2中的蜂窝D在传递信号的时候没有感应到信号,可以是因为D在这个时候正在服务于其他的端口中的一个。最终,当蜂窝D轮询它的端口D.f并且评估保护间隔(guard),在图1和2中的第二TIP中的D.f:mR?(),蜂窝D感应消息传递信号。蜂窝不会错过传递给它们的任意端口的任意信号。在一个轮询循环中错过的信号将在随后的循环中被捕获。在图2中给出的CCP特征类似于在图1中给出的。
[0148] 事务的校正:如在图1的情况下,当端口g感应答复消息(m’)的时间将标志事务的结束,该事务是从端口g发送出它的业务请求消息(m)时开始的。让我们假设在时间t2将m’传递给g,并且在时间t1由g发送m。如果消失m和m,满足预先定义的关系R(g,f)(m,m′)并且此外定时限制t2<=t1+τmax(g,f)成立,其中τmax(g,f)是对于g和f之间的事务完成所采用的最大时间,则端口g和f之间的事务是正确的。如图1所示,在不交换消息的情况下,仅上面给出的定时条件成立。如果并仅当对g和f之间的所有事务这些条件都成立,端口g和f是很好匹配的。如果由路径连接的实现中的所有端口对被很好地匹配,则实现是正确的。
[0149] 1.2.2.具有分支和接合操作的sm路径
[0150] 图3示出了具有代理a0的简单路径。代理将时间同步的信号广播给[D1.f,D2.f]中的两个端口。附接到不同的蜂窝并连接至相同的代理的相同种类的端口(即,所有的总端口或所有的功能端口)形成端口组。由此,在图3和4中的端口[D1.f,D2.f]组成端口组。由于所有的蜂窝并行操作并且蜂窝活动与信号传递不同步,D1和D2没有在同时感应到并响应于信号。最终D1和D2将每个由感应到传递的信号并且对其做出响应,每个均在其自己的时间。仅在从D1.f和D2.f接收完成信号之后,代理a0将响应信号发送回到C.g。我们*参考这个作为调整。在图3的第二协议中的一致协议方法a0:AP[c1,c2] 强制执行调整。
代理a0由此进行时间同步的信号传递以及调整的信号分派。
[0151]
[0152] 图3:具有分支的简单的点对点路径
[0153] 如下进行在图3中协议(2)的执行:D1.f和D2.f具有相似的协议:在D1.f的协*议是″D1.f:c->a0:AP[c1,c2]:s->C.g″,并且在D2.f的协议是″D2.f:c2->a0:AP[c1,*
c2]:s->C g″。D1和D2在它们各自的端口D1.f和D2.f并行地开始执行协议,但是不必须同步地,从而在它们完成各自的任务之后发送响应信号至C.g。由此并行评估一致协议方法*
a0:AP[c1,c2],在执行它们之后,各个CCP,D1.f:c->a0和D2.f:c2->a0。仅在a0接收了信号* *
c1和c2之后,条件a0:AP[c1,c2] 变成真。D1和D2保持周期性评估a0:AP[c1,c2] 直到它变*
成真。只要a0:AP[c1,c2] 变成真,由a0不确定地选择蜂窝D1和D2中的一个以执行剩余协议并且强迫其他停止它的协议执行(这会是部分8中表述的组对组协议的简化版本)。读*
者可以验证在a0:AP[c1,c2] 之后协议的部分对于D1.f和D2.f是相同的。这确保信号被传*
递给端口C.g一次。由此,在满足a0:AP[c1,c2],图3中的代理a0发送响应信号s至端口C.g,无论谁执行该协议。由此,a0在蜂窝组中由蜂窝D1和D2调整并行执行协议的不同部分。
[0154]
[0155] 图4:具有虚拟存储器的分支
[0156] 在图4中示出了具有虚拟存储器的类似Das路径和相关的TIP和协议。在该图中,a1进行时间同步的消息传递和调整的消息分派:当发出业务请时,a0进行消息分派,并且当发送回响应消息时进行消息传递。
[0157] 图3和4中的网络表示同步分支/接合操作:当端口g将信号发送到功能端口组,则发生分支,当功能端口组中的端口发送回响应信号,则发生接合。我们将分支和接合概念延伸到包含多于一个端口的总端口组发送接合请求至功能端口组的情况。在部分7中描述了这样的组对组分支和接合操作的协议。
[0158] 1.3.共享的存储器和分布式存储器路径
[0159] 在路径中将端口连接至代理或其他端口的链接被称为支路。互连代理的链接被称为h分支(隐藏支路)。Sm路径的所有部件、端口、代理、支路、h分支和虚拟存储器是软件部件。它们都在包含它们的路径的共享存储器环境中操作。
[0160] 在TICCNETTM的dm路径中的代理和一些端口是硬件部件,每个硬件部件在它的本地存储器中操作;在dm路径中的支路和h分支是信号传输线路。除了代理、端口和虚拟存储器之外,dm路径也具有嵌入其中的硬件交换机和路由器。在两个阶段发生通信:(i)路径建立(ii)信号/数据交换。在路径建立过程中使用交换机和路由器。一旦建立了路径,保持该路径并重复使用该路径直到该路径被拆除并建立了新路径。可以仅通过已经建立的dm路径交换消息。通过CCP执行管理通过信号/数据传输线路的信号和数据交换。如在sm路径,在交换信号/数据的dm路径中的所有代理和端口都保持彼此调谐。没有两个dm路径共享部件,除了在消息传输中没有被使用的交换机和路由器之外。TICCNETTM可以容纳成千个不同的彼此不干扰的点对点和点对组dm路径,引起了成千个同时并行消息交换。
[0161] 在下面三个分类中列出了sm路径和dm路径共享的属性,尽管存在上面已经提到的属性的一些重复:
[0162] (1).TIP格式独立于路径结构:(i)通信原语是p:s()(‘s()’用于发送)和p:f()(<‘f()’用于转发),其中p是端口:f()将接收的消息转发给另一个蜂窝的端口,可以是经过一些修改后的;s()发送新形成的消息。原语p:s()和p:f()用于调用和执行与端口p相关的唯一的协议。(ii)由此与端口p相关的协议是依赖于连接至p的路径的本质;对于不同的路径本质可以不同。(iii)相同的通信原语p:s()和p:f()用于调用和执行在端口p的协议,无论哪种路径连接至p。(iv)在端口p调用和执行协议引起信号要通过连接至端口p的路径发送,这反过来引起消息(如果有消息的话)被传递或发送到它的接收者端口,该接收者端口也连接至相同路径。(v)仅p的父蜂窝可以调用和执行通信原语p:s()和p:f()。(vi)在端口p的TIP格式独立于连接至p的路径种类。(vii)在交换信号的任意路径中的所有部件在任何时间总是保持彼此调谐。这些属性消除了共享存储器和分布式存储器通信之间的软件系统的差异,并且总地消除了在信号传输过程中的同步会话的需要。
[0163] (2)组对组消息交换的同时并行执行:属于端口组的不同端口的不同父蜂窝(部分1.3和7)构成蜂窝组。(i)在蜂窝组中的蜂窝同时并行执行它们指定的协议段,对蜂窝组中的不同蜂窝指定不同段。所有段一起并行执行实现了在该路径的两端连接的蜂窝组之间的路径上的组对组异步消息交换(图19);在该路径上的代理调整这样的同时并行协议段执行(部分1.3和7)。(ii)在分布式存储器环境中,在一个共享存储器多处理器(SMP)TM中的总端口组可以通过TICCNET 的dm路径将接合消息广播给网格中一些其他SMP中的功能端口组。广播消息被并行传递给所有目的地功能端口组。功能端口组以多工模式将它们的答复发送回到源总端口组,通过相同路径一个接一个地发送。这保持dm路径中的部件的相互调谐。
[0164] (3)高速并行消息交换和灵活性:(i)在所有路径中,只要消息准备好,所有消息被立即发送。(ii)在交换信号的路径中的所有代理和端口总是彼此调谐,使得彼此发送的信号被接收者连接接收并且在恰当的时候做出响应,而不管路径多么复杂。这消除了同步会话的需要。(iii)没有两个路径共享部件,并且由此没有不同协议的两个并行执行将彼此TM干扰。这对于SMP中的软件sm路径和TICCNET 中的硬件dm路径成立。由此,(iv)可以被并行交换的消息数目仅受限于路径的数目。(v)在dm路径中不发生对事务中间的路径目的地节点的连接的动态变化(见部分3.2中的灵活性)。这样的变化仅在sm路径中发生。
[0165] 在下面一些部分中表示支持通用并行计算的TICCTM-Ppde中计算设施的概括。在TM部分3-5中详细描述。在部分2中描述TICC -Ppde实施的例子,并且在部分5中描述ALLEOP-证明的例子。
[0166] 1.4.TICC分类和目标
[0167] TICCTM定义下面的顶级分类:蜂窝、端口、代理、虚拟存储器、支路和消息。我们使用字符蜂窝、端口、代理、虚拟存储器、支路和消息来指代对象,其是这些分类、所有软件部件的例子。类似于施动者[Hewitt,5,6]和π微积分代理[Milner,7,8,9],每个蜂窝是在它们自己的分配的计算单元(CPU)中运行的内部并行软件部件。在蜂窝和施动者和π微积分代理之间存在一些不同。我们将稍后进行描述。
[0168] 没有属于相同蜂窝的两个端口可以由支路连接并且没有支路可以将属于相同蜂窝的两个端口在相同路径连接至代理,除非这个端口属于端口矢量(见部分5.2(例如将图19中的路径,这里端口eb.f1和eb.f2分别连接至属于相同路径的代理a2和a3。这里,[eb.f1和eb.f2]是蜂窝eb的端口矢量)。在蜂窝的一个端口不能发送消息至相同蜂窝的另一个端口的所有情况下,这防止了可能的死锁。然而,属于不同蜂窝的不同端口可能由支路连接至相同代理。如上所述,这样的端口形成了排序的端口组;在图4中的[D1.f,D2.f]是一个例子。没有两个不同的端口组可以彼此交叉并且在相同的端口组中不能有属于相同蜂窝的两个端口。在超级计算网格中,在任何蜂窝组中的所有蜂窝将总是驻留在相同的SMP。如我们将在部分7中所见,这些限制可以通过组对组路径在端口组之间交换消息。
[0169] 1.5.蜂窝操作、CIP和轮询
[0170] 每个蜂窝以某个顺序轮询它的端口p,并且基于由蜂窝自身选择的排序标准根据未决的消息将所有端口排序到排序的端口列表。对于在排序的端口列表中的每个端口p,以端口出现在排序的端口列表中的顺序一个接一个地执行TIP主体,p:tip()。蜂窝可以参加连续的p:tip()执行之间的中断处理(除非提供特别的硬件设施以处理动态中断)。中断消息可以改变端口在排序的端口列表中的顺序,或者改变端口优先级、或者以顺序方式执TM行CIP执行的暂停/终止,而不违背任何TICC -Ppde需要。当下一个中断消息被传递到相同的中断端口时,暂停的CIP自动重新开始。操作系统不能打断蜂窝的活动,仅在应用中的TM
其他蜂窝可以打断。TICC 管理对在共享的存储器多处理器(SMP)中的蜂窝的动态处理器分配。由用户进行对网格中的SMP的蜂窝的分配。CIP定义在SMP中下面的操作。
[0171] 在蜂窝的端口处定义的所有TIP的集合,每个端口一个,与蜂窝初始化方法一起被称为蜂窝交互协议CIP。如下所述的初始化和中断消息处理示出用于CIP操作的总的控制结构。根据什么时候在蜂窝的轮询周期中识别了中断消息以及中断消息的本质,中断处理可以在每个蜂窝中不同。CIP具有格式,
[0172]
[0173]
[0174] 并行线程i:r()=i:msg():r(i)被定义在中断端口i的虚拟存储器i.vM中消息的消息子分类。让InterruptMsg指代该消息子分类。下面示出了InterruptMsg::r(i)的定义并且在第二段讨论下面的定义。
[0175]
[0176] 初始化:在上面的CIP中,initialize?()是蜂窝的本地变量initialize的真TM值,并且“i”是蜂窝的中断端口。休眠的蜂窝由传递给i的第一中断消息在由TICC 选择的处理器中被激活。总的来说,休眠的蜂窝可以由传递给任意端口的第一消息激活。传递消息的协议执行该激活(部分7)。一旦激活,如果initialize?()是真,则蜂窝设置initialize=stopPolling=false,发送确认回到通过执行i:s()开始它的蜂窝,如果实际上在端口i由中断消息激活,并且在此之后,执行在init()中指定的初始化,并且然后进行至while-loop。
[0177] 中断端口服务:在while-loop中,蜂窝首先轮询它的中断端口。如果不存在中断消息,跳过该端口。如果存在,则执行(1.2)中示出的i:r()=i:msg():r(蜂窝)。存在四种情况来考虑在(1.2)中的selectOne。(i)如果cell:suspended?()是真,那么意味着蜂窝已经被暂停。在这种情况下,cell.suspended被设置为假并且蜂窝立即处理以执行剩余的while-loop。(ii)如果i:msg():suspend?()是真,那么cell.suspended被设置为真并且蜂窝准备暂停其本身并且立即释放它的分配的处理器;在此之后,蜂窝变得休眠。被传递给蜂窝的下一个interruptMsg将自动激活在可用处理器中的蜂窝。当这样被重新激活时,蜂窝将跳过初始化并且处理进行至while-loop,由于initialize?()将是假。(iii)如果i:msg():terminate?()是真,那么蜂窝在while-loop的当前周期的结束终止操作并且释放其处理器,由于cell.stopPolling被设置为真,(iv)在(1.2)selectOne的默认情况是将优先级分配给在interruptMsg中指定的蜂窝的端口。这些优先级可以由(1.1)中TM随后的poll&SortPorts()方法使用。由TICC 管理这里的暂停/重新开始操作而不用调用操作系统。
[0178] 轮询:在蜂窝轮询它的中断端口之后,蜂窝开始轮询它的其他端口;通过执行poll&SortPorts()将具有未决的消息的端口排序到它的排序的端口列表,并且对于在该列表中以出现顺序对每个p执行p:tip()。重复while-loop直到stopPolling变成真。轮询周期与信息传递不同步。当在轮询周期中轮询端口时,如果端口不具有已经传递的信息,那么蜂窝跳过该端口并且轮询它的下面的端口。被跳过的端口可以在执行周期中接收新的消息。在一个轮询周期中错过了未决的消息的端口将被感知并且在下一个轮询周期中包括在排序的端口列表中。由此,不能以传递消息的相同的顺序服务端口。然而蜂窝不会错过输入消息,除非蜂窝被永久地终止或者在应用系统中存在死锁。由此,在正常操作情况下完成TM每个事务。这在TICC -Ppde中是重要的。
[0179] 端口服务的其他模态:蜂窝在端口p感应到未决的消息时可能立即执行p:tip(),由此跳过排序周期。还可能具有下面这种的同步计算:蜂窝在它的端口等待直到接收消息(或者直到端口准备好);当消息到达(或当端口准备好时写入并发送新的消息)时,响应于该消息,然后仅轮询它的下一个端口。通过使用TIP中的格式C.p:?()*的保护间隔来指定这样的同步计算。‘*’指示需要等待。用星表示的保护间隔被称为同步保护间隔;它们被重复地评估直到变为真。
[0180] 例子:在部分2中,我们使用图1-4中简单的网络来表示从[Maggie & Kramer,13]TM得到的简单的两个例子。这些例子示出了TICC -Ppde实施的本质。第一个例子用于介绍由系统从实施规范、从ALLEOP得到的迹线和因果网以及由SMS在运行时间所扮演的角色生TM
成的ALLEOP。例子也示出了由TICC 网执行的并发、自动调整和时间同步,而不需要使用TM
监视器[Hoare,12]或旗语[Dijkshtra,23,24]。第二例子介绍了TICC -Ppde中的封装的概念并且示出了非确定保护间隔的使用。
[0181] 2.简单例子
[0182] 在每个例子中的实施规范包括TICCTM网、用于各种端口的TIP、用于蜂窝的CIP和TM用于每个蜂窝的轮询周期,其指定了端口在该蜂窝的轮询顺序。TICC 网是消息交换、在计算中发生的同步和调整的概括。它指定了并行计算的控制结构。对于这一部分中的例子不描述证明并且具有ALLEOP证明的例子将在部分7中描述。
[0183] 2.1.Bill和Ben例子:ALLEOPs、迹线(Traces)和因果网(Causalnet)
[0184] 我们从[Magee & Kramer,13]开始简单的游戏,如在[Magee & Kramer,13]中给出的,游戏的FSP模型是:
[0185] ‖BILL_BEN=BILL‖BEN;
[0186] BILL=play→meet→BILL;BEN=work→meet→BEN; (2.1)
[0187] 这里在传统感应[12,13]中的同步被假定为在行动术语‘meet’上发生。在这里TM描述游戏的TICC -Ppde实施。我们示出了从实施规范中得到的ALLEOP模型、从ALLEOP得到的迹线和SMS产生的因果网。所有的衍生物由系统自动完成。ALLEOP模型是实施的模型而不是系统的期望设计的模型。由此,它们比FSM模型更复杂。但是它们的结构方面类似于FSP结构。
[0188] 图5中示出了TICCTM网。每个TICCTM网具有至少一个环境蜂窝E;有时也称为配TM置器蜂窝。配置器蜂窝被用于配置网络并开始操作。当TICC -GUI(图形用户界面)屏幕TM
被打开时,出现了其中安装的E。应用程序员应该已经在打开TICC -GUI之前定义了蜂窝子分类E和应用所需的其他蜂窝子分类。用户点击GUI屏幕上的环境蜂窝E的图像来将其激TM
活,并且发送中断信号至它的中断端口E.i。E被用于安装TICC 网中的所有其他蜂窝和所有路径。在用户执行图像的重新定位之后,所有安装的蜂窝和路径以及得到的图片出现在TM
TICC -GUI屏幕上,看起来如图5所示。一旦完成上述操作,通过点击E并且通过端口E.gl将中断信号广播给网络中的蜂窝的中断端口开始应用。这激活了蜂窝。
[0189]
[0190] 图5:Bill和Ben实例:在‘meet’上的同步
[0191] 下面我们使用缩写‘Be’用于‘Ben’,‘Bi’用于‘Bill’,Me用于Meeting以及‘B’用于‘Ben和Bill’。[Be.f,Bi.f]=B.f和[Be.g,Bi.g]517=B.g是端口组。Ben和Bill均通过这些端口组接收同步的信号并发出调整的信号:图5中的代理a1和a2执行同步和调整,如部分1.3.2中描述。如下示出蜂窝E的CIP:
[0192] E:CIP()定义:
[0193]
[0194] 上面的CIP指示下面的操作:由用户发送给中断端口E.i的第一中断信号激活E并且使得E执行在init()中定义的初始化,安装应用所需的所有蜂窝和路径。此后,E通过端口gl发送中断信号至游戏中蜂窝的中断端口。这激活了在图5中的网络中的蜂窝。然后,F答复将其开始的中断信号,初始化它的变量并且然后进行至执行它的while-loop。在while-loop中,首先轮询它的总端口E.g。如果端口E.g准备好送出信号并且E准备好开始游戏,则E.g发送信号至[Be.f,Bi.f]=B.f。这开始了游戏。已经开始了游戏后,E在它的端口E.g等待以接收新游戏结束信号。
[0195] 在接收到游戏结束信号之后,E轮询它的中断端口E.i。如果E感应到中断信号然后E开始终止其操作。这将是E从用户接收到的第二个中断信号。第一个开始E。在终止之前,E经过它的端口gl对所有其他蜂窝广播中断信号。这将是由E广播的第二个中断信号。第一个中断信号开始蜂窝。收到第二个中断信号的每个蜂窝发送回响应并且然后终止本身。E仅在从所有蜂窝接收到由图5中的代理a3转发的调整的响应之后终止。这是在所有应用中使用的总的开始/停止处理(具有较小的变化)。
[0196] 如果在E.i不存在中断信号,那么E可以重复其轮询周期,如(2.2)和(2.7)所示。图5中的其他蜂窝具有相似的CIP。注意,在(2.2)中具有端口E.g的TIP具有另一个TIP g:mR?()*{},,嵌入其中。在这种情况下,TIP主体是空的。但是,通常不需要这样。例如,在下面的TIP(2.4)和(2.5)中,嵌入TIP的TIP主体不是空的。在TIP中可以出现多个这样的嵌入。我们已经忽略了开始/停止处理以及在下面的讨论中的中断端口轮询和服务。
[0197] TIP:所有TIP具有通用结构{}.。
[0198]
[0199] 当Bill和Ben感应到由E发送的信号,它们开始它们各自的事情,玩和工作,如(2.4)和(2.5)所示。在完成它的做的事情之后,它们中的每一个经过各自的端口Bi.g和Be.g将信号发送给Me.f。当然,它们不同步它们发送信号的时间。代理a2等待直到它从Bi.g和Be.g二者接收到信号并且发送调整的信号至Me.f。由此,仅当Bill和Ben准备好的时候开始会议。当会议结束时,Me.f通过代理a2发送同步信号至[Bi.g,Be.g]=B.g(见图5)。当Bill和Ben接收到该信号时,他们都通过a1发送调整的游戏结束信号回到E.g。在这一点,E可以开始游戏的下一个循环,如果游戏没有在端口E.i由中断信号终止。
TM
[0200] 在[Magee & Kramer,13]的FSP框架中的同步在TICC -Ppde中被称为调整。在TMTICC -Ppde中的同步总是指的是并行发生的事件的同步。在这个例子中,当来自E.g的信号由代理a1传递给[Bi.f,Be.f]=B.f并且当来自Me.f的信号由代理a2被传递给[Bi.g,Be.g]=B.g时发生时间同步。
[0201] 轮询周期://这里已经忽略了中断端口轮询。
[0202] E:Polling()=[E.g:pR?()→E:Polling()] (2.7)
[0203] Be:Polling()=[Be.f:mR?()→Be:Polling()] (2.8)
[0204] Bi:Polling()=[Bi.f:mR?()→Bi:Polling()] (2.9)
[0205] Me:Polling()=[Me.f:mR?()*→Me:Polling()] (2.10)
[0206] 轮询是递归的,因为在CIP(见(2.2))中的while-loop。这里给出的规范执行的计算的特征在于下面的ALLEOP。
[0207] 2.1.1.BILL-BEN游戏的ALLEOP
[0208] 读取′→′在下面作为“原因”并且′●→′作为“立即原因”。这被称为因果连TM接。在部分5中定义上述符号。ALLEOP合并TIP、TICC 网和轮询周期中的信息。当从TIP中得到ALLEOP时发生四个简单的变换:(i)″;″由′●→′替代,(ii)在TIP中出现的端口p的信号发送动作p:s()在与时间地图相关的信号发送和传递事件中由它们的扩展代替,如下所述;(iii)指定由信号传递引起的并行动作;以及(iv)每个信号感应动作p:mR?()(或p:mR?()*)给出了由其感应的信号传递事件作为它的自变量。下面描述的ALLEOP示出这些变换。每个端口ALLEOP具有两个要素:ALLEOP-guard()和ALLEOP-body(),具有结构,guard(){ALLEOP-body()}:如果ALLEOP-guard()是真,调用ALLEOP-body(),否则跳过主体。让我们首先考虑用于端口E.g的端口ALLEOP。这是从E.g:TIP Q(2.3)、图5的TM
TICC 网和(2.7)中的轮询周期得到的。在(2.11)中示出并且如下描述。
[0209]
[0210] 这里,E.g:ALLEOP-guard()与(2.3)中出现的E.g:TIP-guard()一致。在(2.3)中的TIP-body中出现的E.g:s()已经被变换为当执行E.g:s()时发生的信号发送/传递事件:信号发送事件是E.g[t(E.g,0)](用于发送),并且信号传递事件是)[t(E.g,1)]和(Bi.f>[t(E.g,1)](用于传递)。在信号发送和传递事件中出现的自变量t(E.g,0)和t(E.g,1)是时间地图。如下所述,每个时间地图映射到增加序列的时间点。出现在(2.11)中的传递事件周围的细线角括号‘<…>’指定在时间地图中指定的时间S点完成事件。在发送事件E.g 周围缺乏这样的角括号表示,它在时间地图中指定的时间点开始。由此,在事件周围角括号的出现和缺乏区别这些事件的开始和结束时间。
[0211] 在(2.11)中的这两个信号传递事件Be.f和Bi.f具有相同的时间地图t(E.g,1)。这指定信号在t(E.g,1)中相同的时间点被传递给端口[Be.f,Bi.f]。在时间地图中#的不同的值,用于#=0和1,t(E.g,#),唯一地识别与相同的端口E.g相关的时间段的两个不同的序列。在CIP或TIP中出现的在不同端口的不同通信事件具有与它们相S D D关的不同#值。事件E.g、Be.f 和Bi.f 全都由在端口E.g的协议的评估引起。
[0212] 与时间地图相关的时间点的序列被如下解释:序列T(E.g,0)=(t0,t1,…,tn-1),[t0<t1<…<tn-1]表示通过经由E.g向端口组B.f=[Be.f,Bi.f]发出信号,对于0≤ith<n E开始游戏的i 个循环的时间点,并且序列T(E.g,1)=(t0’,t1’,…,tn-1’),ti<ti’<ti+1,0≤i<n-1表示发生了信号传递给B.f中的端口的对应的时间点。对于(0≤i<n)ti对应于ti’,在时间ti开始信号发送并且在时间ti’完成传递时间的并且两个序列配合形成整个有序的链[t0<t0’<t1<t1’<t2<t2’<…<tn-1<tn-1’]。
[0213] 传递事件引起其他ALLEOP的并行激活。在(2.11)中传递事件中出现的符号′‖′指定信号并行激活ALLEOP Be.f:ALLEOP()和Bi.f:ALLEOP()。椭圆、→…→和′‖′一起指示在信号传递之后不会立即发生激活。在信号传递的时候Ben和Bill可能已经做了一些其他的事情,而不是侦听传递的信号。然而,最终他们回来感应信号并且对其做出响应。
[0214] 最后,在(2.11)中在″E.g:mR()?((E.gD)[t(B.f,1)])*″中出现的自变D量″[t(B.f,1)]″识别出由E.g:mR?()*感应的信号传递事件。这是由端口[Be.f,Bi.f]=B.f传递回到E.g的信号。这个信号的接收者对E指示通过经由E.g发送信号而开始的游戏已经终止了。在(2.11)中的同步信号感应操作E.g:mR?()*指定蜂窝E在端口E.g等待接收该终止信号。在(2.11)中的感应动作E.g:pR?()没有给出任何自变量,因为在这种情况下,仅测试端口E.g的准备好发送信号的状态;它不测试传递的信号。
如果在TIP中使用p:pR?()来感应传递的信号,那么将对其提供自变量。
[0215] 在任何ALLEOP(2.11)到(2.14)中不存在与E.g:pR?()相关联的并行激活。由此,在(2.11)中的E.g:pR?()不具有自变量。然而在(2.12)和(2.13)中的E.g:mR(…)*具有并行激活并且由此具有自变量。在指定并行激活的时间,系统对ALLEOP-guard中的信号感应操作提供自变量。下面给出的其他ALLEOP是类似地从它们各自的TIP中得到:
[0216] //从(2.4)中的Be.f:TIP()、图5中的网络和轮询周期(2.8)得到
[0217]
[0218]
[0219] 注意在(2.12)中,信号发送事件中的时间地图Be.gS(T[Be.g,0)]不参考端口组DB=[Be.g,Bi.g],然而信号传递事件中的时间地图(T[B.g,1)]参考B。这是因为Ben没有与Bill调整他经过Be.g发出信号的时间,但是代理a2(见图5)发送调整的信号,D S D
引起传递事件(T[B.g,1)]发生。在事件Be.f[T(Be.f,0)]和[T(B.f,1)]中出现类似的规范。
[0220] //从(2.5)中的Bi.f:TIP()、图5中的网络和轮询周期(2.9)中得到
[0221]
[0222] 在不同的端口-ALLEOP中出现的相同的时间地图指示在不同的ALLEOP中在相同时间发生与这些时间地图相关联的事件。由此,在ALLEOP(2.12)、(2.13)和(2.14)D中的[T(B.g,1)]指示相同的传递事件正在三个ALLEOP中被参考。类似地,在D
ALLEOP(2.12)、(2.13)和(2.14)中的[T(B.f,1)]参考相同的传递事件。注意,在(2.12)、(2.13)和(2.14)中的并行激活之后不存在椭圆、‘→…→’,。这是因为信号接收单元在它们各自的端口等待信号;所以它们立即感应到传递的信号。
[0223] //从(2.6)中的Me.f:TIP()、图5中的网络和轮询周期(2.10)得到
[0224]
[0225]
[0226] 从TIP得出ALLEOP的规则是简单的。ALLEOP结构看起来与FSP结构类似。但是,读者可以看到,存在一些不同。ALLEOP代表事件和因果链接。FSP代表状态和转换。我们稍后将看到ALLEOP和FSP的关系。应该指出,在ALLEOP中指定的动作,例如动作Be.f:work()、Bi.f:lay()和Me.f:meet()可以总地引起在ALLEOP中发生支路因果序列。存在两种支路:一个是选择支路,其中通过评估与因果序列相关联的选择条件并且选择被评估为真的第一个来从因果序列的有限集合中选择一个代替品来在运行时间运行。我们使用符号‘|’来分离出选择替换物(见(4.14))。在上面的ALLEOP中没有出现选择支路。另一种支路,称为多并行支路(分支),类似于作为通信结果发生的ALLEOP(2.11)和(2.14)中的分支。
[0227] 时间地图的部分顺序:在这个例子中各种时间地图和它们的部分排序是,[0228] T(E.g,0),信号被发送给Bi.f和Be.f,开始游戏 <[0229] T(E.g,1),信号被传递给Bi.f和Be.f <
[0230] (T(Be.g,0),T(Bi.g,0))Bi.g和Be.g发送开始会议信号至Me.f <[0231] T(B.g,1),开始会议信号由代理a2传递给Me.f <
[0232] T(Me.f,0),会议结束信号给发送给Bi.g和Be.g <[0233] T(Me.f,1),会议结束信号被传递给Bi.g和Be.g <
[0234] (T(Be.f,0),T(Bi.f,0)),游戏结束信号至E.g <[0235] T(B.f,1)],游戏结束信号由代理a1传递给E.g (2.15)[0236] 不可比较的时间地图对:
[0237] (T(Be.g,0),T(Bi.g,0))≤T(B.g,0),a2发送调整的信号至Me.f
[0238] (T(Be.f,0),T(Bi.f,0))≤T(B.f,0),a1发送调整的信号至E.g (2.16)[0239] 在(2.16)中的不可比较的时间地图对可能彼此交叉,即T(Be.g,0)∩T(Bi.g,0)≠φ和T(Be.f,0)∩T(Bi.f,0)≠φ。这暗示有时Ben和Bill将同时发出信号,仅是偶尔。合并的ALLEOP是,
[0240]
[0241] 这里,由(2.15)和(2.16)中的部分排序限制蜂窝的并行操作。该限制由网络结构和信号交换定时自动施加。不调用调度。为了改进这些ALLEOP并完成实施,我们必须定义并行线程Me.f:meet()、Be.f:work()、Bi.f:play(),和条件E:readytoStart?(),无论它们是什么。在语句(2.11)到(2.14)中定义的端口ALLEOP是由应用执行的计算的模型。TICCTM-Ppde生成与TICCTM网一致的端口ALLEOP和轮询规范的串行/并行组合,从而生成实施的完整的ALLEOP模型。使用ALLEOP模型我们证明的任何属性将是实施的有效属性,而不只是期望设计的属性。所有ALLEOP以全局时间运算符□开始。我们在ALLEOP描述中忽略这个运算符。总是假设该运算符存在。
[0242] 2.1.2CIP的ALLEOP
[0243] 让我们对于(2.2)中的CIP写入ALLEOP:这里我们已经假定称为User.g的端口,该端口向E.i发送中断信号。在图5中没有示出用户。
[0244]
[0245]
[0246] 注意在(2.18)中使用T(E.g,2)和T(E.g,3)。这是因为T(E.g,2)和T(E.g,3)已经在E.g:ALLEOP()(见(1.11))中使用,并且E.g:ALLEOP()出现在(2.18)中 的E:CIP-ALLEOP-body()。 这 里,E:initialize ?()= E.initialize;类 似 地,对象的每个布尔属性具有这种判定。在(2.18)
中,蜂窝E的端口在它们的TIP主体被执行之前不进行排序。
[0247] 下面在(2.19)中示出用于(1.1)中这种CIP的CIP-ALLEOP,其中在执行端口的TIP主体之前对端口进行排序,在下面的(2.19)中示出。在(2.19)中已经进行了下面的假设:端口X.g发送激活蜂窝的中断信号,并且在(1.1)中出现的poll&SortPorts()方法已经被分成两个分量:轮询和排序。在(2.19)中Cell:sortInto(…)中出现的自变量,Cell.ports是蜂窝附带的端口的矢量,Cell.sortedPortsList(Cell.spl)是另一个矢量,其将包含具有未决的消息的排序的端口,并且自变量sortR是排序关系。这些所有动定义在蜂窝分类中。
[0248]
[0249] 这里, 和 被用作特定范围内的索引的计数器;在它们的各自范围内的动作被应用于计数的索引中。
[0250] 2.1.3迹线
[0251] 迹线和ALLEOP之间的差异如下:(i)迹线假定虚拟时间点(下面简称为时间点),在上述时间点开始和/或结束事件和评估。(ii)当是已知时,迹线将前提条件和后置条件与相关联。的特征A()具有格式,
[0252]
[0253] 其中,或者是并行线程、或者是协议或者是程序语句;τmax(A)是完成A()的执行所花费的最大时间,●→是执行符号,当precondition?()变成真时,A()开始在相同时间t0执行并且A()的执行在时间t1结束,当A()的执行结束时,(A.output:C?()& postcondition?())成为真。(iii)迹线还在的前提条件和后置条件中指定交换的消息的特征,如果存在的话。迹线还包含指定替代和并行分支的支路,如果它们对应的ALLEOP包含它们。我们忽略在迹线语句中的‘□’符号;假设该符号存在。
[0254] 当系统得出用于端口ALLEOP的迹线,考虑到相同的虚拟时间点与端口ALLEOP中的同一时间地图相关联,它简单地假定对于端口ALLEOP中的不同事件具有不同虚拟时间点。这捕获在不同端口ALLEOP中发生的事件的同步和调整。在迹线中时间点的排序由事件在端口ALLEOP中发生的顺序指定。关于这个排序进行三个假设:(i)由●→链接的连续动作将一个接一个地立即发生,终止链接结尾的动作,该动作与在链接开始的动作同时开始。(ii)每个动作花费有限量的非零时间来使用已知的上边界完成执行,(iii)如果蜂窝在信号被传递给端口的时间在该端口等待该信号,那么在与信号传递时间相同的时间传递的信号被立刻感应,否则可能在信号传递之后的某个时间发生信号感应,(iv)当蜂窝通过端口C.p在虚拟时间Cp.t发出信号时,如果C.p属于端口组pG,那么系统知道接收由pG中的端口发送的信号的代理仅在从pG中的所有端口接收信号之后才分派调整的信号。我们说这个分派发生在时间pG.t。在这种情况下,系统引入排序Cp.t≤pG.t到迹线中。
[0255] 下面描述在(2.11)到(2.14)中的端口ALLEOP的迹线以及它们的说明。用于Ben-Bill解决方案的迹线包含并行分支。在对应于(2.11)中的ALLEOP的下面的迹线(2.21)中,在包括在括号内的‘(…‖…‖…)’表示描述并行分支。在这个迹线中没有出现。在迹线(2.22)到(2.24)中出现,play(),work()和meet(),但是这些不具有为其定义的前提条件和后置条件。由此,在迹线中不出现它们。在(2.26)中出现具有前提条件/后置条件和消息条件的迹线。
[0256] 在每个迹线中,仅当trace-guard是真时调用trace-body,否则跳过trace-body。在端口E.g的迹线E.g:trace(Eg.t0)用于(2.11)中的ALLEOP,E.g:ALLEOP(),如下所示:
[0257]
[0258] 在(2.21)中的E.g:trace-guard(Eg.t0)中的(E.g:pR()&E:readyToStart()*)断言条件(E.g:pR()&E:readyToStart()*)的评估在时间Eg.t0开始,并且在时间Eg.t1终止。D D
在(2.21)中对两个事件<→Be.f>和<→Bi.f>的相同时间Eg.t2的分配指示传递给端口S
Be.f和Bi.f的信号在相同的时间点同步。在E.g:trace-body中的规范“[●→E.g(Eg.S S
t1∈T(E.g,0))]”不具有角括号,“●→E.g”断言引起事件E.g 发生的动作的评估在时间S
Eg.t1∈T(E.g,0)开始。注意,“●→E.g”的开始时间和“<(E.g:pR()&E:readyToStart()*)S
(Eg.t0)>(Eg.t1)”的结束时间相同。没有指定“●→“●→E.g”的结束时间。与(2.21)中其他语句相关联的定时的解释与在ALLEOP中相同,不同点是在每种情况下假定了虚拟时间点。正像时间地图代表时间点的序列,每个虚拟时间点也表示时间点的序列。由此在(2.21)中,Eg.t1∈T(E.g,0)是E开始(bill‖ben)游戏的时间点的序列。下面示出在Bill-Ben游戏中与ALLEOP相关联的其他端口迹线。
[0259]
[0260]
[0261] 不可比较时间点:
[0262] (Bif.t1,Bef.t1)(Bif.t2,Bef.t2)(Beg.t0,Big.t0) (2.25)[0263] 在(2.22)和(2.23)的第一行中的存在的声明指定Bif.t0=Eg.t1<Bif.t1和Bef.t0=Eg.t1<Bef.t,指出在虚拟时间Eg.t1同步地将信号传递给端口Bi.f和Be.f,但是没有同步地感应传递的信号。感应的信号在不可比较的时间点Bif.t1和Bef.t1感应。类似地,当Bill和Ben分别在虚拟时间Bif.t1和Bef.t1发出信号至E.g时,它们并不调整它们发出信号的时间。然而,当在时间Bf.t0两个信号由代理a1接收时,a1将调整的信号分派给E.g。这个信号分派时间总是≥信号发送时间。由此在(2.22)和(2.23)中出现声明Bif.t2≤Bf.t0和Bef.t2≤Bf.t0。类似地,由代理a2在时间Bg.t0调整(Beg.t0,Big.t0)≤Bg.t0。Bill和Ben在时间Bg.t1在信号传递之后上感应到传递给它们的端口Bi.g和Be.g的信号,因为他们都在信号被传递的时间等待信号。
[0264] 读者应该理解在不同端口迹线中的彼此相同的时间点如何通过它们在时间地图中的成员资格而被识别。这样识别的虚拟时间点之间的等同性被引入到每个迹线顶部的存在的声明中。在不同蜂窝的端口的迹线中发生的所有时间点(通过等同性和不等同性必须不相关)是不可比较的时间点。
[0265] 一旦生成了所有的迹线,系统获知在ALLEOP中指定的时间地图中出现的虚拟时间点和在任何时间地图中没有出现的所有虚拟时间点。然后系统将不同端口迹线中的相同时间地图中出现的时间点设置为彼此相等。这识别了所有调整的和同步的信号传递。在(2.21)中迹线的情况下,在迹线的顶部的时间点的存在的声明中这样声明:Eg.t3=Bf.t1,其中Eg.t3是端口E.g接收到代理a1传递给它的信号的虚拟时间,其中Bf.t1是a1传递该信号的虚拟时间(见图5)。这识别了传递给由ALLEOP(2.11)、(2.12)和(2.13)中的时间地图T(B,f,1)指定的端口E.g的调整的信号。在(2.22)和(2.23)类似地,Bef.t0=Eg.t1=Bif.t0。这指定了传递给端口[Be.f,Bi.f]=B.f的同步信号。虚拟时间点的这些识别与(2.15)所示的部分排序相一致。在建立了虚拟时间点之间的关系之后,系统以由这些事件激活的迹线一致的形式将传递事件自变量分配给迹线中的所有信号感应操作。如果知道与动作相关的消息特征和前提条件/后置条件(用户帮助可能需要获取),将ALLEOP翻译成迹线不是复杂的。
[0266] 在该应用中的端口迹线仅使用信号感应条件。在部分6.4和附录III中,迹线包括各种条件和分支动作,前提条件/后置条件与这些东西相关联。每个迹线引起了它的事件特征表(ECT),其以表格的形式简单地重新组织了迹线中的信息,以便于证明生成。我们将在部分6中看到这些例子。
[0267] 2.1.4.CIP的迹线
[0268] 下面在(2.26)中描述CIP-ALLEOP的迹线片段,以证明如何处理具有 计数器的语句。在(2.26)中出现的语句 断言在端口p[i]和q[i]之间存在路径。以一定顺序由 计数器对索引和项目进行计数。在下文中,假设索引i的计数之后跟着索引i+1的计数,其中0≤i<n-1。出于方便,下面重现在(2.19)中出现的具有计数器的ALLEOP语句(将spL读为sortedPortsList):
[0269]
[0270] 下面给出上述计数器语句的迹线:
[0271]
[0272] 在(2.26)中要注意的特征如下:(i)信号在时间q[k].t0被传递给端口p[k],并且在时间Cp[k].tk感应传递的信号。对于索引k排序动作Cell:sortInto(…)在相同的时间Cp[k].tk立即开始。当用于索引(k+1)的排序动作开始时,用于索引k的这个排序动作在Cp[k].tk+1终止。这在顶部的定时规范中声明,其中出现声明Cp[k].tk+1=Cp[k+1].tk+1。对于其他计数器语句出现相似的定时结构。(ii)对于[<●→Cell:sortInto(p[k],spL,sortR)(Cp[k].tk)>(Cp[k].tk+1)]动作表示前提条件和后置条件。使用上述迹线片段生成用于CIP-ALLEOP的迹线将十分直接地进行。
[0273] 3.1.5ALLEOP和因果网的图形表示
[0274] 在图6A中示出了用于这个应用的ALLEOP的图形表示。它表示在(2.11)到(2.14)中描述的端口ALLEOP的串行并行分量。在图6A中的ALLEOP图形中出现的节点被称为事件分类,因为当交替地运行应用时可能发生每个节点的许多实例。在节点对之间的直接链接表示节点之间的因果关系。在图6A中链接上的标签标记条件,对于那些要发生的链接条件应该保持为真。这里仅出现信号感应条件。
[0275] 对于图6A中的ALLEOP图形,在图6B中示出了在单轮游戏中由SMS产生的因果网。在图6B中的每个节点是它对应的ALLEOP节点的例子。尽管ALLEOP示出了用于paly、work和meet的动作事件,因果网仅显示通信事件,其是在ALLEOP和迹线中出现的通信事件分类的例子。取代在迹线中假定的虚拟时间点,与因果网事件相关联的时间例子是在与应用相关联的全球时钟的时间点。这是在该轮应用中发生事件的时间。图6C示出了当重复游戏几次时的因果网。因果网保留图6A所示的时间顺序,不同之处在于图6A所示的循环链接由图6C所示的迭代替代。显而易见,就像时间地图,在迹线中的虚拟时间点也具有与其相关联的时间实例的序列。
[0276] 在因果网中出现的事件节点的集合仅为在一轮应用中发生的所有通信事件的集合,并且它们各自的发生时间一起出现在应用的迹线中。如果迹线包括选择点,不是所有在迹线中出现的事件都具有因果网中的对应事件,仅在选择点选择的事件将具有在因果网中的对应事件。可以忽略所有前提条件/后置条件、事件的感应和在迹线中出现的动作事件。由此因果网是与在一轮应用中发生的图像数据对应的迹线片段的概要。接收同步输入信号的节点具有与它们相关联的相同的全局时间实例。类似地,通过代理分派调整的输出信号的节点具有与它们相关联的相同的全局分派时间实例。与迹线中的事件分类相关联的每个不同的虚拟时间点对应于与从迹线中生成的因果网中的事件分类的实例相关的不同时间S
实例序列。由此,在(2.21)中的语句E.g(Eg.t1∈T(E.g,0))中出现的虚拟时间点Eg.t1表示时间点的序列,如图6C所示的T(E.g,0)=[t0,t8,t16,…,t8n]。
[0277]
[0278] 图6:Bill_BEN解决方案的ALLEOP和因果网
[0279] 在因果网中通过图6B和6C所示的定向链接彼此链接节点。链接指定节点的部分排序。存在两个链接:(i)因果链接,其指定在TIP执行过程中发生的事件的排序,以及(ii)执行链接,其指定当不同TIP在一轮应用的过程中发生在蜂窝中时的执行的排序。在因果网中的事件实例的部分排序是由这两种链接引入的部分排序的联合。在图6C中,游戏的连续迭代之间的链接是执行链接。所有其他的链接是因果链接。在这种情况下,每个蜂窝仅具有一个TIP,因为我们已经忽略了中断端口活动。如果蜂窝具有多个该端口和功能端口,在因果网中将出现更多的执行链接。
[0280] 如果在端口ALLEOP中发生因果链接X→Y or X●→Y,并且在因果网中发生事件实例x的x(),那么在一定延时τ>0,在因果网中必须发生Y的事件实例Y(t+τ),按照部分5.4中定义(5.27)。如果在端口ALLEOP的图形,或者端口ALLEOP的文本描述中的C(X,Y) C(X,语句C(X,Y)?(){X→Y}or C(X,Y)?(){X●→Y}中发生因果链接X →Y或X
Y)
●→Y,那么仅当在时间(t+τ)时条件C(X,Y)是真,在一定延时τ,τmax(X,Y)≥τ>
0之后在因果网中一定发生事件实例Y的Y(t+τ)。这是因为如在部分5.5中所述(i)由蜂窝执行的任何并行线程或协议是不可中断的,(ii)并行线程和协议的激活是自动的(不是由蜂窝外部的任何程序计划的)并且(iii)除非当存在系统故障、死锁或活锁(部分系统死锁),保证进程。在通常情况,必须提供死锁和活锁的自由度
[0281] 任何时候当应用的因果网偏离它的ALLEOP时,可以设置自我监控系统SMS来发送告警。此外,可以通过将事件模式定义为ALLEOP节点的常规表示来指定告警情况。由此,如果在X→Y和X●→Y中,在指定的上界限τmax(X,Y)之后没有发生事件Y,则SMS将发布错误告警。如果在用于延时的指定的上界限之后发生了事件Y,则SMS将发布未决的错误告警。在正常操作模式下,一旦发生了对应于底部节点的事件,如果满足了它的前提条件,图6A中的ALLEOP中的每个事件必定发生,否则将发生告警。
[0282] 如部分7所述,在因果网中的事件是由被称为时间建立者蜂窝(eb蜂窝)的指定蜂窝与应用的操作并行动态安装,同时运行应用并且在应用中正发生事件。在成长的因果网中出现的事件模式由事件分析者蜂窝(ea蜂窝)分析。如果在成长的因果网中发生先验指定的告警条件中的模式,那么与该模式相关联的ea蜂窝将生成告警。SMS可以被设置为注意从ALLEOP中指定的进程的任何背离并且发布告警。基于在成长的因果网中动态识别的模式,通过设置应用中ea蜂窝的选定的总端口和恰当的蜂窝的中断端口之间的路径并且对于这些端口定义TIP,SMS还可以设置以影响应用中正在进行的计算。
[0283] 2.1.6注解
[0284] 在TIP执行中的非确定性:在不同蜂窝中的TIP指示彼此不同步。它们也不与信号传递事件同步。仅在端口的父蜂窝轮询该端口的时候在该端口处存在传递信号,在端口处执行TIP,否则跳过该端口。不能预测信号到达蜂窝的不同端口的顺序。由此,不能预测何时蜂窝将感应传递给蜂窝的一个端口的信号并对其做出响应。因为在一个轮询周期中在端口错过的信号总是在下一个轮询周期被捕获,在信号已经被传递给端口之后,可以设置C蜂窝可以何时对信号做出响应的边界:如果Δmax是在蜂窝C的轮询周期中服务所有具有C TM
未决的消息的端口所需的最大时间,那么这个边界<2Δmax。这是TICC -Ppde固有的非确定的源。
[0285] 共享CPU:图5所示的网络需要至少三个CPU来运行网络。环境E可以暂停它的操作并在将信号发送给Bill和Ben之后释放它的CPU。当Meeting从Bill和Ben接收到信号时,可以在可用的自由CPU中自动激活该会议,并且稍后当E从Bill和Ben接收信号时,类似地在任何可用自由CPU中重新开始暂停的操作。通常,运行网络需要的CPU的数目为至少一个加上并行运行的蜂窝的最大数目。如果蜂窝已经被编程暂停/重新开始它们的操作,那么CPU在间歇地运行的蜂窝周围切换。
[0286] 进展:在图6所示的图表中,存在暗示的假设,并行线程、play、work和meet是无条件的并且假定它们总是终止。通过这样的假设,应用不具有死锁或活锁,并且在游戏的每个迭代中发生会议同步。我们在部分6中介绍正式的证明方法。我们将看到在Dining Philosopher实例中的情况,其中采用预防措施来确保实施不具有死锁和活锁,并且计算的细化结构在能够提供这样的保证中发挥作用。
[0287] ALLEOP和FSP:如前所述,如果移除在ALLEOP中的循环,在ALLEOP中的节点和TIP的迹线是事件分类并且链接指定部分排序。应该注意到,如果在图6A中移除循环链接,那么ALLEOP是点阵。这是特殊情况。如前所述,ALLEOP没有表示状态和转换。然而,如果在由ALLEOP建模的应用的状态表中状态的数目是有限的,那么ALLEOP应该在某种意义上等效于FSP。我们参考这样的ALLEOP作为有限ALLEOP。在有限ALLEOP中所有可能因果链的集合是规则集合。
[0288] 被看做有限ALLEOP的概要的FSP:假设在ALLEOP(2.11)到(2.14)中,我们仅关注蜂窝和动作,例如在蜂窝中执行的play()、work()和meet(),并且忽略信号交换事件和信号感应操作。然后ALLEOP(2.11)到(2.14)产生下面的实施的FSP描述:
[0289] E=[(readyToStart→[BILL‖BEN])|(interrupt→STOP)];
[0290] BILL=play→meet→E;BEN=work→meet→E; (2.27)
[0291] 在中断之后E停止。在ALLEOP中没有示出这个,而是在CIP中指定。我们在此已TM经采用了特权来将其包括在这里。按照FSP约定,在meet和E中发生FSP同步。这在TICCTM
中被称为调整。当同步和调整用于TICC 范例的时候,FSP不辨别同步和调整。此外,FSP没有简单的框架来指定不同动作的时间同步(即,具有不同名称的动作),除非基于它们的同步特性来重新命名动作。
[0292] 当蜂窝包含多个功能端口、总端口和中断端口,并且动作是有条件的时,交换消息并且TIP是复杂的(如在部分4中讨论)。对应于ALLEOP的FSP描述也将是复杂的。然而,看起来可以将具有固定有限数目的端口的任何应用的ALLEOP概括以获得它们的等同的FSP规范。由此,看起来具有固定的有限数目的端口的每个应用的ALLEOP是有限ALLEOP。
[0293] 将FSP反向翻译到它们对应的有限ALLEOP以实施将是困难的,因为(i)FSP不能辨别同步和调整,(ii)识别状态之间的通信链接,或者(iii)引入事务的概念。例如,在(2.27)中的FSP并没有指定,在meet之后对E经由Bill和Ben通过同步和调整的通信通知游戏的结束。这里存在FSP中没有出现的隐藏状态(端口和代理的状态)。发生这种情况的原因是FSP不具有端口、代理、事务、路径和协议的概念。我们没有充分地调查对FSP的ALLEOP概要以及对ALLEOP的FSP细化,以进一步进行注解。由该讨论得出的ALLEOP和FSP之间的关系是显著的,并且应该被进一步追踪。
[0294] 仅依赖于有限ALLEOP的结构的所有证明将具有FSP证明的简单性。用户定义要被证明的CTL断言,并且还可以提供断言来引导证明搜索。系统验证在接收断言之前,由用户提供的每个断言对于给定实施是有效的。
[0295] NFSP证明:依赖于计算中使用的变量值的ALLEOP证明可以请求NFSP(非FSP)证明方法。这样的NFSP证明可以获取对ALLEOP的结构的感应。我们将看到部分6中的FSP和NFSP的简单例子。对于在计算中网络动态增长的应用,它的ALLEOP可以是NFSP ALLEOP,包含上下文相关以及具有潜在无限数目ALLEOP节点的通用递归结构。在部分6.7中示出例子。
[0296] 下面的例子是[Magee & Kramer,13]中 描述的“谈话和期 望(talking and itching)”例子的增大版本。这里,期望证明非确定性保护间隔、并发、封装(encapsulation)、隐藏和调整(coordination)的使用。
[0297] 2.2.谈话和期望:封装、并发和调整
[0298] 人们同时谈话和期望。在[Magee & Kramer,13]中,仅存在一个人,并且该人通过时隙并发来进行谈话和期望。我们考虑具有两个人的该例子的通用版本,其中在它们之间发生交谈,并且每个人在谈话的时候间歇地搜寻。该机制可以用于多于两个人。通过在任何时间不超过一个人谈话来保持有序的谈话。这个例子使用了具有虚拟存储器的Das路径,其已经在图4中介绍。
[0299]
[0300] 图7:两个人的谈话和期望实例
[0301] 在图7中所示的网络,P0和P1是两个人。每个人Pj(j=0,1)是合成的蜂窝,包含一个对话蜂窝Cj和一个期望蜂窝Ij。这两个蜂窝在每个人的不同CPU中并行运行。每个合成蜂窝隐藏的内部连接并且一些具有与外部端口的连接。让我们首先看一下对于两个封装的蜂窝的内部和外部连接以及它们支持的网络活动。
[0302] 外部连接:对于j=0,1,存在路径Cj.f0,Pj.f0,a1,a0,E.g1](见图7)。这里,端口[P0.f0,P1.f0]形成端口组;代理a1将同步的信号传递给[P0.f0,P1.f0],并且经过代理a0从[P0.f0,P1.f0]将调整的信号传递回到E.g1。类似地,E.g0通过代理连接至端口组[P0.i,P1.i]中的外部中断端口,端口组[P0.i,P1.i]反过来分别连接至内部中断端口(C0.i,C1.i)。E使用这个路径来激活蜂窝Cj(j=0,1)。存在路径[Cj.f2,Pj.f2,Pk,g2,Ck,g2],其中i,k=0,1,并且i≠k,这允许Cj.f2 and Ck,g2之间的通信。类似地,路径[Cj.f3,Pj.f3,Pk,g3,Ck.g3]能够进行Cj.f3和Ck.g3之间的通信。
[0303] 内部连接:Pj.g具有至中断端口Ij.i的内部连接。当Pj被激活时,它使用这个连接来激活Ij。其他两个内部连接是 和 Cj和Ij使用这两个连接来调整它们的活动。
[0304] 隐藏:仅链接至封装的蜂窝的外部端口的端口和代理可以从外部世界访问。封装内部的路径对外部世界隐藏,我们将这称为隐藏。
[0305] 网络活动:环境E通过将中断信号广播给端口组[P0.i,P1.i]中的端口来激活交谈蜂窝Cj(j=0,1)。一旦被激活,蜂窝初始化、确认中断信号的接收并且然后开始轮询它们的端口。在初始化的过程中,每个蜂窝Cj通过经由Cj.g将中断信号发送至Ij.i来激活期望蜂窝Ij(见图7)。这引起期望蜂窝在执行它们自己各自初始化之后开始轮询。在激活之后,对话蜂窝E广播随机选定的2比特信号[b0,b1]至端口组[P0.f0,P1.f0]中的端口。关于这些比特的限制是它们不能均为“0”,或者均为“1”。仅当b0=1(b1=1),代理a1(见图7)发送传递信号至P0.f0(P1.f0),否则不发送。
[0306] 当一个人在端口Pj.f0接收信号,信号通过内部连接行进到Cj.f0。当Cj感应到这个信号,它开始谈话。由于b0和b1不能都是1,两个人不能同时开始说话。当一个人说话时,另一个人的蜂窝将轮询他们的端口,并且假定侦听该谈话。在开始说话之前,Cj通过Cj.g0发送信号至Ij.f0(见图7)。当Ij感应到这个信号时,基于布尔变量、Ij.itching和Ij.continue是否均为真,他开始间歇地搜寻,并且当Cj说话时,它继续间歇地搜寻。通过随机真值发生器Ij:random()在每个搜寻周期中设置Ij.itching和Ij.continue的真值。由此,一个人不能总是在谈话会话中搜寻。这里假设,总是在比谈话间隔短得多的间隔中进行搜寻。由于期望和对话蜂窝并行操作,由它们执行的动作并行发生,即使一个人开始说话和开始搜寻的时间点并不彼此同步。这里的异步将是在2千兆赫兹CPU中几百纳秒。
[0307] 在说话之后,Cj首先通过路径 发送信号。这通知Ij停止搜寻。Cj然后以下两件事情之一:(i)它通过路径中的端口[Cj.g2,Pj.g2,Pk.f2,Ck.f2]发送信号至Ck.f2(k≠j)(见图7),以建议Pi开始谈话以继续对话,或者(ii)通过路径中的端口[Cj.g3,Pj.g3,Pk.f3,Ck.f3]发送信号至Ci.f3,以终止对话。稍后描述在两个功能端口Ck.f2和Ck.f3这些相互排他的信号被用于继续或停止对话的方式。
[0308] 下面TIP中的一个使用格式 的不确定的保护间隔。符号‘|’指定替代物。这里,每个Ci在轮询周期中的每一个中评估该保护间隔。
仅当保护间隔中指定的替代物之中的一个端口具有向其传递的信号,保护间隔被评估为真。在保护间隔中被传递给端口的信号应该是相互排他的,为了成功地操作不确定的保护间隔。如果在ci.f2感应到信号,那么对话继续,如果在Ci.f3感应到,那么对话终止。如果对话终止,那么信号通过端口Ci.f0发送回到E.g1,如果这个端口准备好发送那个信号。
仅当ci.f0通过代理a1从E.g1较早地接收了信号,ci.f0将准备好发送那个信号(见图
7)。由此,仅从E接收了信号的蜂窝对其响应。这里发生调整,在这一点,代理a1将期望仅从对其较早传递了信号的端口接收信号。当a1传递这个信号到E.g1时,它通知E对话终止。在该点,E可以开始另一个对话会话,或者通过发送第二个中断信号至中断端口Cj.i(j=0,1)来终止游戏,Cj将在终止自身之前通过发送中断信号至Ij.i(见图7)来终止Ij。
在下面的TIP中没有示出开始和终止处理。
[0309] 每个人的蜂窝具有下面的轮询周期:
[0310]
[0311] 让我们假设Cj开始对话并发送信号至Ci来继续对话。在发送该信号之后,Cj将开始轮询它的端口,根据上述轮询周期,假定在相同时间侦听其他人说话(在这个实施中不包括侦听处理)。Cj可以经过多个轮询周期,同时继续对话。这将引起重复地感应在Cj.f0处接收的传递信号。因为只要对话继续就不发送响应,每次完成感应时,在cj.f0的信号的感应将成功,如图1中所述。由此,当Ci正在说话时,Cj也将开始说话。为了防止这种情况,Cj在cj.f0感应到传递信号之后立即设置Cj.f0.input=φ。这防止了在Cj.f0重复感应信号。我们使用语句Cj.f0:suspend()来进行。因为暂停不会改变端口的状态,当这样做恰当时,将通过暂停的端口来发送响应。
[0312] 通过这个序言,以及下面给出的注释,读者现在能够遵循下面描述的TIP。
[0313] 对于个人Pj,j=0,1:TIP用于谈话部分。.
[0314]
[0315] 对于个人Pj.j=0,1.TIPS用于期望部分.
[0316]
[0317]
[0318] 每次在P0.f0或P1.f0接收信号时开始对话。每次对话开始或间歇地继续时开始搜寻。我们将如何发生正确的调整留给读者。网络不提供侦听。为了提供侦听,通过与对话蜂窝的恰当调整在封装中引入第三侦听蜂窝。
[0319] 2.3观点TM TM
[0320] ALLEOP集成由TICC 网提供的结构信息,使得在TICC 网、TIP和轮询周期中暗示的并行计算、同步和调节的控制结构明确,并且定义由时间地图假定的时间点的部分排序语义。它们表示可访问机器处理的格式中的集成的信息。对于人类,他们如下回答问题:路径做什么?什么是TIP?什么是轮询周期?什么是通信模式?可以如下回答这些问题:路径使得端口之间能够进行信号通信,执行通信的同步/调整,对交换的消息提供访问,并且激活信号接收蜂窝中的并行计算。TIP处理/创建消息、发送/接收信号、并且从通信中隔离用于消息处理/创建的方法。轮询周期指定蜂窝参加在它们的端口的TIP执行的顺序。因为基于相关的条件使得在可选因果链中进行选择,并且通过信号传递并行任务/分支的激活,得到通信模式。事件模式由此定义并行计算中支路、分支和接合控制结构的模式。可以使用常规语法或使用ALLEOP节点作为终端符号的其他种语法来描述这样的模式。然而,ALLEOP没有指定由蜂窝执行的计算的细节。每个ALLEOP节点表示事件分类。可以在因果网中发生ALLEOP节点的多个实例。
[0321] 就像可以以不同数据结构定义运行相同的时序程序,对应用定义的并行线程的相TM TM同集合可以对于相同应用在不同TICC 网中并行运行。由此,可以将TICC 网看做并行计算的控制结构的概要,就像数据结构是序列程序中数据操作的概要。
[0322] 迹线将信息加入到ALLEOP。迹线假定虚拟时间点并将其与ALLEOP中发生的事件分类和时间地图以与ALLEOP规范一致的方式相关联。由此很清楚定时在ALLEOP中是清楚的。迹线还通过将前提条件/后置条件与动作相关联并且通过表征交换的消息(如果有的话),定义由TIP执行的计算的语义。对于人类,他们回答下面的问题:动作计算什么?动作被正确执行了吗?同步发生了什么事件?调整了什么事件?对这些问题的答案如下:由为了动作成功表征在动作执行之前什么应该保持为真的前提条件以及在执行终止之后表征什么应该为的后置条件来定义动作。在这些前提条件/后置条件中可以包括由动作处理/创建的消息的特征。如果每次执行动作时,在恰当的时间满足前提条件和后置条件两者,则动作的实施是正确的。同时发生具有相同虚拟时间点的事件。具有相同虚拟时间点的消息分派事件是调整的事件。
[0323] 因果网是仅关注在应用中的通信事件并发上的迹线的概要以及它们的同步/调整特性,忽略所有条件和动作。如部分7中所述,事件分析者蜂窝(ea蜂窝)可以分析与应用并行的应用的增长的因果网,同时由事件建立者蜂窝(eb蜂窝)创建因果网,而与应用的正在进行的操作的定时不存在干扰或存在很少干扰。由ea蜂窝执行的分析是基于先验定义的事件模式,或者由ea蜂窝动态学习的事件模式。甚至由ea蜂窝识别的模式可能被用于指引应用中执行的计算。
[0324] 对于应用部分排序的域是对于应用可以运行的所有可能的方式SMS可以生成的所有可能的因果网的简单表示。由此,这个域和从该域映射到本身的单调连续映射一起足TM以定义TICC -Ppde的指称语义。这与π微积分观点一致:逻辑不需要用于计算;具有合适的隐藏和替代规则的通信就足够了。逻辑仅需要用于定义和证明计算的正确性。这就是为什么需要迹线提供的信息以提供CTL断言。ECT重新组织在迹线中的信息,并且轮询周期和ECT网络提供实施中的端口ECT的串行/并行组合。它们被用于提供CTL断言。我们将看到部分6中的一些例子。
[0325] 在附录I到III中表示的实施和在部分6中表示的证明示出了上面提到的观点。值得注意ALLEOP很容易由系统从实施规范中自动地得到。如果系统已知动作的前提条件TM
和后置条件,则从ALLEOP中容易地并自动地得到迹线。TICC -Ppde提供用于动作的前提条TM
件/后置条件的交互开发的工具。TICC -Ppde的四个特征使其成为可能:(i)关于具有附TM
带的端口的蜂窝、具有代理和可选的虚拟存储器的路径的TICC 网的组织;(ii)关于TIP、轮询周期、并行线程和协议的通信的组织;(iii)计算和通信的集成:执行计算的每个蜂窝也使用CCP的协议执行所有它的通信;以及(iv)蜂窝的相互隔离(部分3.2中讨论)。
[0326] 3.关于蜂窝和路径的更多情况
[0327] 3.1附件和调谐
[0328] 附件和调谐在TICCTM中具有特殊的意义。仅附带和调谐的部件可以彼此自由地共享数据和方法。由此,附带的和相互调谐的端口、蜂窝、代理和虚拟存储器可以彼此自由地共享方法和数据。
[0329] 我们使用a.M来参考代理a附带的虚拟存储器,使用M.a[i]来参考M附带的第i个代理,并且设置p.M=p.a.M,其中p.a是对其调谐p的代理。仅通过分支或h分支(隐藏分支)彼此连接的部件或者彼此附带的部件可以在路径中彼此发送信号。在图4和5中,端口被附带于它们的父蜂窝,通过分支连接至代理,并且代理通过h分支彼此连接(它们是h分支,因为当动态地改变路径时,不能动态地改变代理互连)。由此,在路径中的代理和端口以及代理对可以交换信号并且蜂窝可以发送信号至它们的端口。如前所述,在任何给定时间路径仅在一个方向上允许信号转移,并且交换信号的部件总是彼此调谐。
[0330] 调谐:通过分支b将端口p连接至代理a,将p调谐至a,通过设置(i)p和a的初始状态,该初始状态使得它们能够彼此交换信号,并且(ii)向p转移a.M=p.M中的数据的地址以及方法,使得当p的状态是S时,p的父蜂窝能够访问p.M中的数据和并行线程。由此,将p调谐到a也将p和它的父蜂窝调谐到虚拟存储器a.M=p.M。因为蜂窝可能具有多个端口,蜂窝可能具有对其调谐的多个虚拟存储器,蜂窝的不同端口具有不同的虚拟存储器。通过将两个蜂窝连接至设置蜂窝的初始状态的h分支来彼此调谐这两个蜂窝。
[0331] 事务完成:如前所述,在每个蜂窝中的端口的周期轮询确保了被发送给蜂窝的端口的每个业务请求被感应到并对其做出响应。当任何蜂窝正在对业务请求做出响应时不能中断该蜂窝。蜂窝仅在连续的TIP执行之间感应和响应中断。这些特征与下面的子部分描述的蜂窝隔离一起确保每个事务的事务完成,并且这保持路径部件总是彼此调谐。
[0332] 3.2蜂窝隔离
[0333] 蜂窝通过轮询它们的端口并且执行在端口定义的TIP主体来执行计算。由于蜂窝在不同的计算单元并行操作,它们提供并行执行机制并且不使用时间分割的中断驱动的并行线程执行。并行线程和协议与蜂窝和它们的端口唯一相关。蜂窝的每个端口可以具有并行线程并且将具有与其相关的唯一协议。由项目的两个属性定义蜂窝隔离。
[0334] 私有和本地并行线程:当执行并行线程时,蜂窝可以仅使用蜂窝中定义的数据和处理,或者附带在蜂窝上或者与蜂窝调谐的部件。在这样的并行线程执行过程中不能使用其他数据或处理。特别地,操作系统不能干扰TIP执行。可以由任何其他蜂窝执行与蜂窝相关的并行线程,即使相同并行线程的副本可以由不同蜂窝并行执行,每个服务在它自己的私有存储器或相关的虚拟存储器中。并行线程执行仅可以改变执行并行线程的蜂窝的状态。蜂窝的这些特征类似于施动和π微积分代理。
[0335] 在端口组中端口的父蜂窝(见图19)可以在端口组中的端口的共享虚拟存储器中同时执行相同的并行线程。在这样的执行过程中,它们可以使用共同共享的变量。在部分6.2中我们将看到如何组织并行线程以阻止这样的执行过程中的存储器干扰。与协议相关TM
的这些特性和下面提及的特性对于TICC -Ppde组织是唯一的。
[0336] 私有和本地协议:不同的端口具有对其定义的不同协议。在蜂窝的端口定义的协议可以由除了端口的父蜂窝之外的任何蜂窝执行。当在蜂窝的端口执行协议时,蜂窝执行在连接至端口的路径上的协议中的CCP和其他动作语义(见部分7)。协议执行没有使得蜂窝执行在协议本身中没有定义的任何其他线程或处理。也没有使用在路径的部件中没有定义的数据。不同的蜂窝可以仅并行执行不同的协议(由此协议是在端口实例中定义的方法而不是端口子分类。在我们的C++实现中,这强制执行我们解释性地执行协议,追踪路径的部件。这对于由于在协议执行过程中发生的重复的高速缓存再充满引起的显著的无效率有贡献。由此,即使在2千兆赫兹的机器中花费了20到50纳秒来执行CCP,则花费350到500纳秒执行具有四个CCP的协议。这可以通过提供C++中的Eval运算符以及通过消除高速缓冲存储器的使用来避免,如在本文中稍后建议的那样,其中Eval运算符类似于用于评估与端口相关的编译的协议的LISP中的eval运算符)。如前所述,经过相同的组对组路径由端口的父蜂窝并行执行端口组的端口处定义的协议段(见图19),如部分7中描述。
[0337] 3.3并行缓冲、并行电报和灵活性
[0338] 不需要序列缓存Ever:在接收到对第一次请求的业务的响应之前,总端口不能发TM送第二个业务请求消息至功能端口,类似于例如图1和2中的端口D.f。这对于TICC 网中的所有总端口和功能端口均保持真。由此,没有虚拟存储器将在任何时间保持多于一个未决的业务请求消息。在它的虚拟存储器中保留每个未决的业务请求消息直到感应到该请求并做出响应。
[0339] 类似地,在它的虚拟存储器中保留每个答复消息直到由消息接收蜂窝感应并使用该答复消息。没有虚拟存储器将在任何时间保持多于一个答复消息。因而,每个虚拟存储器在任何给定时间最多保持一个业务请求和一个答复。连接至不同路径的不同端口将具有TM与其相关的不同虚拟存储器。由此,在TICC 网中的虚拟存储器对于业务请求和答复提供并行缓冲机制。这些特征消除了序列缓存的需要。不像施动者系统,不需要解决缓冲竞争,并且不需要串行器。
[0340] 并行消息传送:我们已经提到了一些。我们将再次提及:由于(i)每个蜂窝本身在其他蜂窝并行执行消息交换所需的协议,(ii)没有两个不同的路径共享共同的部件,并且(iii)没有协议执行在路径的部件中没有定义的任何线程或处理,不同的协议可以没有相TM互干扰地并行执行,无论它们是通过点对点还是组对组路径。由此,在TICC 网中蜂窝之间并行地同时交换的消息的数目仅由网络中激活的蜂窝的数目和不同路径的数目限制。CCP保持路径部件与蜂窝隔离并且彼此隔离。
[0341] 灵活性:可以动态地改变连接至端口的路径从而引入灵活性,只要不违反下面的路径需求:(i)没有端口连接至多于一个路径;(ii)没有相同蜂窝的两个端口可以连接至相同的路径,除非该端口处于端口矢量(见部分4.2和部分7);以及(iii)没有两个不同的路径可以共享部件。在事务的中间,路径的消息目的地功能端口可以从路径中断开并且路由到不同的目的地功能端口。然后新的目的地端口的父蜂窝将处理路径的虚拟存储器中的业务请求消息,在虚拟存储器中写入答复消息,并且将路径重新连接回到它的原始目的地端口,然后如果需要,该原始目的地端口的父蜂窝可以修改该答复,并且将该答复发送到请求该业务的总端口。由此,总是通过传递业务请求的相同路径发送回来答复。在事务的中间不能动态改变连接至路径的总端口。
[0342] 在分布式存储器系统中,通过将虚拟存储器的整个内容传送到分布式系统中的其他虚拟存储器来实现程序灵活性。
[0343] 3.44.TICCTM、π微积分、施动者和CSP
[0344] TIP执行使得要执行并行线程和协议,并且使得蜂窝彼此交互。蜂窝之间的交互类似于π微积分中和施动者中代理之间的交互。通过使用施动者和π微积分代理,并行线程执行是严格的蜂窝的私有操作。然而,存在若干个显著的不同。
[0345] TICCTM和施动者:在施动者系统,通信协议调用OS方法以及施动者外部的其他处理。异步通信需要使用串行缓存。需要序列缓冲器来解决缓存竞争。不能预测由一个施动者发出的消息何时将到达接受方施动者。通信不是顺序保留:消息不能以发送的顺序到达目的地。
[0346] 在TICCTM中,不像施动者系统,通信是面向连接的。仅当已经建立了两个蜂窝之间的路径时,才能在这两个蜂窝之间发生通信。蜂窝执行协议以交换消息。该给定的边界中TM可以精确地预测消息发送和传递时间。在TICC 中协议执行和并行线程执行之间的唯一不同在于协议不包含声明。由此,它们不能在执行过程中创建/破坏数据容器(在部分5中介绍的保持数据的存储器单元)。除了传送消息之外,协议也转送对传递的消息的访问权限。协议定义蜂窝执行的计算的限制的形式。这消除了计算和通信之间的经典二分法。由TM
此得到名称“用于集成的计算和通信的技术”(TICC )。
[0347] 还不像施动者系统,TICCTM支持组对组通信,自动同步和调整以及动态SMS(自我TM监控系统)。TICC 通过使用并行缓冲机制消除了在异步通信中序列缓存的需要。不能象TM
TICC -Ppde中的SMS那样定义施动者系统中的SMS。对于事务的支持不是施动者系统固有的。
[0348] TICCTM和π微积分:如在TICCTM中,在π微积分中的通信是面向连接的。通过已经建立的链接在π微积分代理之间交换名称,并且可以动态地建立链接。在事务的中间可以动态地改变路径传送信号和至它的目的地功能端口的路径连接。π微积分不使用事务的TM概念。对TICC 中的路径连接的动态改变和对π微积分中的链接连接的动态改变看起来要实现不同的计算目标。路径可以分支并且进行对若干不同端口的相同信号的时间同步的传递,每个端口属于不同蜂窝,如图3、4和20所示。不像π微积分链接,路径具有包括端TM
口、协议、虚拟存储器、代理、分支和h分支的结构。此外,不像π微积分代理,在TICC 中蜂窝之间的交互是精确定时的。
[0349] 重要的不同之处如下:如前所述,路径协议将通信定义为通过交互ndFSM执行并且由送出消息的蜂窝执行的图灵计算[Turing,20]。π微积分没有对于它的链接指定通信机制。实际上,不能指定使用π微积分形式所需的通信机制。在这种情况下,π微积分不能指定所有并行计算。仅当通信被假设为给定原语时,它指定并行计算。π微积分不具有同步和调整机制。不可能定义π微积分中的SMS。
[0350] TICCTM和CSP:我们已经提到了不同之处。我们将再次陈述。没有并行线程(对应于CSP中的序列处理)将包含通信语句。通信原语不能被编码到序列处理(并行线程)。仅TIP包含通信语句。TIP将通信与交互序列处理(并行线程)隔离。不像CSP通道,路径不能阻碍交互并行线程。也不像CSP通道,路径支持点对点和组对组异步通信。不可能定义CSP中的SMS。
[0351] 并行线程的成对独立:没有在一个蜂窝子分类中定义的并行线程可以调用并且执行在另一个子分类中定义的另一个并行线程,除非该子分类实例附带于蜂窝或与蜂窝调谐。然而,并行方式运行的两个蜂窝执行相同的并行线程的副本,每个副本处于它自己的不同的执行环境中。由一个蜂窝指定的并行线程不能改变另一个蜂窝的状态。由不同蜂窝指定的并行线程的对保持彼此相互独立。然而,存在一种例外。当端口组中的端口的父蜂窝联合发出业务请求消息,或者联合处理接收到的业务请求消息时,发生该例外。在这种情况下,需要端口组中的端口的父蜂窝调整它们的计算。它们使用由保持消息的虚拟存储器提供的公共的便签式存储器来进行这样的操作。由端口组中的端口的父蜂窝执行的并行线程彼此依赖。它们必须被联合验证。这使得独立地和分离地验证绝大多数并行线程称为可能。
[0352] 4.关于TIP和TICCTM-Ppde的更多情况
[0353] 4.1生成(spawning)新的计算
[0354] 通常蜂窝C在它的一个功能端口C.f处的业务请求不能由它自己计算对接收的业务请求的响应。在这种情况下,C可能必须在一个或多个其他蜂窝中生成新的计算,从而计算响应。具有下面的格式的TIP被用于这个目的:
[0355] C.f:mR?(){C.f:r(C.g);C.f:spwn?(){C.g:s();C.f:suspend();}
[0356] else{C.f:s();}} (4.1)
[0357] C.f:suspend()被定义为
[0358] {(t0)}[ ● → C.f:suspend()(t0)]{(t1)} (4.2)
[0359] 其中,φ是空符号。这防止C在它的随后的轮询周期中在端口C.f感应到传递信号。我们看到这用于不同的上下文,在部分2.2中的谈话和期望例子中。在(4.1)中,并行线程C.f:r(C.g)≡C.f:msg():r(C.f,C.g)被定义在与端口C.f调谐的虚拟存储器中消息的消息子分类中,C.f:spwn?()=C.f.spwn是与C.f相关联的局部布尔变量。在C.f:r(C.g)中设置C.f.spwn的真值。
[0360] TIP(4.1)做下面两件事情之一:在执行并行线程C.f:r(C.g)之后,TIP根据C.f:spwn?()的值通过端口C.g或者端口C.f将消息发送出去。并行线程C.f:r(C.g)或者在C.f的虚拟存储器中写入响应消息并且设置布尔变量C.f.spwn=false,或者在C.g的虚拟存储器中写入新的业务请求并且设置C.f.spwn=true。在这种情况下,C在接收通过C.g发送的业务请求的蜂窝内部生成新的计算,并且暂停在端口C.f的活动。暂停C.f破坏了在C.f的传递信号。由此,轮询在随后的轮询周期中将在C.f失败。在暂停C.f之后,C立即继续至服务它的下一个端口。在C.f的虚拟存储器中保留数据和执行状态。仅当C后来在端口C.g感应到答复消息时,C才继续它在端口C.g的活动。注意在(4.2),在C.f的暂停并没有改变C.f状态。由此,当在端口C.g接收响应并且重新开始计算时,C.f将准备好发送回响应。
[0361] 在(4.1)中具有else子句的条件语句,
[0362] C.f:spwn?(){C.f:s();C.f:suspend();},else{C.f:s();}”,被如下解释[0363] selectOne{C.f:spwn?(){C.g:s();C.f:suspend();}
[0364] C.f:spwn?(){C.f:s();}
[0365] true{}/*在这种情况下C.f.spwn=φ*/},
[0366] 其中,selectOne从上到下扫描它的条件并且选择被评估为真的一个条件。存在无条件的退出子句,在selectOne中的最后一个。由此,如果C.f.spwn=φ,则不发出消息。当蜂窝不满足发送消息所需的条件则发生这种情况。这种情况下,如果要使用在端口C.f接收的消息重新开始计算,则设置C.f.spwn=φ的并行线程将复位C.f.input=s,或者如果要使用在端口C.g接收的消息重新开始计算,则设置C.g.input=s。这将使得C在随后的轮询周期中在C.f或C.g感应消息,并且在蜂窝满足要求的条件时通过C.f或C.g发送消息(见部分4.1.1)。
[0367] 当在随后的轮询周期中在端口C.f感应到消息接收者时,C执行具有与(4.1)中TIP相似主体的TIP,不同之处在于使用在C.g接收的消息现在执行C.g:r(C.f)而不是C.f:r(C.g),并且TIP重复相同模式的消息传输。
[0368] C.g:mR?(){C.g:r(C.f);C.g:spwn?(){C.g:s();C.f:suspend();}
[0369] else {C.f:s();}} (4.3)
[0370] 由此在经过端口C.f发送回响应并且完成事务之前,按照需要重复生成多次。在每个这样的计算中,事务的完成是强制的。这里,C.g:r(C.g)=C.f:msg():r(C.g,C.f)被定义在端口C.f处接收的消息的子分类中,并且C.g:r(C.f)=C.f:msg():r(C.f,C.g)被定义在端口C.g接收的消息的子分类中。
[0371] 对于每个功能端口C.f,通过其可以生成新的计算的总端口C.g是唯一的。没有C的其他功能端口可以使用c.g。这是用于防止否则会发生的可能的死锁。可以知道,任何时间C经过C.f送出业务请求,端口C.g将准备好发送该消息。
[0372] C.g对其发送它的业务请求的蜂窝可以本身类似地生成新的计算。此外,C.g可以将它的业务请求广播给功能端口组。这可以使得计算在网络上传播。对其发送业务请求的每个蜂窝被强制进行响应并且将总是这么做。最终所有生成的事务终止并且由C.g接收响应消息。然后在C.g的响应消息将由C使用来对它在C.f接收的业务请求做出响应(或者可以再次生成)。
[0373] 4.1.1具有替代物的ALLEOP和迹线
[0374] 我们下面证明由于在由TIP(4.1)和(4.3)指定的生成计算中由选择点引起的分支,在ALLEOP和迹线中替代物的发生。假设在(4.1)中TIP中的端口C.f在T(B.g,1)的时间点从端口B.g接收它的消息,并且在TIP(401)中的端口C.g与端口D.f通信。用于TIP(4.1)的ALLEOP具有以下形式
[0375]
[0376]
[0377] 在(4.4)中,ALLEOP指定在括号‘(…|…|…)’之间包括的替代物,由‘|’隔离。在(4.1)中的并行线程C.f:r(C.g)也将具有由下面的(4.5)中所示的选择点指定的替代物。在(4.5)中的C.f.M是与C.f调谐的虚拟存储器;类似于用于C.g.M。
[0378]
[0379] 注意,当在(4.5)中将C.f.spwn设置为φ时,C.f.input被复位为s,使得C可以在它的下一个轮询周期中再次感应在端口C.f接收的消息。这是防止,通过执行(4.1)中所示的C.f.suspend(),在端口C.f在前一个业务尝试中C.f.input已经被设置为φ。并行线程C.g:r(C.f)=C.g:msg():r(C.f,C.g)具有类似的结构,不同之处在于C.f和C.g扮演的角色互换了。
[0380]
[0381] 用于(4.5)的ALLEOP具有下面所述的结构,具有可替代规范:
[0382]
[0383]
[0384] 用于(4.6)的ALLEOP于此类似。
[0385] 4.2端口矢量
[0386] 当使用端口矢量时发生分支和接合。端口矢量p=[p1,p2,…,pn]是端口的矢量,所有相同种类的、所有附接于相同的蜂窝的端口。在与这个端口矢量相关联的TIP中,在矢量中的端口的父蜂窝将使用具有该形式的保护间隔,p:mR?()(或者p:pR?())来检查消息(或者检查端口准备就绪),其中
[0387] p:mR?()=[p1:mR?()&p2:mR?()&…&pn:mR?()]以及 (4.8)
[0388] p:pR?()=[p1:pR?()&p2:pR?()&…&pn:pR?()] (4.9)
[0389] 由此,仅当在矢量的所有端口具有传递给它们的信号(或者所有信号已经准备好)时,蜂窝才开始在它的端口矢量响应于信号。如果对于端口矢量中的所有端口保护间隔不是真,则跳过端口矢量并且父蜂窝开始轮询它的下一个端口。在图1和2中,当在总端口g执行g:mR?()测试时,输入信号s=g.input被复位为φ。对于属于端口矢量g的总端口gi将不发生输入信号的复位。这是因为在对于g中的所有端口成功之前在连续的轮询周期中必须重复g:mR?()测试。通过写入p:mR?()*(或者p:pR?()*)指定同步的保护间隔,这里重复地评估保护间隔直到它变成真。这里的TIP具有一种以下格式:
[0390]
[0391] 在(4.11)中,在g中的端口不具有向其传递的消息。在(4.12)中,在g中的端口具有向其传递的消息。这种情况下,当经过f发送回答复时,对于g中的每个gi设置g.input=φ将表示已经听到并使用通过gi接收的消息。在(4.12)中的C:suspend(g)执行这个任务。在(4.10)、(4.11)中的C:r(f),C:r1(g,f)以及(4.12)中的C:suspend(g)这里被定义在端口矢量中的端口的公共父蜂窝中。端口矢量C.g被保留用于C.f的排他使用。应该被注意到,当C发出消息时,在C.g中的所有端口总是准备好发出消息。蜂窝可以根据在C:r(g,f)(或C:r(f)中的计算仅使用来自C.f的子集的消息。类似地,可以发出消息,该消息仅通过C.g中的端口的子集生成计算。在这种情况下,C将记住发出消息的总端口,使得稍后可以仅在这些端口侦听响应。但是它总是响应于f中的每个端口。
[0392] 在保护间隔表达式中不允许分离,除了在部分4.4中描述的非确定保护间隔的上下文中。我们看到了在部分2.2中使用非确定保护间隔的例子。然而,对接收的消息的分离性的响应可能依赖于C:r(g,f)(或C:r(f))如何使用在C.f的端口接收的消息。由此,当在端口矢量的一个端口处感应到消息时,可能根据消息的本质,忽略在相同的矢量的另一个端口处接收的消息。指定具有分离的保护间隔以及端口矢量方法之间的本质区别在于在后一种情况,仅在端口矢量中的所有端口已经接收到消息并且准备好发送响应之后发生响应,并且将用于分离的使用的预期的计算偶然性编码到并行线程。总是通过端口矢量中的每个功能端口发送回答复。即使没有处理该消息,也将发送用于消息接收者的确认。由此将总是完成事务。
[0393] 这个约定的结果是引入蜂窝的端口矢量中的端口之间的某种交互模式,类似于例如在一个端口的消息禁止在另一个端口响应,必须改变已经被编码的并行线程,该并行线程由蜂窝使用来响应于通过端口矢量接收的消息。我们倾向于这个选项,因为避免分离简化了实施的分析。
[0394] 4.3周期同步
[0395] 在网络中的两个端口被称为周期同步,如果仅在它们服务了它们的第n-1个输入消息(发出它们的第n-1个输出消息)之后它们均服务它们的第n个输入消息(发出它们的第n个输出信息)。在网络中不同端口的集合的周期同步强制执行以预定顺序在这些端口发生动作。由此,端口的周期同步调整在这些端口的动作。
[0396] 4.3.1同步和调整的类型
[0397] 周期同步:如前所述,在(4.11)和(4.12)中,功能端口矢量f的父蜂窝可能仅通过在它的相关在端口矢量g的该端口的子集生成业务请求。然而,总是通过f的所有功能端口发送答复消息。由此,当f中的端口是周期同步的,那么在g中的端口不是周期同步的。
[0398] 这是在组对组通知中发生的双重(部分2.2和7),其中在总端口组G中的端口总是周期同步的并且在功能端口组F中的端口不是。这是因为,由G中的端口发送的联合业务请求消息可能仅被传递给F中的功能端口的子集。对其传递给联合业务请求消息的功能端口的特定子集可以依赖于被发送的并且处于安全规范中的消息(见部分2.2和部分7中的例子)。将消息传递信号广播给功能端口F的代理追踪对其传递了消息的功能端口,并且将仅从这些功能端口期望响应。
[0399] 同步接合和分支:在组对组通信中,引起分支和接合的消息的分派和传递将分别由组对组路径中的代理来调整和同步,如部分1.3.2和8中描述的那样。在蜂窝组中的不同蜂窝将在不同时间对同步传递的消息开始响应,因为开始响应计算的时间不是同步的。然而,由于通信是同步是,我们参考这些作为同步接合和分支。
[0400] 异步接合和分支:由功能端口矢量f中的端口接收的消息构成了接合操作,并且通过总端口矢量g发出的消息构成了分支操作。这些消息可以在不同时间到达(离开)并且来自不同蜂窝或去往不同蜂窝。因为这里的通信是异步的,我们将其参考为异步接合和分支。然而,请注意总是同步开始在异步接合中接收的消息的响应计算。这里,通过端口矢量的消息接收父蜂窝来完成同步。
[0401] 在部分6.6(图17和18)中,介绍了生成的组合、端口组和端口矢量组织,其中由TMTICC 网中的不同蜂窝的不同端口的任何给定集合接收的异步消息可以是周期同步的,以强制执行以给定顺序发生响应计算,或者强制执行在端口的消息接收父蜂窝中同步开始响应计算,而不用必须改变在已经实现的应用中的任何并行线程。我们参考这些作为特别调整和同步。
[0402] 如前所述,TICCTM-Ppde计算不需要监视器或旗语或会合技术[10,12,23,24]来调整和同步并行计算中的动作。我们看到在部分2中不使用监视器和旗语的同步和调整的两个例子,并且将在部分6中看到更多例子。在此描述的所有同步和调整特征是对于TMTICC -Ppde唯一的。
[0403] 4.4非确定保护间隔
[0404] 非确定保护间隔从指定集合中选择一个替代物。TIP具有以下格式,
[0405]
[0406] 这里p代表f|g。在保护间隔中的替代物的从左到右扫描中选择具有传递信号的第一端口。如果替代包括功能端口,这些情况必须是相互排他的。否则,可能不对在功能端口接收的消息进行响应。如前所述,这是不允许的。
[0407] 在TIP(4.14)中,让我们假设C.pi(其为保护间隔中的一个替代端口)从B.qi接收它的输入消息。(4.14)的ALLEOP然后具有以下格式,具有替代的活动因果链:
[0408]
[0409] 也可以具有同步保护间隔,在这种情况下,重复保护间隔的扫描直到发现具有传递消息的端口。这
可能获得成功,因为与蜂窝操作并行地将消息传递给蜂窝的端口。在部分6.1中在Ornamental-Garden解决方案、OG解决方案中使用这种类型的同步保护间隔。其他存在的保护间隔具有以下形式
[0410]
[0411]
[0412] 仅包含总端口。在这种情况下,不同的情况不需要相互排他,因为不需要对传递给总端口的消息做出响应。ALLEOP与(4.15)是类似的。在部分6.3中,这种保护间隔用在生产者/消费者方案、PC方案中。
[0413] 4.5端口依赖性
[0414] 每个蜂窝具有它自己的内部存储器。它使用这个存储器来执行在蜂窝中定义的并行线程并且存储它的本地状态。对于每个端口,蜂窝C的C.f,当C执行TIP主体c.f:tip()时,它执行的并行线程可以计算函数,
[0415] ξf(mn,SC[f,n-1])=(mn’,SC[f,n]) (4.17)
[0416] 其中,mn是由端口C.f接收的第n个消息,驻留在C.f的虚拟存储器中;SC[f,n-1]是在C.f执行第n-1个消息的结束时与它的端口f相关的C的状态,mn’
是经过端口C.f发送的第n个响应消息,并且SC[f,n]是在执行后C.f的状态。我
们将使用Pp来表示关于端口p定义的判定,使用PC来表示关于蜂窝C定义的判定:
将 包 含 在
(Pf∪PC)中真的判定。在蜂窝和端口的本地存储器中保持与这些判定相关联的值。在(4.17)中,C.p:tip()可以仅改变在(Pf∪PC)中判定的值。
[0417] 计算格式(4.17)的函数的每个端口是蜂窝C的独立端口,如果具有附带条件ξfTM的 不能改变在PC中的判定。在TICC -Ppde中的蜂窝可以具有多于一个这样
的独立端口。如果C.f是C的一个独立端口,则可以与连接至C.f的路径一起将C.f移动到新的相同的蜂窝C’,其中C’.f接收与C.f接收的消息相同的消息,并且C’.f具有与C.f相同的功能。在这种情况下,依赖于C.f的所有端口(见下面的(4.18))应该被移动到C’。
可以将多个独立的端口分配到蜂窝C以保持被分配给C的CPU不是空闲的。中断端口总是独立的端口,但是它们不能被移动到另一个蜂窝,因为基于通过中断端口接收的消息,在蜂窝中的计算被开始/停止、暂停/重新开始,或者在蜂窝中的端口的顺序改变。
[0418] 对于端口C.f1,由C.f1:tip()计算的函数可以具有格式,
[0419] ξf1(mn,SC[f1,n-1],SC[f2,n-1])=(mn’,SC[f1,n]) (4.18)[0420] 其中,SC[f2,n-1]是在相同的蜂窝的另一个端口C.f2的状态。在这种情况下,端口f1被称为依赖于端口f2。ξf1可以使用Pf2中的判定但是不能对其进行任何改变。这种端口依赖性由处于C.f2的TIP强制执行,具有下面的嵌套格式:
[0421] C.f2:mR?(){C.f2:r().s();C.f1:mR?()*{C.f1:r(C.f2).s()}} (4.19)[0422] 这里,在响应于f2的消息之后,蜂窝在f1等待以接收那里的消息并对其做出响应。在TIP中可以具有任意数目的这样的嵌套。f1和f2彼此独立是可能的。在这种情况下,TIP具有格式,
[0423] C.f2:mR?(){C.f2:r(C.f1)s();C.f1:mR?()*{C.f1:r(C.f2).s()}} (4.20)[0424] 这里,f2使用f1和f2的初始状态首先对它的消息做出响应,并且然后f1跟着这样做。下一次f2使用f1和f2的更新的状态对它的消息做出响应,并且这个交互周期继续。清楚地,在(4.19)和(4.20)中的f1和f2是周期同步的。这种情况下,仅在C.f2:tip()中执行C.f1:tip()。
[0425]
[0426] 图8:移动依赖的端口
[0427] 在图8中,在标记“原始”的蜂窝中,如在(4.18)中,C.f1依赖于C.f2。在“修改”的版本中,在C.f1的路径已经被移动到另一个蜂窝C’的端口C’.f1,其包含端口矢量f=[C’.f1,C’.f2]。原始端口C.f1被转换为总端口C.f,并且在C.g和C’.f2之间建立路径。在C.f2的下面的TIP和矢量[C’f1,C’.f2]可以被用于说明C.f1和C.f2之间的依赖性:
[0428] (C.f2:mR?()&C.g:pR?()){C.f2:r(C.g).s();C.g:s();} (4.21)[0429] (C,.f1:mR?()&C’.f2:mR?()){C’.f1:r(C’.f2).s();C’.f2:s();} (4.22)[0430] 这里,C.f2在C.g.M中写入消息并且将其发送出去到C’.f2。清楚地,C.f2和[C’.f1,C’.f2]是周期同步的。它不分离相互依赖的端口。
[0431] 在这种方式将独立和依赖的端口移动到新的蜂窝的可能性引起了规范的网络的概念,其中每个蜂窝仅包含一个独立的功能端口或功能端口矢量,并且所有其他功能端口依赖于它。
[0432] 由C.f:tip()计算的函数可以具有格式
[0433] ξf(mn,SC[n-1],Sf[n-1]))=(mn’,(SC’[n],Sf[n])) (4.23)[0434] 其中SC是蜂窝C的状态并且Sf是端口C.f的状态。这里,共享共同父蜂窝的状态的C的所有端口应该彼此依赖,但是它们将不是周期同步的。如前所述,C.f:tip()可能仅改变(PC∪Pf)中的判定。在部分6中的哲学家就餐解决方案中,管家的所有功能端口依赖于管家的状态。在这种情况下,由蜂窝产生的消息的输出依赖于处理输入消息的顺序。因为在蜂窝的任何一个轮询周期中,并不是所有它的端口具有传递给端口的消息,并且TM消息感应不是与消息传递同步的,这是在TICC -Ppde中非确定性的源。如前所述,这对于TM
TICC -Ppde中的并行计算是固有的。
[0435] 蜂窝的功能端口f和总端口g可以彼此相互依赖,如在生成TIP(4.2)和(4.3)中。这里,端口f导致依赖性,因为g可以具有进在在生成了计算之后被传递给它的消息,它可以仅在f:tip()中这么做。蜂窝可以使用专门用于它的功能端口之一的总端口来从数据库或从因特网获得数据。蜂窝还可以使用不是专门用于任何功能端口的它的总端口来收集数据以备后用,如在部分6.3中的生产/消费者例子中。
[0436] 在部分1和4中介绍的TIP格式仅是在TICCTM-Ppde中使用的TIP格式。TIP可以具有在它的主体中嵌入的其他TIP,并且每个TIP发送出零或更多消息。让我们参考,在蜂窝的端口处的由蜂窝在轮询周期中轮询的TIP是外部TIP。在任何给定时间,在所有情况下,每个蜂窝与所有它嵌入的TIP(内部TIP)一起仅执行一个外部TIP。蜂窝仅在完成当前外部TIP之后,或者在执行当前外部TIP的编程暂停之后,执行它的下一个外部TIP。外部TIP执行是相互排他的,每个端口矢量C.p具有一个共同的对于矢量中所有端口定义的TIPC:tip(p),以及对于所有端口定义的共同状态SC[p,n]。C:tip(p)可以根据它的功能性改变Pp或Pp∪PC中的任何判定。
[0437] 在所有情况下,正在网络中由蜂窝并行同步执行的TIP的数目以及并行同时交换的消息的数目可以仅与在网络中激活的蜂窝的数目一样多。
[0438] 4.6系统构造
[0439]
[0440] 图9:传统和TICCTM系统构造
[0441] 对比在TICCTM-Ppde中的系统组织和传统系统组织是有益的。图9A示出在粗粒度的并行编程中用于并发/并行线程/处理执行的传统构造。由MPI[25,26],PVM[27]提供的库和由Ethernet[22]或Myrinet[28]提供的网络可以用于通信。施动者系统假设这个构造。对于这些系统中的调度、通信、同步、调整和处理以及线性管理存在显著开销,存在效率的损失。TICCTM-Ppde不在调度、调整、同步和并行线程管理上浪费时间。
[0442] 实时性能:仅存在TICCTM-Ppde中任何蜂窝执行的三种操作:(i)轮询和排序端口(ii)并行线程执行,以及(iii)协议执行。使用2千兆赫兹的计算机仅,花费大约15-30TM纳秒来轮询和排序TICC -Ppde中的端口。消息交换是自我调度、自我调整和自我同步的。
并行线程和蜂窝激活是自我调度的,当感应了传递的消息或者当以按排序的端口列表(见(2.1))中指定的顺序执行p:tip()时,它们是自动激活的。如图9B所示,不需要操作系统来执行这些操作。只要消息准备好被发送就发送所有的消息。每个蜂窝可以在它准备好的任何时候与每个其他蜂窝并行发送消息。
[0443] 我们调用这个实时性能,因为所有可用的实时被用于执行与应用相关的计算,并且时间没有浪费在调度、调整和同步会话或任何其他种类的开销上。没有使用过序列缓存。虚拟存储器组织最小化在共享存储器操作中的存储器干扰。这允许在TICCTM-Ppde中的并行程序的有效执行。图9A示出的传统组织不提供这种实时性能。
[0444] 预测性:例如多指令流执行[29],预测未来调度[30],流水线处理[31]和缓冲的执行[32]的建立的增速技术不能预测线程激活和执行时间,以及消息分派和传递时间[Lee et al,33-36]。在TICCTM-Ppde中不需要这些技术,从而获得高的吞吐量。在TICCTM-Ppde中,我们具有可预测的消息交换反应时间以及并行线程执行时间。并行线程激活时间在有界限的时间限制内是可预测的。在计算的基于事件的TICCTM-Ppde模型中建立定时。
[0445] 同步和调整:TICCTM-Ppde提供用于在应用中的事件的调整和时间同步的新的方法,而不使用监视器、旗语或会合技术[Hoare,10,12][Dijkshtra,23,24]。这些在部分2和6的例子中示出并且在部分6.6中讨论。
[0446] 基于事件的模型:我们将在部分6、7中看到,TICCTM-Ppde最重要的特征是它从实施规范中自动地生成基于事件的计算的模型,并且这些模型用于通过符号的评估的静态验证系统,并且还用于动态自我监控系统(SMS)。这些特征对于TICCTM-Ppde是唯一的。基于事件的语义使得通过精确的定时操作,TICCTM-Ppde很好地适于建立实时计算机物理系统以及使用多核芯片的嵌入式系统,如果不需要高速缓冲存储器。高速缓冲存储器的消除和使用加速技术的需要的消除简化了多核芯片中CPU的设计。
[0447] 在我们处理示出了用于构造ALLEOP证明的方法的例子之前,有必要定义在TICCTM中计算和通信的本质、事件和因果关系、OO组织和符号。这将是我们下一个部分要做的。
[0448] 5.名称、世界(world)状态、评估器和事件
[0449] 5.1 OO结构
[0450] 我们以名称的有限集合开始。名称可以是在有限字母表中符号的串联。让指的是这个名称的集合。在中每个名称表示唯一的事情。由名称表示的项目被称为容器和对象。这里存在三个集合:。我们使用元符号x,y来指代在中的名称。我们使用元符号Δx,Δy等来指代由x,y等表示的容器。在这种情况下,我们写入x.denotes=Δx和Δx.denotedBy=x,并且x∈。我们使用元符号b,c等来特别指代,δb,δc等来指代由b,c等表示的对象。我们写入b.denotes=δb=b.value,和δb.denotedBy={b}=δb.valueOf;这里使用‘{b}’,因为总的来说应该存在多于一个名称来表示相同的对象。=φ和=φ,()=。由多对一映射来定义表示:。δx≡x是可能的,对象名称的值可以与名称本身一致。由此,()={b|b.value=b}。
[0451] 当若干个容器名称表示相同的容器Δx时,我们将设置这些名称中的一个(即,名称z)作为那个容器的区别的容器名称,并且设置Δx.denotedBy=z。当若干个对象名称表示相同的对象,δb,那么设置δb.denoteBy=δb.valueOf={c|c.value=δb}。我们定义下面的用于名称的判定,其与x∈相同。
其与x∈相同。我们使用三个
区别的对象,分别称为具有真、假和φ的属性,δtrue=true,δfalse=false和δφ=φ;φ是空对象。这些被称为常数,因为这些对象名称的值从不改变。对于任何名称x, 和
[0452] 当且仅当两个名称彼此相同时我们断言(x≡y),如果(Δx≡Δy)或(δx≡δy)我们断言 即,x.denotes≡y.denotes。可以读取 作为‘x全等于
y’。当且仅当 两个名称x和y是不同的。对于两个名称的集合,S1和S2,
S1∩S2和S1∪S2被类似
地定义。注意这里合适的关系的使用。
[0453] 每个容器具有它可以包含对象或另一个容器的属性。我们写入Δx.contains=δb或Δx.contains=Δy, 对象不能包含任何事情:我们说如果Δy.contains=δx那么对象δx驻留在Δy,并且写入δx.residesIn=Δy。每个对象必须驻留在某个容器;不存在自由漂浮的对象。彼此相同但是驻留在不同容器内的两个对象被称为彼此的副本。
[0454] 对 于 z ∈ (),我 们 定 义 方 法z:eval():z:eval() = [(z ∈ ) ? (){z}|z ∈ ? (){z.contains:eval()}|
[0455] z:object?(){δz}|z:container?(){Δz:eval()}] (5.1)
[0456] 相等性:名称、对象和容器的相等性定义如下:
[0457] 和
[0458]
[0459] 相等性的这个定义可以扩展到定义对于集合X的的(x∈X),,并且对于集合X和Y的X=Y, 以及 注意,((x=y)&(x:eval()=φ))是可能的。然而,具有空值的名称不能彼此相等,除非它们彼此完全一致。 但
是相反不是真的,因为不同的名称可以评估相同δb的副本。
[0460] 可以将Δx考虑为存储器蜂窝并且将容器名称x考虑为这些存储器蜂窝的指针(地址)。可以将每个δb考虑为表示对象b的编码(比特串),并且驻留在存储器蜂窝中。仅当对象驻留在存储器蜂窝的编码由该指针指出时,该指针指出对象。在容器(存储器蜂窝)中的对象可以不被修改而不必须改变存在于其他存储器蜂窝中的这些对象的副本。我们将术语“denotes”,“valueOf”和“contains”指代为属性,术语“object?()”,“constant?()”和“container?()”指代为判定,以及“eval()”指代为方法。当我们遇到时,在我们下面的讨论中,我们将引入为名称定义的更多的属性、判定和方法。
[0461] 排序:对于具有排序关系的 <定义在它们的要素上,并且名称x和y,
[0462]
[0463] φ∈S是可能的。通常的定义应用于(x≤y),(x>y)和(x≥y)。
[0464] 结构:如果b具有索引的结构并且对于名称x,x:eval()=δb那么对于在b的索引范围内的i,x[i]=δb[i]=b[i],否则x[i]=φ。然而,x[i]=φ并不暗示i处于b的索引范围之外,因为b[i]的值是φ是可能的。x[i]本身具有索引的结构x[i][j]。如果b是具有对其定义的属性atbt的结构如果没有定义b.atbt,那么x.atbt=b.atbt=δb.atbt,并且x.atbt=φ。b.atbt本身具有属性atbt1是可能的。那么,x.atbt.atbt1=b.atbt.atbt1=δb.atbt.atbt1。
[0465] 名称的分组:每个名称x具有为其定义的方法x:names(),x:names()是与x相关的所有名称的集合。它将包含x,对于x定义的所有属性、判定和方
法x.attributes,x:predicate?()和 x:method(),并 且可 以 另外 还 包括 其 他名称。因为 它绝不会是空的。对于两个不同的名称x和y,
x:names()∩y:names()≠φ;φ:names()={φ}是可能的。对于任何x,x:names()的闭合,被写为[x:names()],是
[0466]
[0467] 名称的分类:名称具有与其相关的类型,例如整数、数值、字符串、集合、结构、分类等。是所有类型名称的集合。方法x:type()被用于指代名称x的类 型:x:type() = Δx:type() = x:eval():type(),以 及 b:type() = δb:type();
φ:type()=φ。每个类型表示在中的名称的子集:
清 楚 地,type:type() = Δtype:type() =
Δtype.contains:type()=set。Type1是type2的子类型,当且仅当
由 此, 成 立。 如 果
(type1∩type2)=φ,Type1和type2是不同的。哪个也不是另一个的子类型的两个类型应该是不同的。我们使用在类型/子类型层级、概要类型等中用于传承的通用约定。与系统S相关联的OO结构如下描述。
[0468] 系统S的OO结构:让WS(t)是在时间t的系统S的世界状态。
[0469]
[0470]
[0471] 我们仅使用离散时间:每个时间点t是正整数。如果(t1<t2),那么WS(t1)是WS(t2)的紧前项,当且仅当不存在其他时间点t’使得WS(t’)存在并且(t1<t’<t2)。我们使用x(t)来断言(x,Δx)∈WS(t)以及 由此,x总是容器名称。x:eval()=φ是可能的。我们说如果评估器(子部分5.3)从世界状态WS(t)访问三元(x,Δx,x:eval()),则访问判定x(t)为真。其他事件判定是(x=y)(t),这断言在WS(t)中(x=y)是真,并且类似地(x<y)(t),(x>y)(t),(x≤y)(t)和(x≥y)(t)。
判定相关的集合被使用:(x ∈Y)(t), 等。当且仅当(t1<t2)时,判定具有排
序:x(t1)<y(t2)。注意,(x<y)(t)与x(t1)<y(t2)不相同;((x<y)(t1)<(y<z)(t2))是可能的。如果它不是重要的,时间参数可以被忽略。
[0472] 让S:cells()表示在系统S中所有蜂窝的集合。对于蜂窝C的端口C.f,C.p.a是与C.p调谐的唯一代理;C.p.pathway是连接至C.p的唯一路径,C.p.pathway.vM=M=C.p.vM是C.p.pathway的唯一虚拟存储器M;M.ag[i]是附接于M的第i个代理;M.prts[i]是调谐于M的第i个端口;C.p.ndFsm是C.p中定义的ndFSM。C.p.a.ndFsm是C.p.a中定义的ndFSM。C.vMs={C.p.vM|(C.p attachedTo C)}。如果C.p连接至dm路径,那么C.p.pathway.vMs是在dm路径中的所有虚拟存储器的矢量;C.q.vM∈C.q.pathway.vMs。最终,a.prt[i]是调谐到代理a的第i个端口,并且a.nxt[i]是调谐至代理a的第i个下一代理。矢量,M.ports=∪[M.a[i].ports|0≤i<M.a:size()]。代理、虚拟存储器和端口是路径部件。下面的名称与C.p.pathway相关联:
[0473] C.p.pathway:names()=
[0474] C.p.vM:names()∪∪{C.p.vM.a[i]:names()|0≤i<C.p.vM.a:size()}∪[0475] ∪{C.p.vM.ports[i].ndFsm:names()|0 ≤ i < C.p.vM.ports:size()} (5.6)
[0476] 这里,C.p.vM:names()将包含在C.p.vM中驻留的消息中定义的所有名称。注意,不是所有的C.p:names()均处于C.p.pathway:names()中,仅包括C.p.ndFsm:names()。如同我们在部分6.2中将看到的,每个虚拟存储器具有四个部件。其中两个被称为读存储器和写存储器,包含消息。在任何给定的时间,这两个部件中的每个可以包含至少一条消息。对于附接于蜂窝C的每个端口c.p,
[0477]
[0478]
[0479] 由此,C:names()和C.p:names()不包含在C.p.pathway:names()中的所有名称,它们仅包含C.p.ndFsm:names()。对于任意两个路径和不同的蜂窝C1,C2以及两个端口p和q,下式成立:
[0480] [C1:names()]∩[C2:names()]=φ, (5.9)[0481]
[0482]
[0483] 其中 断言p和q由路径连接。注意在(5.10)中全等关系 的使用。在(5.11)的情况下,路径是不同的。不同的蜂窝和不同的路径绝不共享容器。在系统S中的S:names()中的名称的不变的(即编译时间)OO结构如下定义:
[0484] S:names()=
[0485] ∪{C:names()|C∈S:cells()}∪
[0486] ∪{C.p.pathway:names()|C∈S:cells()&(C.p attachedTo C)} (5.12)[0487] 世 界 状 态 被 划 分 为 C:names() and C.p.pathway:names(),其 仅 在C.p.ndFsm:names()彼此重叠。这个重叠使得能够在连接至路径和附接于蜂窝的端口之间的通信。这个结构的改进有助于方法的定义。在dm路径的情况下,在路径中由ndFsm:names()表示的容器通过信号线彼此连接,并且在虚拟存储器中的容器通过数据线连接。信号和数据通过这些线在容器之间交换,由协议中的CCP调整。
[0488] 5.2条件和CTL语句
[0489] 我们使用术语“保护间隔”来指代用于测试信号的判定和判定表达式,术语“状态”来指代描述端口和代理的状态的判定和判定表达式,并且使用“条件”来指代所有判定和判定表达式。条件是任何很好定义的第一阶表达式,包含具有逻辑连接和量词的判定,或者它是判定的布尔表达式。所有条件以‘?()’结尾。量词的范围是有限集合。条件总是在[x:names()]中由名称定义的世界中评估,其中x是蜂窝、端口、代理、虚拟存储器或消息。
[0490] CTL语句(因果时间逻辑语句)是具有通常句法的相等、排序、访问和事件实例、具有通常的逻辑连接的定义的判定、时间模式操作符□(总是)和◇(最终)以及使用量词和 的因果连接,→,●→(下面描述)的任何组合。否定可以仅出现在单个的判定和事件实例,并且不出现在作为整体的表达式中。否定的事件实例被解释为“事件实例不应该发生”。如下所述,事件实例具有常数的状态:当且仅当两个事件实例完全一致时,它们彼此相等。在 和 中定量的变量的范围是事件实例、虚拟时间点和在CTL语句中出现的其他对象。通常,量词的范围是先验已知有限集合。我们在这里不描述CTL语句的句法。用于描述在前面部分中的ALLEOP和迹线的语句是CTL语句。在后面的部分中出现更多的例子。证明不涉及对CTL语句进行逻辑演绎,仅涉及在给定ECT网络上的CTL语句的符号评估。我们将看到在部分6中的ECT网络的例子。
[0491] 5.3评估器、事件和因果关系
[0492] 存在结构化的常量称为评估器。系统可以具有任意但是有限数目的评估器E[i],其中0≤i<N。在我们的讨论中我们不会需要明确参考评估器。但是这个概念是重要的。在TICC-Ppde中,存在与每个蜂窝相关联的评估器(CPU),并且所有评估器并行操作,仅通过消息交换彼此交互。假设EC是蜂窝C的评估器。通过创建/破坏名称、容器、目标和编码,修改编码,将对象/容器从一个容器移动到另一个容器,将容器从一个名称移动到另一个名称,并且对容器设置访问权限,并且从世界状态访问对象(它们的编码),评估器执行计算。这些是动作和访问事件。由评估器执行的计算由此使得发生访问和动作事件。当评估器EC从WS访问名称x时,它将三元(x,Δx,x:eval())加入到EC.accessedItems列表。
在评估的结束,它可以使用EC.accessedItems中的部件来执行WS的一致更新,并且然后破坏它的私有EC.accessedItems列表。
[0493] 名称x是由评估器在世界状态WS(t)中创建(破坏)的,如果在紧前项WS(t’)中x(t)是真(假)但是x(t’)是假(真)。通常的约定是如果存在t1≤t2,在WS(t2)中判定是真的,使得在WS(t1)中判定是真的,并且不存在t’,t1<t’≤t2,使得在WS(t’)中判定是假的。由此,在世界状态中存在名称直到它们被破坏,并且判定保持它们的真值直到它们被改变。
[0494] 访问权限、数据保护和通信
[0495] 通信和计算之间的唯一差异在于通信协议可以仅创建/修改对象(数据),该对象处于与路径中的端口、代理和虚拟存储器相关联的已经定义的容器中。它们不能创建/破坏容器。这是因为,它们不包含声明。它们任一个都不能修改消息或者虚拟存储器中的其他数据。由此,通信是简单的计算的限制格式,不同之处在于通信除了向评估器传送信号之外还传送访问权限。对于评估器EC,EC.hasAccessTo(t)指定了EC在时间t可以访问的所有名称的集合,EC.hasAccessTo(t)如下定义:
[0496] EC.hasAccessTo(t)=
[0497] EC:names()∪C:names()∪
[0498] ∪{C.p.pathway:names()(t)|(C.q.state=S)(t)} (5.13)
[0499] 这里,C.p.pathway:names()是时间的函数,因为路径的虚拟存储器可以在不同时间包含不同消息并且路径还可以动态地改变。仅当C.p处于状态S时,在C.p.pathway中的名称的访问权限被转移到EC。如图1和2所示,当感应到消息时或者当端口准备好发出TM消息时,端口总是将它的状态改变为S。由此,在TICC 中,当需要时,在正确时间通信自动地将访问权限转移到评估器。当C.p的状态从状态S改变到其他状态时,自动地调用这些访问权限。
[0500] 评估器具有能够评估动作、事件和名称的属性。动作总是方法、协议或条件,或者简单地是编程语言中的语句:声明、分配、条件(例如if-then-else和selectOne)或while-loop。在方法中出现的声明y:A(),在蜂窝、消息、端口、代理或虚拟存储器y中定义,对于声明的名称将三元(x,Δx,x:eval())引入y.A:world()(t)。我们还使用声明来破坏名称或从y.A:world()(t)移除名称。此外,y.A:world()(t)包含y.A:world()(t)也包含用于y:A()的代码并且包含当正在执行y:A()时动态地创建的名称。协议是动作,不同之处在于它们不包含声明但是包含CCP。方法通常不包含CCP。
[0501] 我们使用→a用于访问评估→e用于动作评估,具有下面的符号:
[0502] 访问完成时间t:[<→ax>(t)] 访问开始时间t:[→ax(t)] (5.14)[0503] 评估完成时间t:[<→ex:A()>(t)] 评估开始时间t:[→ex:A()(t)] (5.15)[0504] 评估完成时间t:(t) 评估开始时间t:x:C?()(t1) (5.16)[0505] 将评估器应用至x,动作x:A()或者条件x:C?()可以使得发生新的事件(下面描述),这将反过来引起其他评估和其他事件的发生。基于这个原因,我们将→a和→e称为因果关系。它们是不反射的,不对称的以及及物的。评估器不仅使得事件发生,而且它还可以如下所述评估通信事件。
[0506] 关于时间实例的注意:两个时间实例t1和t2有可能是不可比较的,因为它们是由彼此不同步的不同评估器的本地时钟测量的。但是每个时间时钟具有对于全局时间的唯一的一对一映射。我们使用x.t1,y.t2来指定与两个不同的对象x和y相关联的本地时间点。如果x和y均属于相同的蜂窝,则在x和y的本地时间中保持不相等(x.t1<y.t2)。否则,(x.t1<y.t2)可能仅相对应时间点x.t1和y.t2与指定的全局时钟当前全局时间的映射而成立。若干本地时钟时间点可以映射到相同的全局时间点,由此在不同蜂窝中可以发生若干事件,每个蜂窝处于不同的本地时间但是所有蜂窝处于相同的全局时间。所有时间点是映射到整数≥0的离散时间点。
[0507] 访问评估:如前所述,符号x(t)被用于表示事件,在该事件中评估器从世界WS(t)保持三元(x,Δx,x:eval())。清楚地,仅当评估器具有对x的访问权限时,即,x∈EC.hasAccessTo(t),评估器可以对其访问。当评估器由此访问x时,那么它应该访问括号中的E所有名称[x:names()]。在下文中,我们定义评估器→a和→e。当必要时,我们写入 →aE
和 →e以明确地指代进行评估的评估器。如下定义访问评估:
[0508]
[0509]
[0510] 总是要花费一些时间τ>0来完成访问。如果访问是成功的,那么使得事件x(t+τ)变成真。这里动作不改变世界状态WS,仅E的本地状态改变。一旦在时间(t+τ)访问x,(x,Δx,x:eval())在时间(t+τ)进入E.accessedItems,并且E获得对括号中所有名称的访问权限<[x:names()]>(t+τ)。如果不满足(5.17)中的前提条件,那么访问尝试将返回φ。因为我们使用约定来判定在世界状态总是维持它们的真值,除非改变,它不是必须在(5.17)中指定指定帧语句WS(t)=WS(t+τ)。我们这里假设评估器的本地状态不同于世界状态,由此,在E.accessedItems中出现的三元将绝不会在世界状态中出现,即使如前所述,三元中的要素形成了世界状态中的关系结构。
[0511] 动作评估:如下定义动作评估:对于名称x,
[0512] [E→ex(t)]=[E→ax(t)]=x(t) 并且对于动作或条件x:A(…), (5.18)[0513]
[0514] 这里,x.A:preC?()是用于x:A()的前提条件的一部分;它的其他部分是它必须已经访问了在x.A:world()中的所有需要的名称。类似地,x.A:pstC?()是用于动作的后置条件的一部分。它指定了由x:A()的执行产生的对世界状态WS的改变。后置条件的其他部分是x.A:output?,其是由x:A()产生的输出。它应该是φ。条件x.A:preC?()和在前提条件中的所有指定访问应该是真的,从而x:A()的评估成功。如果评估成功并且在世界状态WS(t+τ)中后置条件保持真则评估是正确的。因为访问事件和条件检查的发生不改变世界,所以可以在前提条件为真的相同世界中执行评估。对于这个动作的评估的上下文是x.A:world()(t)的子集s。E E
[0515] 此后,我们将省略在 →a and →e中的前缀上标E和下标a和e,并且仅写入评估作为→,假设→a被包含在→中。对于常数C,在所有时间(→ec)=(→ac)=(c,Δc,δc);缺省地,特定常数被暗含地假设为总是处于世界状态中。我们下面将没有机会参考访E问评估 →a。
[0516] 并行线程是方法,动作的子集。使用四种编程语句来定义方法:声明、分配、条件(类似于if-then-else和SelectOne)和While-loops。声明创建/破坏容器和对象可以设置新创建的容器的内容,并且使得三元(x,Δx,x:eval())在编译/执行时间被引入到method:world()或从method:world()移除。在方法定义中的其他语句可以使得对象和容器被修改,从一个容器向另一个容器移动内容,或者指示改变的名称。在它的执行过程中,方法仅改变method:world()中的本地状态。在它的执行的结束,评估器可以使用这个本地状态来执行世界状态Ws(t)的一致更新。因为Ws(t)如(5.11)中定义的那样被划分,蜂窝隔离(部分3.2)确保可以由并行操作的蜂窝完成对Ws(t)的多个并行更新,而不存在相互干扰。在方法定义中出现的程序语句的语义可以被容易地定义。我们这里非正式地使用程序语句,假设读者应该知道期望的含义。在图1和2中表示在协议中使用的CCP的特征。对TM于在并行线程和协议中使用的绝大多数语句,TICC -Ppde可以在给定的上下文中自动地生成相关的前提条件和后置条件,但是用户交互可能需要定义特定前提条件和循环不变量。
[0517] 5.4符号和定义:ALLEOP节点的评估
[0518] 我们在部分2中看到了在ALLEOP和迹线中发生的动作和通信事件的例子。在下文中,我们使用符号X,Y,Z,…用于动作事件分类以及符号X[T(…)],Y[T(…)],Z[T(…)],…用于通信事件分类。这些事件分类参考ALLEOP节点。它们是称为事件的顶级分类的子分类。我们使用符号x(t),y(t),z(t),来表示事件实例;X(t)表示在时间t发生的实例X(见图6B)。如果X(t)是通信事件子分类的实例,X[T(,#)],那么t∈t(,#)。X(.t#)指代在迹线(见例如(2.18)中的迹线)中在虚拟时间点.t#∈T(,#)X[T(,#)]的事件发生。在一轮应用中,通信事件子分类的多个实例X(T[,#)]可以发生在因果网中。在因果网中发生的这些实例的时间点的集合对于该轮应用组成严格增长的时间点t(,#)=.t#的序列(见图6C)。
[0519] 通信事件:我们下面介绍在部分2中使用的‘发送’命令的‘转发’变化。在下文中,p,q=(f|g |i),p≠q。
[0520] pD[T(q,#)]:在T(q,#)中的时间点由端口q将消息传递给端口p。
[0521] pS[T(p,#)]:在时间点T(p,#)由p发送消息。
[0522] pF[T(p,#)]:在时间点T(p,#)由p转发消息。
[0523] 转发传送接收的消息(可以具有一些修改),并且发送传送新创建的消息。我们将S看到在部分6.2中的精确区别。在下面[→p|F(t0)]指代在时间t0在端口p在消息(发S|F S|F
送/转发)处理中p 实例的发生的开始,[<→p >(t1)]指代在时间t1,(t0<t1)事件发生的结束。下面的特征在协议执行和保护间隔评估过程中对通信事件评估保持真。
[0524]
[0525] 上面的语句描述了在协议执行的开始和结束时发生了什么,以及当感应传递信号时发生了什么。行(1)指定在开始时,端口g的父蜂窝将信号c|f发送给端口g,如果g已经准备好发出消息。如行(6)所示,仅当g的状态是S或者它的输入是s时,g准备好。在发送信号之后,端口g的级立刻改变为R并且g.input变成等于c|f。当在状态R中,g不能发出第二个信号。类似地,行(2)描述在协议执行中在消息传递的时间发生了什么:这里,D‘→f(t0)’是在端口f的传递事件。它在时间t0开始并且在当p.input=s的时间结束。
行(3、4、5、6)描述了当以后感应到在端口f或g已经传递的信号时发生了什么。注意,(行
5和6)g.input被复位为φ。由此,仅在端口g可以感应一次传递的信号。如前所述,对于属于总端口矢量的总端口将不再发生g.input=φ的这个复位。在所有情况下,在感应信号之后,端口移动到状态S,由此对端口的父蜂窝给出访问该端口的虚拟存储器中的数据。
一旦端口准备好发出信号,它继续准备好直到信号被发出,如在行(1)和行(3)中定义。
[0526] 存在对于通信事件评估的另一个解释。SMS(部分7)使用事件评估来安装在应用的增长的因果网中ALLEOP节点的实例,同时运行应用。这是由下面的(5.21)和(5.22)定义。图19示出了事件建立者蜂窝eb。当eb将评估器→应用于通信事件时,它在特定的时间点产生事件的实例并且将其安装到因果网。每个通信事件具有与其相关的两个时间点:一个是当事件本身发生的时间(这是重要的),另一个是当在一个中安装实例的时间(这是不重要的)。下面将描述这两个时间点的使用。
[0527] 在下面的(5.21)和(5.22)中,[eb.f1,eb.f2]是在图19中的事件建立者蜂窝eb的端口矢量,并且Ci.gi和Dj .fj是交换消息的端口,0≤i<n and 0≤j<m。
[0528] 蜂窝Ci评估端口Ci.gi的协议以发送消息并将其传递到端口Dj .fj。这个协议执S D行触发对通信事件Ci.gi(ts)和(td)的评估,其中ts是发送开始的时间消息,而td是完成消息传递的时间。如下方式定义对于上述通信事件的评估:
[0529]
[0530] 在协议执行过程中,信号被发送到端口[eb.f1,eb.f2]以指令eb蜂窝创建通信事S D件Ci.gi(ts)和(td)的实例。在部分7中说明了这是如何发生的。在(5.21)中,eb在时间t1完成了对由端口[eb.f1,eb.f2]接收的信号的感应。这还是eb开始评估(Ci.S D S
gi(ts),td))的时间。这导致在时间t2关于因果网中的事件实例(ci.gi(ts),fj>(td))的安装。这里,ts是当与由Ci.gi 发送的信号对应的调整后的信号被代理在路径D
上转发的时间,而td是在Dj.fj 中设置同步传递信号的时间。
[0531]
[0532] (5.22)描述了用于答复消息发送的因果网中安装的事件。我们之后将仅在发生事件的时间点关联通信事件实例,并不示出在因果网中安装实例的时间点。这是与我们将时间点和动作事件实例相关联的方式是一致的。
[0533] 事件分类和事件实例的等同性:
[0534] 和
[0535] 和
[0536] 因此,事件分类和事件实例具有常数的状态;如果它们是相同的,则也是相等的。然而,事件X的评估不同于常数的评估。
[0537] 同时性和并行性:当使用多个评估器时可发生通信事件的并行评价。对于在(5.20)中描述的通信事件评价,如下成立:
[0538]
[0539]
[0540] 在(5.25)中,t1(…)和t2(…)是其中通信事件发生在两个不同的评估器的两个时间地图。评估分别在两个评估器中在本地时间点c1.t1和c2.t1开始并在c1.t2和c2.t2完成,其中c1.t1<c1.t2并且c2.t1<c2.t2。在评估完成的时间点发生通信事件实例X(c1.t2)和Y(c2.t2)。在发生两个评估的过程中,时间间隔[c1.t1,c1.t2)和[c2.t1,c2.t2)还可在全局时间上重叠。通常,由开始两个评估的本地时间点(c1.t1,c2.t1)和终止评估的时间点(c1.t2,c2.t2)构成的一对时间点将是不可比较的;即它们以任何顺序发生。并行评估因此被写作(<→X>(c1.t2)‖<→Y>(c2.t2))。如果两个事件是同步的或被调整的,则在全局时间下T1(…)≡T2(…)并且c1.t2=c2.t2。并行评估因此被写作[→<(X‖Y)>(c1.t2=c2.t2)]。对于动作事件也可发生相似的并行评估。它们的区别仅在于没有时间地图关联于动作事件,而是虚拟时间点关联于动作事件分类和指定发生评估(实例)的时间点,并且给定的动作事件分类可具有严格递增序列的时间点下的多个实例。
[0541] 因果:下面,X和Y是事件子分类。我们以如下方式使用评估器符号→作为以下情况中的因果符号:事件的发生可导致一个或更多的其他事件的发生;如果条件C(X,Y)为C(X,Y)真,则将‘X→Y’读取为‘X导致Y’,而将X →Y读取为‘X导致Y’:
[0542]
[0543]
[0544] X→φ≡STOP(nothing happens) (5.28)
[0545] 其中,τmax(X,Y)是在发生两个事件实例之间的最大可能延迟。
[0546] 中间因果:
[0547]
[0548]
[0549] 在(5.30)的X●→Y中,在X和Y之间没有发生任何事件。因此,评估●→是不可分割的;它是不能被中断的。
[0550] 5.5.因果链和细化
[0551] 因果链:
[0552]
[0553]
[0554] 中间因果链:
[0555]
[0556] 如同在(5.33)中那样,即使省略了□运算符号,应该假设其存在。在语句(5.31)和(5.33)的任一侧上并行线程或协议执行中事件的因果链(或中间因果链)交替分支,这导致不同的终止事件,如在(4.5)、(4.6)、(4.14)和(7.4)中示出。当在协议执行中发生分支时,因果链将会包含最终接合在单个的公共通信事件的并行支路,如在图6的示意图中描绘的。这对于下面介绍的所有细化都适用。应该假设在所有情形下因果链包含可替代的支路和/或分支。
[0557] →的细化:
[0558]
[0559] (X→Y)的细化是中间因果链,e1●→e2●→…●→en,以使得(X→Y)=(X●→e1●→e2●→…●→en●→Y)。如果我们使用εi特指中间因果链εi=
ei1●→ei2●→…●→eik(i),其中0≤i≤n,则对于n≥0,一般情形将是,
[0560] RefinementOf[(X→(Y0|Y1|…|Yn)]=
[0561] [(Xε0Y0)|(Xε1Y1)|…|(Xεn-1Yn)], (5.34a)[0562] RefinementOf[(X→(Y0‖Y1‖…‖Yn)]=
[0563] [(Xε0Y0)‖(Xε1Y1)‖…‖(Xεn-1Yn)], (5.34b)[0564] 其中,εi是中间因果链,其中0≤i≤n,符号‘|’表示替代而符号‘‖’分割并行的因果链。
[0565] 并行线程和协议:协议的终止事件总是由在协议执行过程中交换的信号唯一地确定的。从端口p到端口q传送的信息的细化具有如下的格式(出于简化,在下面所有的语句中都假设线性细化)。S D S D
[0566] p[t1(…)]→q[t2(…)]=p[t1(…)]●→protocol●→q[t2(…)]=S D
[0567] p[t1(…)]●→ec0●→ec1●→…●→eck●→q[t2(…)] (5.35)
[0568] 这是CCP的不可中断的序列和端口p处的协议中的其他动作事件。在感应到被传递的消息之后及在由蜂窝C发出响应消息之前执行的并行线程的细化都具有如下的格式,[0569] C.p:mR?(C.pD[t1(…)])●→pthread●→C.pS[t2(…)]}=
[0570] C.p:mR?(C.pD[t1(…)])●→ep0●→ep1●→…●→epn●→C.pS[t2(…)]} (5.36)
[0571] 这也是动作事件的不可中断的序列。它发生在并行线程执行的过程中。
[0572] C1.p:mR?(C1.pD[t1(…)])●→pthread●→C1.pS[t2(…)]
[0573] ●→protocol●→C2.qD[t3(…)]} (5.37)[0574] 的细化具有如下的格式,C1.p:mR?(C1.pD[t1(…)])●→ep0●→ep1●→…S D●→epn●→C1.p[t2(…)]●→ec0●→ec1●→…●→eck●→C2.q[t3(…)]},并且在ALLEOP中可被写作,
[0575] C1.p:mR?(C1.pD[t1(…)])●→ep0●→ep1●→…●→epn●→
[0576] C1.pS[t2(…)]→(C2.qD[t3(…)‖…)]}, (5.38)[0577] 这是因为在ALLEOP中没有示出协议的细化。
[0578] 同步化:如下发生同步的并行分支。在(5.39)中同时发生通信事件Z1和Z2的实例:
[0579]
[0580] 同步分支的一般化:
[0581] X→(Z1‖Z2‖…‖Zn)[t(…)] (5.40)[0582] 调整:在如下中发生并行调整,
[0583]
[0584] 这里,在不同的不可比较时间发生事件X和Y。相对于本地时间到全局时间的映射来定义max(t1,t2)。仅在X和Y分别完成它们的任务之后发生Z。
[0585] 调整的一般化:这里,如果所有的事件X1,X2,…,Xn都已经发生,则发生事件Z[t(…)]。
[0586] (X1[t1(…)]‖X2[t2(…)]‖…‖Xn[tn(…)])→Z[t(…)] (5.42)[0587] 调整&同步化的一般化:在事件X1,X2,…,Xn都已经发生之后,同时发生所有的事件Z1,Z2,…,Zn。
[0588] (X1[t1(…)]|||X2[t2(…)]‖…‖Xn[tn(…)]) → (Z1‖Z2‖…‖Zn)[t(…)] (5.43)
[0589] 事件替代:(X|Y),X或者Y发生。
[0590] 一般化的替代:(X1|X2|…|Xn) (5.44)[0591] 其中,每个Xi都是因果链。在事件替代表达中的选项应该总是彼此排斥的成对。
[0592] 保护间隔和轮询:在图1和图2中定义了保护间隔而在(2.7)至(2.10)中表现了轮询的例子。如图1和图2所示,信号感应改变了端口的状态。这对于条件评估不改变世TM界的状态的通用规则是个例外。对于TICC -Ppde操作的如下限制也适用于轮询:
[0593]
[0594] 并且对于其他保护间隔也是类似的。因此,没有蜂窝同时开始或结束轮询它端口中的两个端口。在蜂窝中不存在并行性或时间分割并发性。所有的中断都是不违反事务完成的需求的编程的中断。一旦在蜂窝的轮询周期中开始端口的轮询,则在每个端口应该发生如下七个可能的结果中的一个结果:(i)因为不存在消息所以跳过端口;或(ii)蜂窝等待消息并随后在项目(v)和(vi)或(vii)中将它处理;或(iii)在端口矢量的情况下,如果端口矢量中的所有端口处存在消息,则蜂窝执行(v)和(vi)或(vii),否则跳过端口矢量;(iv)在端口替代的情况下,如果在任意的替代端口处存在消息,则蜂窝执行(v)和(vi)或(vii),否则跳过端口替代;(v)如果在端口(或端口矢量)处存在消息,则蜂窝通过将它键入蜂窝的排序端口列表中来调度服务的端口(或端口矢量);或(vi)在感应到消息之后蜂窝立即向端口提供服务;或(vii)在确保的轮询周期中发生服务的编程暂停并继续服务。
[0595] 世界状态的一致性:每个世界状态W(t)都代表时间t的运算的状态。在任何的时间点t,世界状态W(t)都是一致的。证明系统在ECT评估过程中的假定时间点维持及更新世界状态。如果检测到ECT评估(如部分6所描述)过程中在CTL断言和ECT之间存在矛盾,则该断言不是有效的。这样的矛盾表示设计或实施错误。由SMS生成因果网过程中遇到的与ALLEOP的矛盾表示系统操作中的错误。
[0596] 在●→上的条件迁移:我们将格式‘→C?(){X}’称为ALLEOP格式,其中X是通信或动作事件,并将如下格式称为迹线格式。
[0597] ‘{(t0)}[→X(t0)]
[0598] {(t1)}’,t1≤t0+τmax
[0599] 后者描述了C?(){X}的语义。在半闭合间隔[t0,t1)中的时间点之间发生执行,而τmax是最大可能延迟。下面假设条件评估不会改变世界,而在与前提条件变为真的时间t0相同的世界中评估动作,而保护间隔不受这个规则的限制。在下面的(5.46)中的上下文x和y是蜂窝C或端口C.p。所有的条件检查和动作评估都发生在单个蜂窝C的上下文中。成立。这个上下文将在其中包括在方法评估过程中由评
估器维持的变量的代码执行堆栈。
[0600]
[0601] 如上所述,如果x:pre-C1?()为假,则不定义动作评估,并且如果C?()为假,则跳过动作评估。当执行由●→链接的两个连续的动作x:A1()和y:A2()时,在终止x:A1()的执行的相同时间开始y:A2()的执行,此外,x:A1()的后置条件逻辑上暗示y:A2()的前提条件。在终止A1的时间和开始A2的时间之间通常存在小的延迟。但是在这个延迟期间,蜂窝C的世界不会改变,这是因为在两个这样的动作之间在蜂窝C中不会发生其他的动作,并且在其他蜂窝中发生的动作不会影响到蜂窝C的状态,这是因为蜂窝隔离(部分3.2)。因此,可忽略这个延迟。
[0602] 在轮询周期中,我们使用如下格式的规范,即(C.f[i]:mR?()→C.f[j]:mR?())其中i≠j。这可以如下方式被解释为(C.f[i]:mR?()●→…●→C.f[j]:mR?()):
[0603]
[0604] 换句话说,在半闭合间隔[t1,t2)和[t3,t4)中发生C.f[i]和C.f[j]的服务,以使得([t1,t2)∩[t3,t4))=φ,具有C.f[j]:mR?()(t2)的限制,即在结束[<●→C.f[i]:tip()>]的时间点t2开始C.f[j]:mR?()的评估。这里,仅当C.f[i]:mR?()(t0)评估为真时发生C.f[i]的服务,否则跳过该端口并且轮询直接地前进至C.f[j]。因此,轮询周期仅指定了轮询的顺序,而没有指定轮询的端口接受服务的顺序。由于在部分2的例子中描述的通信,在不同的蜂窝中彼此跟进地发生TIP的并行触发;这里,唯一的需求在于作为消息被发送时的特征的条件保持不变,直到消息被传递并且被传递的消息被感应及使用。
[0605] 让我们进而考虑描述了简单的ALLEOP证明的例子。在所有的证明中,我们假设所有的并行线程和条件的实施都已经被单独地验证。由于并行线程相互独立,因此这是可能的,依赖的并行线程被联合地验证,并且条件对于蜂窝而言总是本地的。我们从在[Magee & Kramer,13]中介绍的“装饰花园问题”的通用版本开始。对于“相互排斥”和“条件同步化”([Magee & Kramer,13]中使用的术语),对于这个例子展示了正式的ALLEOP证明。该解决方案还适用于[Magee & Kramer,13]中的“停车”问题。
[0606] 6.关于ALLEOP证明的例子
[0607] 6.1装饰花园:相互排斥和条件同步化
[0608] 这里,我们的目标在于显示ECT网络的结构并示出系统如何使用它们来生成证明。见,Maggie & Kramer,[13]中的关于装饰花园的FSP规范。该问题如下:装饰花园公园具有数个门,每个门都具有十字转门。如在Maggie和Kramer中,我们假设在公园的两端具有两个入口门,但是与Maggie和Kramer不同的是,我们还假设两个出口门。当公园开放时门是打开的,而在进入公园的所有人员已经离开之后在公园关闭时门也是关闭的。在公园开放的任何时候,都允许人员通过任意的入口门进入,并通过任意的出口门退出。必须保持关于在任何时间处在花园内的人数的准确计数,并绝不允许该数目超出预设的max。
[0609] 在图10中示出了TICCTM网络。它具有两个入口十字转门,Et[0]和Et[1]和两个出口十字转门,Xt[0]和Xt[1]。存在基于外部中断打开及关闭公园的门的一个环境E。存在一个计数器。当人到达入口或出口十字转门时,我们假设传感器Se[j]和Sx[j]检测在每个十字转门处的人Et[j]和Xt[j],其中j=0,1。每个十字转门和它的传感器一起构成封装的蜂窝。当检测到人时,传感器通过它们各自的总端口Se[j].g或Sx[j].g向端口Et[j].ft或Xt[j].ft发送信号,其中j=0,1。路径 和 对于封装都是内部的。传感器通过这些隐藏的路径向功能端口ft(t代表十字转门)发送信号。
出于方便,我们在图10中示出了十字转门外部的传感器。
[0610]
[0611] 图10:OG解决方案的网络:相互排斥&条件同步
[0612] 当端口Et[j].ft或Xt[j].ft分别检测到由传感器发出的信号时,判定Et[j]:personEntering?()和Xt[j]:personLeaving?()变为真。关于这些判定的定义请见附录I。当传感器检测到人时,对于封装内部地执行如下的TIP:
[0613] Se.g:TIP()=Se[j]:personAtGate?(){Se.g:pR?()*{Se.g:s();}}
[0614] Sx.g:TIP() = Sx[j]:personAtGate ? (){Sx.g:pR ? ()*{Sx.g:s();}} (6.1)
[0615] 计数器具有五个功能端口C.f[j],0≤j<5。如下方式使用它们:对于j=0,1:当在端口Et[j].ft处检测到信号时,十字转门通过路径 向计数器发送信号
(见图10)。当计数器C在C.f[j]感应到信号时,其中0≤j<1,它如下动作:(i)如果counter.count<max并且经由 返回的信号通知Et[j]门处的人可进入,
则C使得计数器增加1;当Et[j].g接收到信号时,十字转门解锁并且在Et[j].ft处的人被允许进入花园;(ii)如果counter.count=max,则C经由 发出通知Et[j]
花园满员的信号;当在Et[j].f处接收到信号时,十字转门显示“公园满员”并且不解锁十字转门。为了作出这两个替代动作中的一个动作,Et[j]执行同步非确定的轮询,由此在这些端口中的一个端口等待来自计数器的响应。
[0616] 对于j=2,3:出口十字转门Xt[i].g经由路径 向在它的端口C.f[i+2]处的计数器发送信号。当在C.f[i+2]处感应到信号时,计数器将计数减1并且经由路径 返回信号,以便解锁十字转门并允许人员离开;通过执行
同步轮询Xt[j].g:mR?()*,Xt[i]在Xt[i].g处等待这个响应。对于j=4,计数器使用端口C.f[4]来接收并响应来自显示单元的请求,以便向该单元发送counter.count的当前值。显示单元基于外部中断发送关于计数的请求(见图10)。
[0617] 多个人可利用多个十字转门并行地同时进入及离开。然而,每个十字转门每次仅允许一个人进入或离开。程序是自我调度、自我调整和自我同步的。TICCTM网络和TIP确定用于确定执行控制结构的信号交换。清楚的是,附录I中的OG解决方案也适用于在[Magee & Kramer,13]中定义的停车例子,具有多个停车入口和出口,不同之处在于在车辆离开之前必须支付停车费。
[0618] 假设一公里长的1Mb/s的信号线和2GHz的CPU,则信号交换和计数所花费的时间应该小于几微秒。因此,这实际上可具有数目不限的入口和出口十字转门。在附录I中展示了基于这个网络的TICCTM-Ppde实施的CIP、ALLEOP和迹线。我们将这称为OG解决方案。
[0619] 为 了完 成 附 录I 中示 出 的 实 施,需 要 定 义如 下 的:personAtGate,personEntering ? (),personLeaving ? (),denyEntry(),letPersonIn(),letPersonLeave(),personInPark()和displayCount()。利用这些,附录I中的ALLEOP和迹线建模出完整的实施。该实施不需要监视器、旗语[Hoare,10,12][Dijkstra,23,24],锁定、调度器或同步控制原语。
[0620] 应该清楚的是,在这个组织中由十字转门调用的两个计数器活动不会彼此干扰,这是因为计数器仅在服务完第一功能端口之后才服务第二功能端口。还清楚的是,公园中的人数不会超过max。我们期望正式证明从实施规范开始的这些,以便示出实施满足需求。我们尤其期望证明如下的:
[0621] Stmt 1)对于进入花园的每个人,向计数器追加刚好一次;
[0622] Stmt 2)对于离开花园的每个人,从计数器减少刚好一次;
[0623] Stmt 3)花园内的总人数不超出max。
[0624] 上面用户对于Stmt 1和Stmt 2定义了如下的解释作为CTL-语句:由条件或动作指定CTL-语句中的事件。可在假定的时间点、在语句中发生的对象和事件之上量化CTL-语句。
[0625]
[0626] 出于方便,这里从附录I中再生出如下的定义:
[0627]
[0628] 在上面的CTL语句中,ctl.t2是计数器的调用终止于(6.2)的时间,而ctl.t5是计数器调用在(6.3)开始的时间。因此,限制(ctl.t2<ctl.t5)断言了(6.3)中的计数器调用必须仅在(6.2)中的计数器调用的终止之后。类似的,(ctl.t6<ctl.t2)断言了其他的可能性,即(6.2)中的调用发生在(6.3)中的调用终止之后。在这两种情况下,其中计数器在两个语句中是有效的的半闭合间隔,即[ctl.t1,ctl.t2)和[ctl.t5,ctl.t6),应该是不重叠的。量化 和 断言了在每个语句中仅存在计数器事件的一个唯一发生。我们已经假设counter++的每个调用都使计数增加1而counter--的每个调用都使计数减少1。因此,(6.2)和(6.3)断言,仅在计数器已经增加
1之后门口处的人才被允许进入公园,刚好一次,而仅在计数器已经减少1之后门口处的人才被允许离开公园,刚好一次。(6.2)和(6.3)中的事件的开始和结束是:
[0629] 开始事件 结束事件
[0630] 在(6.2)中:(ctl.t0) personInPark?()(ctl.t3)[0631] 在(6.3)中:(ctl.t4)
[0632] 注意,开始的事件终止的时间点(ctl.t0,ctl.t4)和结束的事件开始的时间点(ctl.t3,ctl.t7)的时间点对是不可比较的。因此,人可同时进入和退出。对于这个例子,在(7.2)和(7.3)中用◇替换第二椭圆→…→不会改变语句的含义,这是因为在每种情况下仅存在从开始的事件到达结束的事件的一种方式。要证明的问题是,
[0633]
[0634] 其中,traces是实施中所有迹线的集合,而 是逻辑结果关系。在这点上,上面的CTL断言没有声明在花园中存在多少个入口和出口。这是通过分析实施而发现的事情。该语句应该独立于公园中入口和出口的数目。
[0635] 6.1.1 OG解决方案的ECT网络
[0636]
[0637] 表I:入口门的ECT网络
[0638] 在表I和II中示出了ECT网络。在ECT网络中以表格式重新组织并表现关于轮询周期和端口迹线的信息;网络代表与ALLEOP一致的迹线的串行/并行组合。ECT和迹线两者具有相同的信息。我们不期望读者理解表I和II中的所有细节。下面我们给出这些表的结构的概述。
[0639] 表I中的网络示出了Et[j]和C.f[j]之间的交互而表II中的网络示出了Xt[j]和C.f[j+2]之间的交互,其中j=0,1。在网络中的每个ECT方框中,从上到下以时间递增顺序在第一列中显示事件。事件是条件或动作。在第二列中从上到下以递增顺序显示它们关联的虚拟时间点。在ECT方框之间具有箭头的直接支路示出了由选择点导致的替代的序列控制传送或由信号传递导致的并行控制传送(分支)。在选择点具有替代的序列控制传送的支路是以‘|’标记注释的,而示出并行控制传送的支路是以“‖”标记注释的。在这个例子中没有出现分支。用“‖”注释的支路上的椭圆,“→…→”表示在信号传递的相同时间不会发生在支路的箭头端处的方框的激活;这可以在某一随后的时刻发生。
[0640] 表I顶部的方框,Et[j].ft:ECT(e[j].t0),分支成两个替代方框。这三个方框一起描述了当Et[j]感应到人进入时将会发生什么。仅当如上(I.4)所示在Et[j].ft处接收到信号时,判定Et[j]:personEntering?()将为真。当在Et[j].ft处感应到信号时,Et[j]经由Et[j].g向C.f[j]发出信号以检查人员是否可以进入,并且如果他/她能够进入则对该人计数。如果公园中的人数已经达到允许的max,则人员不可进入。由从方框1中的事D件[●→C.f[j]]到方框4中的事件的,由指定并行激活的支路在表I中表示这种信号。
[0641]
[0642] 表II:出口门的ECT网络
[0643] 在发出这个信号之后,在附录I的TIP(I.3)中示出的同步非确定保护间隔(Et[j].g:mR?()|Et[j].f:mR?())*,Et[j]等待响应。在该表的方框1的底部示出当接收到响应信号时发生的两个可能的选项。它基于在Et[j].g或Et[j].f处是否接收到响应信号而分支出两个替代因果链。这里两个支路因果链都终止于端口Et[j].ft处的下一个周期的操作的序列激活。在Et[j].ft向传感器端口Se[j].g发出响应信号之后开始下一个周期。因此,仅在当前人员已经被完全服务之后才识别下一个人。在下一个人来到门时重复处理。在表I中的虚拟时间点代表事件开始的时间实例的序列。如表I所示,在方框5向方框2发出信号之后或是在方框6向方框3发出信号之后,终止在方框1开始的每个完整周期的处理。表I的方框4、5和6描述了计数器中发生什么。如下所述,系统从网络提取证明所需的信息。
[0644] 表I中的方框4具有指向它的两个激活箭头:一个是从左侧进入的来自的序列激活,而另一个是来自右侧的Et[j].g的并行激活。序列激活表示仅在另一个端口C.f[i]完成服务之后才服务另一个端口C.f[j]。当然可以使得i=j,即下一个被服务的人进入相同的门。这个序列激活到达的时间是C轮询f[j]执行C.f[j]:mR?()的时间,以便测试是否向它已经传递了信号。即使序列和并行激活同时发生,C仍可感应出已传递的信号。
[0645] 如果在来自Et[j].g的并行激活到达之前来自C.f[j]的序列激活首先到达,则在C.f[j]处的感应信号将会失败并且C将会跳过端口C.f[j]并开始轮询它的下一个端口(假设在表I中没有示出跳过端口的情况)。当C在一个轮询周期中跳过端口时,则在接下来发生的轮询周期内它将会接住信号(如果存在信号的话)。如果来自Et[j].g的并行激活首先到达,当它轮询C.f[j]时,则C将会感应该信号。在任何一种情况下,C不会立即响应激活信号。这是由表I中的并行激活支路上的椭圆所表示的。
[0646] 关于传递信号感应的序列和并行控制传送的同时发生的需求对于所有的在它们轮询周期内被它们的父蜂窝轮询的端口都适用。当作为另一TIP执行的一部分的嵌入的TIP处发生信号感应时,序列控制传送是暗含的;在嵌入的TIP处的感应将仅使用同步保护间隔。
[0647] 在C.f[j]处感应到信号之后,C到达表I中的方框4的端部的选择点。这里,通过(counter.count<max)的真值来确定该选择。在该选择之后紧跟的事件的因果链基于(counter.count<max)是真还是假来引起Et[j].g或Et[j].f的并行激活。Et[j].f立即响应这些并行激活中的一个,这是因为如附录I的TIP(I.3)中所示,它在端口Et[j].g和Et[j].f等待这些信号在非确定保护间隔(Et[j].g:mR?()|Et[j].f:mR?())*的接收。
[0648] 在C.f[j]处完成了它的任务之后,C引起在表I的底部示出的 的序列激活。这在附录I中定义的轮询周期之后。类似的,表II示出了与出口十字转门Xt[j]和C.f[j+2]之间的交互相关联的ECT方框。当我们讨论部分6.1.2中的证明构造时,读者可参考这些表中事件的流向,其中我们仅选取证明所需的信息。此时,建议读取重新阅读附录I。
[0649] 总结:表I和II中的ECT方框之间的序列激活代表了网络中的事件的执行顺序。这些是由轮询周期和执行蜂窝中的TIP的顺序所确定的。在每个方框中从上向下的ECT中事件流向代表了事件的因果顺序。因果顺序是由在TIP执行过程中事件的流向确定的。网络示出了与端口ALLEOP和附录I中的轮询周期定义相一致的端口ECT的串行/并行合成。
[0650] 6.1.2 ALLEOP证明的结构
[0651] 证明系统搜索ECT网络以便(i)以识别在CTL断言中假定的时间点和ECT中的虚拟时间点之间的匹配对应关系;(ii)以从CTL断言中开始事件至结束事件中找到ECT网络的因果链;以及(iii)分析因果链以验证满足主张。在这个例子中,搜索是简单的。它们没有示出由于选择点和多个并行激活(分支)所导致的复杂性。在部分6.4的DP解决方案中出现了在上述这样的搜索中出现的一些复杂性。
[0652] 对于CTL语句中出现的事件,证明系统显示出如下的在CTL语句中指定的时间点和在表I和II中ECT中的虚拟时间点之间的匹配时间点:
[0653] 语句(6.2)的匹配时间点,其中j=0,1
[0654] ctl.t0=et[j].t0:Et[j]:personEntering?();(开始事件)
[0655] ctl.t1=cf[j].t2:[●→counter++]begins;
[0656] ctl.t2=cf[j].t3:[●→counter++]ends;
[0657] ctl.t3=et[j].t1:Et[j]:personInPark?();(结束事件)(6.5)
[0658] 语句(6.3)的匹配时间点,其中j=0,1
[0659] ctl.t4=xt[j].t0:Xt[j]:personLeaving?();(开始事件)
[0660] ctl.t5=cf[j+2].t2:[●→counter--]begins;
[0661] ctl.t6=cf[j+2].t3:[●→counter--]ends;
[0662] (结束事件)(6.6)
[0663] 存在两个可能的开始/结束事件,一个是j=0而另一个是j=1,如分别在(6.5)和(6.6)中与(6.2)和(6.3)中的事件匹配地所示。系统还显示出在对应于(6.5)和(6.6)的ECT中的开始和结束事件之间的如下因果链,其中j=0,1。因果链以迹线格式表达。
[0664]
[0665] 这里,我们忽略入口被否定的情况,这是因为CTL语句不会调用它。
[0666]
[0667]
[0668] 当系统构成迹线时,它在迹线中发生的ECT网络中标记事件,并跟踪事件的迹线和它们的定时。我们将这个处理称为CTL语句在ECT网络上的符号评估。读者可根据表I和II来验证迹线(6.7)和(6.8)。在迹线构成过程中,条件都包含在链括号中,该链括号将与在相同的虚拟时间点发生的所有条件收集在联合中,对信号感应操作给出变量,这些变量指定它们感应的传递信号,在感应事件之前在ECT方框中发生传递信号。在方括号中包含动作事件。系统跟踪迹线虚拟时间点是否指定了事件的开始或结束时间。从网络中的第二列ECT方框中选取定时。
[0669] 此时,用户注意到存在需求的不完整规范。在(6.7)中计数器在半闭合区间[cf[j].t2,cf[j].t3)内是有效的,其中j=0,1。在(6.8)中它在区间[cf[j+2].t2,cf[j+2].t3)内是有效的。它没有指定在计数器是有效的时间周期的非交叉也应该适用于间隔[cf[j].t2,cf[j].t3)和[cf[j+2].t2,cf[j+2].t3),其中j=0,1。这里通过指定它应该适用于所有的j,用户指明在入口和出口十字转门处的状态。
[0670] 现在,当被用户当前更新时,系统必须分析在(6.7)和(6.8)中的迹线以验证CTL断言(6.2)和(6.3)是否满足。存在有应该被ECT网络满足的三个通用需求,以便确保进程:
[0671] 由所有ECT网络满足的通用需求:
[0672] 通用需求1.在CTL语句中假定的时间点应该匹配迹线中的时间点。
[0673] 通用需求2.在它的轮询周期中被蜂窝轮询的每个端口应该具有两个活动:一个是序列激活而另一个是并行激活;并行激活传递感应到的信号。
[0674] 通用需求3.具有同步轮询每个端口(不论在轮询周期中轮询还是在嵌入的TIP中轮询)应该具有最终通过并行激活发送到它的信号。
[0675] 在表I和II中网络满足所有上述三个需求。在这个例子中,存在两个额外的需求:(a)在每个因果链中仅发生一次计数事件;和(b)两个计数调用不应该重叠(即使在每个因果链中仅出现一次计数器时,两个计数器调用可以重叠,这是因为因果链的并行执行的缘故)。在(6.7)和(6.8)中的事件的直接因果链指示对于端口C.f[j],0≤j<4,在每个因果链中仅发生一次counter++或counter--(在每个因果链(6.7)和(6.8)中因果关系→发生两次。这代表协议执行并且计数器不在协议执行中出现。通常在迹线中不示出协议执行的细化。)。这满足需求(a)。系统注意到也满足需求(b)。这从表I和II中的的序列激活得到。对于i=4,蜂窝C响应来自counter.count的显示单元的请求,并且这不调用由计数器执行的计数。因此,对于C.f[j],0≤j<4,仅在第一调用已经被完全服务之后才发生关于计数器的计数的第二调用。因此,在C中计数器计数的过程中的间隔不会重叠。当被用户更新时,这完成了Stmt 1和Stmt 2的证明。
[0676] 我们通过证明公园中的总人数总是小于或等于max来验证Stmt 3。这对应于在Maggie & Kramer,[13]中的条件同步化。这是NFSP证明并需要如下的推导:
[0677]
[0678] 用户通过提供如下的CTL断言引导系统来证明推导步骤:
[0679]
[0680]
[0681] 利用在附录I中给出的personEntering?()和personLeaving?()的定义并且在表I和II的ECT上对于所有可能顺序的十字转门的成对来评估(6.10)和(6.11),系统使这些有效,这是因为在每个成对中的开始和结束时间点,(e[j].t0<e[j].t1)and(x[i].t0<x[i].t1)都是不可比较的,其中0≤j≤1。例如,在门Et[0].ft处的人被允许进入之后,在该人进入花园之前,可允许门Et[1].ft处的另一个人也进入,并且这个第二个人实际上可以在第一个人之前进入花园,这是因为人员进入和离开花园的时间是不可比较的。同时其他人员可离开花园。在人员进入或离开花园的任何顺序中,在门Et[j].ft and Xt[j].ft处的人进入或离开花园之后,counter.count≤max保持为真。这可通过因果链(6.7)和(6.8)确认。可安装期望多数目的入口和出口门;推导仍适用。通过推导的证明需要用户引导。
[0682] 应该清楚的是,系统以迹线和轮询周期来组织信息,成为以方便找到与给定的CTL语句的时间点匹配的时间点的格式的ECT方框的网络,并构建匹配CTL语句中的开始和结束事件的迹线。可将ECT网络中识别的因果链方便地变换为迹线格式。
[0683] 6.1.3评述
[0684] 这里证明的主张是实施的属性,这是因为ALLEOP和迹线自动地从实施中生成。注意当控制从一个蜂窝传送到另一个蜂窝时,并行地作出在ECT上的CTL语句的符号评估,这是因为我们将CPU分配给每个蜂窝。在这个例子中,ECT是简单的并且不需要并行评估。这里仅发生序列合成,这是因为对于每个入口和出口,十字转门等待直到计数器已经完成了它的任务并且由计数器顺序地完成了通过任何一个门的每个入口和出口的服务。对于在如上给出的(I.4)和(I.11)中定义的合并仅需要逻辑推断。由于大多数并行线程都是成对独立的并且被独立地证明是正确的而从属的并行线程联合地证明是分别正确的,证明的CTL语句将仅涉及追寻实施的ECT网络中的因果序列,并且因果链的分析可验证是否满足给定的CTL断言中的条件。
[0685] 满足CTL语句的因果链使这些语句有效。如果CTL语句无效,则这个证明方法可提供计数器例子。如果结束事件不可到达并且ALLEOP是有限的ALLEOP,则计数器例子将会终止证明。对于非有限ALLEOP,可不终止证明;用户干预是必须的。在找到所需的因果链之后,系统分析序列和并行激活以确定事件的相互排斥属性和部分顺序。证明方法是交互的。在证明的每个阶段系统都向用户展现它的发现并向用户给出基于发现修改给定的CTL语句或提供可引导证明搜索的新的断言的机会。在这个例子中,匹配时间点和因果链的识别是简单的。在部分6.4的DP解决方案中发生涉及蜂窝的状态的迹线的更加复杂的证明。在所有的情况下,如在部分6.5中讨论的,用户具有选择其有效性验证实施的准确性的那组CTL语句的责任。对于复杂的实施,这将会是重要的问题。
[0686] 这个例子仅使用点到点信号交换而不使用虚拟存储器。其他例子在它们的路径上使用了虚拟存储器。因此我们首先介绍虚拟存储器的结构和与它相关联的操作。
[0687] 6.2虚拟存储器的结构
[0688] 图11示出了虚拟存储器的示意图。它具有四个部件:SP用于便签式存储器,E用于执行存储器,W用于写入存储器,而R用于读取存储器。执行存储器保持并行线程并为它们提供执行环境。我们假设在执行存储器中的数据的每个项目都标记具有表明在主存储器或数据库中的身份的旗标,如果存在的话。如果蜂窝的分组使用相同的虚拟存储器M,则分组中的每个蜂窝应该具有归属端口分组的端口,并且端口分组中的所有端口应该被调谐与M附接的相同的代理。这样蜂窝分组中的蜂窝可在由M的执行存储器提供的环境下在并行线程执行过程中使用M的便签式存储器SP来交换数据。来自数据库或主存储器的数据可仅在它们被复制到虚拟存储器当中之后才被蜂窝分组所共享。
[0689] 写入存储器保持所发出的消息而读取存储器保持所传递的消息。读取和写入存储器可在由传递消息的代理传递消息之前被切换。因此,每个接受方从读取存储器读取它的输入消息。端口p可利用转发命令p:f()而非发送命令p:s(),向通过路径连接的端口q转发在它的读取存储器中的消息。如果使用了转发命令,则读取和写入存储器不被切换。在部分6.4中存在的DP解决方案(哲学家就餐)中使用转发命令。在部分7中描述区分发送/转发命令的协议。
[0690]
[0691] 图11:虚拟存储器
[0692] 如上所述,每个端口p都通过经由支路连接到与M附接的代理来调谐到虚拟存储器M。“p的虚拟存储器”是指已经调谐到p的虚拟存储器。我们参考p的虚拟存储器的读取、写入、便签式存储器和执行存储器来分别写入p.rd,p.wr,p.sp和p.ex。我们写入p.wr:wR(msg)来表示p将空白实例、msg、(msg的容器)写入M的写入存储器,可具有一些默认数据值。我们使用p.rd:wR(msg)来将Msg的容器写入虚拟存储器的读取存储器;这与M的其他部件相类似。我们参考M的写入存储器的实例中的消息来分别写入p.rd:msg()=p:msg(),和p.wr:msg()。如果在虚拟存储器中不存在容器,则我们使用p:make(msg,[])将具有指定数据的Msg的实例写入p的写入存储器。如果在虚拟存储器中存在容器,则使得制作(make)命令利用指定数据充满它。p.rd:make(msg,[])对于读取存储器进行相同的操作。假设在虚拟存储器的读取/写入/便签式存储器/执行存储器部件中定义了这些制作和写入方法。
[0693] 在大多数应用中,在初始化时将所需消息子类的容器安装到虚拟存储器中。因此,通常仅使用制作命令。在虚拟存储器的执行存储器中保持消息子类的编译代码和在它们中定义的方法。因此,当这些端口处在状态S下,那些调谐到虚拟存储器的端口可利用在虚拟存储器中消息子类中安装的所有方法和数据。多于一个的虚拟存储器可包含相同消息子类的代码。
[0694] 我们使用p:msg():empty?()来检查端口p的读取存储器中的消息是否为空,即不包含任何数据,而使用p.wr:msg():empty?()来对于端口p的写入存储器中的消息进行相同的检查。类似的,使用p:msg().attribute:empty?()和p.wr:msg().attribute:empty?()来检查消息的指定属性在p的虚拟存储器的读取和写入存储器中为空。我们使用p.rd:empty?()和p.wr:empty?()来检查所指示的存储器是否为空;即不存在容器。我们使用p:clear()来清除调谐到p的虚拟存储器的读取和写入存储器的内容。类似的,使用p.rd:clear()和p.wr:clear()来仅清除读取和写入存储器。类似的,对于便签式存储器和执行存储器定义断言。
[0695] 图19描述了用于连接总端口分组G中的端口到功能端口分组F中的端口的分组到分组的路径的结构。在这个附图的端口分组中的端口的所有父蜂窝使用相同的虚拟存储器M,如该图所示。仅当蜂窝访问存储器时,使用虚拟存储器M的这样的蜂窝分组中的每个蜂窝可读取存储器中的数据。访问受到端口分组中的端口控制。在任何给定的时间,分组G中的端口的父蜂窝或是分组F中的端口的父蜂窝访问M;它们都不能同时访问M。归属于调谐到虚拟存储器M的任何端口分组的端口的父蜂窝可同时执行在M的执行存储器中的并行线程,访问及利用共同共享的数据和并行线程。
[0696] 利用相同的虚拟存储器M由端口分组中的端口的父蜂窝调整这样的同时并行执行由如下提供方便:(i)对于在虚拟存储器中的共享数据的同时读取访问的便利;(ii)在需要时使用并行线程锁调整数据更新的便利;以及(iii)在并行执行过程中通过共享便签式存储器存储器通信以便调整运算的便利。当并行线程锁被使用时,它们将仅应用于在执行同时并行执行的蜂窝分组中的蜂窝。通过限制蜂窝分组中的蜂窝数目来限制存储器争用的可能性。我们估计在蜂窝分组中实际所使用的蜂窝的数目不太可能超出10或20。为了防止数据复写并保护数据,可约束蜂窝分组中的蜂窝写入到虚拟存储器中的区域。调谐到相同的虚拟存储器的端口分组中的端口可保持这些端口的父蜂窝可写入数据的非重叠存储器区域的地址。上述方便可被用来有效地减少存储器争用。
[0697] 在这点上,我们引入了在通信事件上条件迁移的规则:在利用p:s()的信息发送的情况下,在读取/写入存储器之间切换如下消息特征化的条件。在利用p:f()转发消息的情况下,不切换条件:
[0698] □[{(p.rd:?()&p.wr:?())(t1)}[pS(t1)}→(t2)]
[0699] {(q.rd:?()&q.wr:?())(t2)}] (6.12)
[0700] □[{(p.rd:?()&p.wr:?())(t1)}[pF(t1)}→(t2)]
[0701] {(q.rd:?()&q.wr:?())(t2)}] (6.13)
[0702] 在(6.13)中的PF(t1)中的上标F表示消息被转发。
[0703] 接下来给出两个子部分,PC解决方案(生产/消费者)和DP解决方案以及和它们相关联的ALLEOP证明。不必须使用旗语[Dijkstra,23,24]、监视[Hoare,12]或序列缓冲器(我们已经讨论过几次;但是我们仍认为值得重复,这是因为旗语和监视都是在编程技术中牢固确定的机制并且被认为是不可缺少的。至今它们已经被使用了多于四十年)即可实施解决方案。
[0704] 6.3生产者/消费者解决方案:PC解决方案
[0705] 我们这里的目标在于说明并行缓冲器的使用。在图12中示出了PC解决方案的网络而在附录II中展示了该解决方案。它具有n个生产者,P[i],0≤i<n和与分发者D相连接的m个消费者C[i],0≤j<m。环境蜂窝E用来基于外部中断信号开始/停止应用。调谐到生产者的虚拟存储器提供了它们发送到D的产品的并行缓冲。调谐到消费者端口C[j].g的虚拟存储器被用来发送产品到消费者。对于实施的CIP、TIP、轮询周期和ALLEOP请见附录II。我们期望证明如下的:
[0706] (Stmt 1)向分发者传递每个被制造的产品。
[0707] (Stmt 2)请求产品的每个消费者获得该产品。
[0708] (Stmt 1)和(Stmt 2)的CTL语句:
[0709]
[0710]
[0711] 在(6.14)中,生产者P[j]生产产品并且分发者最终在它的端口D.gj接收它。在S(6.15)中,消费者C[j]通过执行C[j].g 发出对产品的请求并最终获得该产品。
[0712]
[0713] 图12:PC解决方案的网络
[0714] 利用部分5中的规则(5.32)和表III中的ECT网络,通过 对于j和 对于产品的通用安装和假定的时间点,由系统执行的第一任务是通过消除模型运算符□和◇来转换(6.14)和(6.15)。在(6.16)和(6.17)中示出了所得到的CTL语句。在这个例子中简化了这个任务,这是因为对于每个j仅存在一个唯一的因果链。
[0715] 变换后的CTL语句:
[0716]
[0717]
[0718] 在表III中示出了PC解决方案的ECT网络。在这个网络中嵌入了太多的信息以方便读者理解。当我们继续讨论证明时,我们选取我们所需的信息。在表III中的ECT网络满足在部分6.1中提及的通用需求GR-1和GR-2。然而,GR-3的满足不立即得到。我们必须证明在方框3的第三行中的 执行的搜索被传递的产品每次都成功。
[0719] 在表III中的ECT上语句(6.16)和(6.17)的评估产生如下的匹配时间点(下面给出对于对应于表III中的方框中的时间点的事件的参考;在每个方框中行号都是从上到下):
[0720] 对于(6.16):ctl.t0=p[i]f.t2:P[i];P[j]生产产品:行3,方框5
[0721] ctl.t1=p[i]f.t3;将它放入写入存储器:行4,方框5
[0722] ctl.t2=p[i]f.t5;将它传递到D.g[i]:最后一行,方框5 (6.18)[0723] 对于(6.17):ctl.t3=(c[j]I.t2|c[j]g.t3);c[j]发送产品的请求,行3,方框1和最后一行,方框2
[0724] ctl.t4=dg[k]t.t0;D开始搜索:行3,方框3
[0725] ctl.t5=c[j]g.t2;消费者获得它:行5,方框2 (6.19)[0726]
[0727] 表III:PC解决方案ECT网络
[0728] 系统识别在对应于CTL语句中的事件流向的表III中的ECT网络中的事件的流向并将它们放入迹线格式。在下面示出了这些:迹线(6.20)示出了从P[j]感应到新的产品的顺序的时间到产品被传递到分发者端口D.g[j]的时间的事件的流向。
[0729]
[0730]
[0731] 迹线(6.20)指定了如下的:当在它的端口P[j].f感应到接收消息时,则P[j]生产产品,将它放入P[j].f的写入存储器并将它发出到D.g[j],而D.g[j]在它的读取存储器中随后某时接收它。这使得(6.16)有效。注意,在(6.20)中的最后一行中的两个时间点(dg[k]t.t0,p[j]f.t5)是不可比较的。因此,产品传递和搜索产品不是同步的。
[0732] 下面迹线(6.21)显示出从消费者C[j]放入对产品的请求到C[j]具有产品的时间内事件的因果链。
[0733]
[0734]
[0735] 仅在搜索 每次成功时确保(6.21)中事件的流向。D.g[k]从P[k].f接收它的传递。当产品被移动到D.f[j](见表I的行5,方框3)时,在(6.21)的搜索 开始于时间dg[k]
t.t0而结束于时间dg[k]t.t1。当且仅当在dg[k]t.t1之前存在将产品传递到D.g[k](0≤k<n)并且在dg[k]t.t1之前这个产品没有被用完,这个搜索才每次成功。
[0736] 推导证明遵循如下:由于在它的初始化过程中由分发者D规定顺序,因此搜索对于第一个消费者是成功的。见表III中的方框4和5中的最后一行。假设在第N次尝试中成功。它将会在第(N+1)次尝试中成功,因为在第N次尝试中用完了产品,假设在端口D.g[k]处,对于生产者P[i]规定了新的顺序。见方框2中的行8和在(6.21)的D.g[k]S(dg[k]t.t2)后面的评述。由于搜索继续直到发现产品,因此当P[i]响应这个顺序或搜索发现在一些其他端口D.g[j]处尚未被使用的产品时,这一定是成功的。系统通过使得由用户提供的断言有效而交互地证明这点。我们在这里不展示细节。因此,对于(6.21),每个消费者接收到所请求的产品。
[0737] 这满足了部分6.1中的需求GR-3。然而,为了确保进程,必须假设如下的:
[0738] 公 理 :
[0739] 即,始终存在请求产品的消费者,这是与假设相同的,即每个产品最终被用完。否则,商业停止并且分发者在执行它的轮询周期的空端口周围环绕(spin)。此外,如果存在对于产品不充分的需求,则一些生产者就维持环绕。如果它继续环绕多于指定的时间长度,则可重新定义生产者CIP以暂停生产者。如果选取了需求并且随后将顺序传递给它,它将会自动地恢复操作。
[0740] 评述:我们在证明构成中遇到的其中一个问题是,我们必须在某些情况下采用推导证明,其中在FSP描述的常规表达中的简单“星形操作”可使需求有效。不仅因为我们不具有“状态”而且因为并行操作中的实质异步性而发生这种情况。在大多数情况下,推导证明是十分无关紧要的,期望它能够设计出系统自动地构造证明的策略。
[0741] 6.4哲学家就餐解决方案:DP解决方案
[0742] 在图13中示出了DP解决方案网络。存在开始和停止游戏的在图中没有示出的环境蜂窝。存在分配关于请求的餐叉并保持食物供应的管家,btlr(在图13中标记有B)。仅在哲学家从btlr得到两把餐叉之后他/她才开始吃饭。在餐桌上有五把餐叉,btlr.frk[j]和五位哲学家,P[j],其中0≤j<5,如图所示。每位哲学家P[j]与他/她的左侧邻居P[j⊕54]分享btlr.frk[j],并且和他/她的右侧邻居P[j⊕51]分享btlr.frk[j⊕51]。因此,在相同的时间不会有两位邻近的哲学家吃饭。
[0743]
[0744] 图13:DP解决方案网络
[0745] 哲学家P[j]通过向功能端口btlr.f[j]发送发送空消息来发送关于餐叉的请求。如果两个餐叉,btlr.frk[j]和btlr.frk[j⊕51]都可以利用,则btlr将餐叉包装在btlr.f[j]的写入存储器中的容器中并将它们发出。一旦完成,则餐叉对于P[j⊕51]和P[j⊕54]不可利用,直到P[j]吃完饭并归还餐叉。如果在P[j]请求餐叉时P[j⊕51]正在吃饭,或P[j⊕51]正在正在吃饭,或者P[j⊕51]正在等待将他/她的左侧餐叉btlr.frk[j⊕51]预定时,则餐叉对于P[j]不可利用。在这种情况下,btlr使得P[j]的左侧餐叉,btlr.frk[j],处于预定并且哲学家P[j]等待直到两侧餐叉都变为可以利用。一旦btlr.frk[j]处于预定,则P[j⊕54]在P[j]吃完之前不能(再次)开始吃饭。仅在P[j]在他/她吃完饭返还餐叉时将Btlr.frk[j]从预定释放。
[0746] 每位哲学家P[j]总是在他/她完成吃饭之后返还餐叉并回到他/她的思考状态T[j]。在思考一段时间之后,他/她再次变得饥饿并发出获取餐叉的订单。Btlr按照周期顺序来服务哲学家,P[0]→P[1]→P[2]→P[3]→P[4]→P[0]→…→,直到游戏结束。在游戏的任何点P[j]可处在三种可能状态中的一种状态:E[j](吃饭),T[j](思考)或W[j](等待餐叉)。游戏开始于所有的哲学家都处在状态T[j],餐桌上的所有餐叉对于任何哲学家都可以利用,并且食物已准备好。已经发出获得餐叉的请求并且其请求被首先感应到的哲学家P[j]由btlr首先服务,并且即使所有的哲学家在相同的时间都已经发出获得餐叉的请求,哲学家P[j]仍可首先得到餐叉。在P[j]得到餐叉之后,P[j⊕52]可下一个得到餐叉,如果他/她已经请求获得餐叉。随后两者开始吃饭并分别进入状态E[j]和E[j⊕52]。其他人,即k≠j且k≠j⊕52将等待餐叉,如果他们已经对餐叉下了订单,并由此进入状态W[k],或是如果他们没有对餐叉下订单,则只维持思考。
[0747] 在附录III中给出了CIP、TIP、ALLEOP。由表IV和V中的网络代表迹线。游戏满足确保进程的如下两个公理:
[0748]
[0749] (6.23)表示每个吃饭的哲学家总是最终返还餐叉并进入思考状态。(6.24)表示每个思考的哲学家最终变得饥饿。
[0750] 如下定义状态,E[j],T[j]和W[j]:
[0751]
[0752]
[0753] 注意在上述语句中动作的开始和结束定时。W[j]是P[j]和btlr.f[j]的合成状态。
[0754]
[0755] 表V:btlr.f[j]ECTs.
[0756] 游戏的初始状态是,
[0757]
[0758] 是这里仅有的死锁状态,这是因为对于任何的j,P[j⊕54]仅在P[j]完成了吃饭之后才开始吃饭,其中0≤j<5。因此,没有哲学家能够开始吃饭。下面我们给出两个主张的证明:(i)如果游戏开始于(6.28)中的初始状态,则游戏将永远不会进入死锁状态;和(ii)关于每次每位哲学家变得饥饿时他/她获得吃饭的机会这个方面是公平的。
[0759] 为了简化系统的可能状态的描述,让我们遵循如下的约定:
[0760]
[0761] 可认为如下的状态在btlr的轮询周期的结束或开始时为真。我们将这样的状态称为配置。因此, 和 是配置。用户可以利用了(6.29)中的理论的T[j],W[j]和E[j]状态对如下的CTL语句方程化:
[0762]
[0763] 断言(6.30)特征化死锁配置。在(6.31)中最终一位或两位哲学家正在吃饭或所有的哲学家正在思考。(6.32)断言每位等待的哲学家最终吃饭。如我们将会看到的一样,这里的搜索不会涉及发现匹配时间点,但是涉及追踪哲学家的状态。
[0764] 在表IV和V中示出了用来证明这些断言的ECT网络。它们是从附录III中的ALLEOP当中得到的迹线所获得的。这里,每个ECT网络都具有定义了网络的初始状态的方框。这指定了当网络开始时判定的真值;即,符号评估开始。如果在初始状态没有指定选择点处的判定,或选择点处的判定没有处在在ECT评估中早先评估的判定当中或不能从定义中推导出来,则从那个选择点引出的所有因果链都被包括为ECT评估迹线中的可能替代。在开始对应于任何轮询的TIP的ECT评估之前,利用构成那点的评估的结果,利用在附录III(III.35)中给出的区分判定的定义和在附录中由用户提供的其他定义,系统更新初始状态。ECT评估中的约定是,判定维持它们的真值直到它们被改变。
[0765] 管家ECT具有几个选择点和并行激活,但是不具有分支。由于所有的哲学家和管家都是并行地运行,因此当需要时可并行地执行它们的ECT的符号评估。让我们从断言(6.30)开始,断言(6.30)是最容易证明的一个。替代在表V中示出的那个初始状态,这里的初始状态是下述(6.33),而不是表V所示出的。
[0766]
[0767] 这些初始条件出现在表V中的ECT方框(13)的结束处。这是发生W[j]的唯一ECT方框(如果存在多于一个ECT方框W[j],则系统应该验证从每个这样的W[j]开始的给定断言)。对于表V的ECT表中的(6.33)评估中的断言设定初始状态再次导致W[j],沿着包含标注有(1)→(2)→(4)→(6)→(8)→(13)→(17)的方框的评估路径;而(13)直接地前进至(17)而没有任何的消息交换。当评估继续时,获得关于轮询周期的ECT评估的如下序列:
[0768] btlr.f[j]:ECT(…)→btlr.f[j⊕51]:ECT(…)→btlr.f[j⊕52]:ECT(…)[0769] →btlr.f[j⊕53]:ECT(…)→btlr.f[j⊕54]:ECT(…)
[0770] →…→ (6.34)
[0771] 这里,由于W[j]对于所有的j都为真,因此对于所有的j迹线不可避免地导致表V中的ECT方框(13)。因此,配置从未改变。系统在经历了对应于开始于btlr.f[j]并结束于btlr.f[j⊕54]的一个完整的轮询周期的评估之后识别出这个。注意,在状态W[j]下,btlr在ECT方框(13)中不向P[j]发回任何的响应消息。关于在图1和2中给出的保护间隔的定义,btlr.f[j]:mR?()在每个轮询周期中评估为真,直到响应消息被发送回,这当然在死锁配置下从未发生。这证明了(6.30)。
[0772] 让我们现在考虑(6.31)中的证明。下面,我们使Z来指代在轮询周期的结束时的配置。通过规则(5.32),CTL断言(6.31)被转换为,
[0773]
[0774] 其中,EZ是结束配置,
[0775]
[0776] 首要任务是发现在管家的一个轮询周期之后(始于初始状态并在它的评估之前更新btlr.f[j]:ECT()的初始状态并沿着表V中的每个选择点的所有替代因果链)会是什么配置Z的,其中判定值不可利用。系统很快发现Z=EZ,如下:在表IV中,其中0≤jS<5,哲学家P[j]变得饥饿并通过执行P[j].g(p[j]g.t0)向管家发出请求,并在时间点p[j]g.t1=bf[j].t0将它传递到btlr.f[j],其中0≤j<5。由于哲学家是并行地运行的,因此这些消息传递时间是不可比较的。管家轮询btlr.f[j]以感应消息传递的轮询时间是bf[j].t1,0≤j<5,其中bf[j].t1<bf[j⊕51].t1如同附录III中的轮询周期定义。唯一的需求是在消息感应之前发生消息传递。如果在btlr轮询它的端口btlr.f[j]之前哲学家P[j]已经发送了请求,则btlr将会感应到端口处的消息接收,否则将不能。
[0777] 因此,如下情况是可能的:所有的哲学家同时发送请求,他们当中没有人在管家的轮询周期内发送请求,或是一些人发送而一些人不发送。由于管家和哲学家的操作不是同步的,因此当btlr轮询它的功能端口时它可感应到某时在它的一些端口处的消息接收,或是在轮询周期内没有感应任何的消息,或是在轮询周期内感应到所有端口处的消息。因此,可以理解的是在btlr.f[j]:ECT()中包括从每个选择点发出的所有可能的替代因果链。在表V的ECT方框(6)和(7)中出现判定btlr.f[j]:msg():empty?()的情况下,用户提供如下的定义,
[0778]
[0779] 系统利用表IV和V中的ECT验证这个定义并使用这个定义来确定在表V的标注有(6)和(7)的ECT方框中具有条件btlr.f[j]:msg():empty?()的选择点考虑的支路。当需要时,系统还使用定义来更新初始状态。典型地,仅当评估判定或当更新初始状态时,作出逻辑推断的需求出现在ECT评估。
[0780] 断言(6.35)和(6.36)没有给出选择表V中的选择点的因果链的任何标准。因此,系统分析与初始状态下的判定和给定定义相一致的所有可能因果链,并发现(6.35)中的Z等于(6.36)中的EZ。这是由图14中的树总结的,其中由树的任何一个支路中的状态指定管家的轮询周期之后的可能配置。读者会注意到图14中的每个支路都满足Z中的模式:所有的哲学家都在思考,或者他们中的一个或两个在吃饭。因此,从初始状态开始后的第一个轮询周期(捕捉了我们迄今发现(6.38)在从初始状态开始后的第一个轮询周期之后立即保持为真的事实的语句将会相当长。这样的语句将必须捕捉图14中的每个可能的支路。)之后的配置满足:
[0781]
[0782] 因此,为了证明(7.35),系统尝试发现如下的配置,
[0783] □[EZ→…→Z1] (6.39)
[0784] 从而通过执行如下操作而使(6.39)成立:通过设定i=j,它首先生成(6.36)中的变量i的存在的实例化,并如下前进:可能的初始配置是,
[0785]4 3
[0786] 根据(6.29)中给出的定义替代(6.40)中的否定状态,这导致(2+2)个可能的初始配置。对于每个初始配置,系统发现对于来自ECT的配置应该为真的初始条件和由用户给出的区分判定的定义,并适当地将它们包括在初始条件中。在如此作之后,对于每个初始状态,它评估跟随与给定的初始条件相一致的所有可能因果链的ECT,并发现Z1=EZ(对于(6.39)中的Z1和(6.36)中的EZ)对于所有可能的初始条件和 保持为真。这证明了(6.35),(6.36)和(6.31)。
[0787]
[0788] 图14:第一个轮询周期的结束时的可能配置的支路树
[0789] 注意,通过如此作,系统有效地建立了用于从实施开始的哲学家就餐的解决方案的状态图。这里,我们不必须搜索匹配的时间点,而是仅搜索在轮询周期中达到的配置。让我们声明根据由系统计算得到的状态图的引理。这个引理对于证明(6.32)是有帮助的。
[0790] 引理1:
[0791] 这指定了如果P[j]处于状态W[j]则P[j]的左侧和右侧的哲学家处于什么状态。当状态被替代以扩展(6.41)中的理论时,我们得到8个可能的不同三元组。这些三元组是:
[0792] T[j⊕54]W[j]E[j⊕51],T[j⊕54]W[j]W[j⊕51],W[j⊕54]W[j]E[j⊕51],[0793] W[j⊕54]W[j]W[j⊕51],E[j⊕54]W[j]E[j⊕51],E[j⊕54]W[j]W[j⊕51],[0794] E[j⊕54]W[j]T[j⊕51],T[j⊕54]W[j]T[j⊕51] (6.42)[0795] 系统容易验证所指定的三元组是否与它已经构造的状态图相一致。如果状态图尚未被构造,则系统可通过对于W[j]设定合适的初始状态并评估表IV和V中的ECT来验证每个三元组,其中可任意选择j。对于(6.42)中的每个三元组,在(6.42)中没有指定的状态可以是与被指定的三元组相一致的任何状态。
[0796] (6.32)的证明遵循如下的事实,即每个吃饭的哲学家返还餐叉(从(6.24)的公理Ax1),并且每个思考的哲学家最终变得饥饿(从(6.25)的公理Ax2),当P[j]正在等待时,P[j⊕54]不能开始吃饭,这是因为btlr.frk[j]已经被P[j]预定。如果当P[j]正在等待时P[j⊕54]正在吃饭,则在P[j⊕54]完成吃饭之后,在直接跟随P[j⊕51]返还餐叉的周期的第一个轮询周期中,P[j]将会得到他/她的吃饭机会。如果因为P[j⊕54]吃饭时间过长而导致P[j]不得不等待管家的几个轮询周期,则根据Ax 1(6.24)P[j⊕51]可在返还餐叉之后再次开始吃饭。这可在P[j]得到他/她的餐叉之前发生几次。但是,P[j]最终将会得到他/她的餐叉,这是因为P[j⊕54]不能再次开始吃饭直到P[j]完成吃饭。这在图15中被描述。这里,论证类似于利用常规表达的FSP论证。
[0797] 让我们考虑(6.42)中的T[j⊕54]W[j]T[j⊕51]和W[j⊕54]W[j]W[j⊕51]的情况。轮询开始于btlr.f[j]。在T[j⊕54]W[j]T[j⊕51]的情况下,唯一的可能性是它变为 这里,P[j]已经开始吃饭,因此证明结束。在W[j⊕54]W[j]W[j⊕51]的情况下,符合如下的:它遵循(6.35)和(6.36),即总是存在至少一个正在吃饭的哲学家。用户提供如下的断言,
[0798]
[0799] 利用(6.36)、(6.39)和图14中的配置通过评估容易使得这个断言有效。在W[j]W[j⊕51]E[j⊕52]的情况下,根据(6.25)中的Ax 2,必然会导致如下序列的过渡:W[j]W[j⊕51]E[j⊕52]→W[j]W[j⊕51]T[j⊕52]→W[j]E[j⊕51]T[j⊕52]→E[j]
T[j⊕51]??[j⊕52]。因此,P[j]最终吃饭。上述过渡可被系统完全验证。对于这种情况还会发生类似的过渡,
[0800] 对于每种情况,系统评估经过连续的轮询周期的ECT,开始于合适的初始状态直到在轮询周期中获取状态E[j]作为P[j]的必要(唯一可能)状态。在每个轮询周期内,在每个j的btlr.f[j]:ECT()评估之前更新初始状态。这类似于FSP中的状态搜索。在这个特定的问题中,当之前到达的配置再次发生时系统可停止重复它的轮询周期。这里是可能的,因为解决方案具有有限的ALLEOP。这种搜索在每种情况下都成功。但是在这种搜索中存在困难。
[0801] 如果E[j]不能到达,则对于非有限的ALLEOP,系统可从未终止,除非用户指定适当的终止条件,或是系统遇到矛盾,或是用户停止系统并检查迹线。
[0802] 评述:通过从实施得到ALLEOP和ECT网络并且在ECT网络上评估给定的CTL断言并分析所得到的因果链来构造ALLEOP证明。系统展示了它在以迹线格式存在的ECT网络中发现的因果链。证明构造是交互的。在所有的情况下,用户提供要被有效的CTL断言和引导因果链(迹线)分析的断言。系统适当地使由用户提供的每个断言有效并使用已经有效断言来发现新的迹线。我们在上面对于一些简单例子已经描述了这个证明过程。为了简化展示,我们不展示在它的搜索过程中由系统发现的迹线。
[0803] 在ECT评估中存在五种相互间关联的活动:(i)设定与给定的CTL断言相一致的开始和结束配置;(ii)当需要时,发现CTL断言和ECT之间的匹配时间点;(iii)发现ECT网络中的选择点处的条件的真值;(iv)发现从开始配置到结束配置的所有迹线;以及(v)分析迹线以使CTL断言中的主张有效。在有限ALLEOP的情况下,用户干预仅在上面的项目(v)中是必须的。在非有限ALLEOP的情况下,对于(iv)和(v)都是必须的。
[0804] 在系统不能独立地证明所有的可证明CTL断言的情况下,这些证明的证明理论都不是完整的证明理论。这是因为在上面的项目(iv)和(v)中用户交互的从属性。随着我们经验的积累,如果可能的话可通过识别典型的ALLEOP样式或通过建立FSP结构和有限ALLEOP结构之间的对应关系,在逐渐更大的范围内自动化证明构造。我们不能声明与TMTICC -Ppde如何被组织、它如何操作、以及什么被证明的运算重要性相独立的证明理论。在TM
定义证明理论之前,我们定义TICC -Ppde编程系统的指示固定点语义。这定义了什么被证明的运算重要性。
[0805] 下一个子部分将会介绍引导用户生成对于给定的应用Ap要被验证的CTL断言的标准。
[0806]
[0807] 图15:在连续轮询周期中管家的状态
[0808] 6.5实施的校正
[0809] 使 得 Ap:Requirements(),Ap:Pthreads(),Ap:ALLEOPs(),Ap:ECTs() 和Ap:CausalNet()分别表示在Ap的实施中应用Ap的并行线程、ALLEOP、ECT和因果网。在部分7中描述了由SMS自动生成的因果网。由用户定义在Ap:Pthreads()中的线程。它们是相互独立的成对。此外,每个并行线程是仅包含基本编程语句的短序列程序。这些使得可独立于其他并行线程来证明每个并行线程的校正。设计者和实施者有提供并行线程特征化的责任。ALLEOP和ECT是从实施规范由系统自动地生成的。
[0810] 如果对于Ap生成的因果网在它运行过程中没有违反事件样式和Ap:ALLEOPs()中的部分顺序,并且Ap:CausalNet()中的所有事件都是在指定的时间期限内发生的,则我们编写(Ap:CausalNet()satisfies Ap:ALLEOPs())。在部分7中描述的SMS不断地执行这个监视以检查(Ap:CausalNet()satisfiesAp:ALLEOPs())是否保持为真。
[0811] 在紧跟图2的段落中定义了通过匹配良好的路径连接的两个端口的事务校正和概念。当且仅当在应用Ap中由路径连接的Ap中的所有对的端口是良好匹配的,我们定义Ap:Correct()是有效的。让Ap:Requirements()成为在开始设计之前开发的并且之后更新的应用Ap的设计需求。Ap中事务的校正的定义、Ap:Requirements()的定义、以及事务完TM成的时间期限的规范都是由设计者和实施者通过与TICC -Ppde交互来开发的。当然可能的是,(Ap:CausalNet()对于给定的运行中的实施成立,但是实施是不正确的。为了避免这种可能性,我们期望如下的有效标准对于实施保持为真:
[0812]
[0813] 很明显,(6.44)的真实性依赖于对于Ap有效的那组CTL断言。因此,(6.44)和如上定义的校正的概念,Ap:Correct()的概念在如下方面定义了有效标准,即它被用来选择对于给定的实施应该被有效的那组CTL断言。对于我们展示的简单例子验证的CTL断言对于这些实施满足(6.44)。由(6.44)和Ap:Correct()的定义来引导对于其有效性建立实施Ap的校正的那组CTL断言的识别。我们假设设计者将会做这些。
[0814] 很明显,如果系统的实施的验证导致它满足(6.44),则使用SMS通过动态监视验证这个系统的性能的校正是很有意义的。在这种情况下,可使用使有效的断言作为引导以指定诊断运行时发生的错误的策略,并还可使用使有效的断言来指定自我校正的策略。这些对于未来的研究都是重要的课题。TICC-Ppde的唯一特征在于,它提供了在它的整个存在时间内动态地监视系统性能所需的SMS,并提供了通过CTL断言使系统实施有效的方法。由于所有的有效和校正检查都最终依赖于ALLEOP,因此我们将这里展示的证明称为ALLEOP证明。
[0815] 在有效处理的过程中,当发现匹配时间点,系统可识别关于ALLEOP不可比较的事件,但是应该是对于CTL断言同步的(在相同时间发生的)或调整的(一个事件总是发生在另一事件之前)。即使同步和调整不对其中发生事件的任何验证后的CTL断言取反,一对事件应该是这样的同步或调整的候选。我们在下一个子部分中介绍自组织(ad hoc)同步TM和调整方法,当需要时,在TICC -Ppde中使用ad hoc同步和调整方法以将所需的同步和调整引入到已经完成的实施当中,而无需重新编程并行线程。
[0816] 在TICCTM-Ppde中系统实施的主要任务不是编程,编程的并行线程和条件相对而TM言是繁琐的机械任务。困难的主要任务在于,(i)设定TICC 网络;(ii)定义TIP;(iii)TM
特征化所需的并行线程;和(iv)识别要被有效的CTL断言。TICC 网络的结构提供了其中TM
替代的组织可以被测试和被利用的媒介。TICC 范例将系统设计和实施的艺术从编程艺术转移到识别所需的子系统、指定子系统之间的交互和证明校正的艺术。
[0817] 6.6限制测试和Ad hoc调整及同步
[0818] 限制测试:ECT的支路树和时间点的部分顺序可用来验证各种类型的有用系统属性。用于证明实时系统的一个有用属性在于,无论TIP执行时间如何变化所需的时间点的部分顺序总是被预留。这是通过限制测试来完成的。
[0819] 对于在端口C.p的TIP,定义了时间范围,(τpmin,τpmax):τpmin是从时间消息被p传递到p开始在p完成TIP的执行所需的最小时间间隔,而τmax是所需的最大时间间隔:
p p C C
τmax<(τmin+2Δmax),其中,Δmax是端口C.p的父蜂窝C完成一个轮询周期并利用即将达到的消息服务所有的端口并返回到服务端口C.p所需的最大时间。如果C在一个轮询周C
期中错过C.p处的消息并在下一个轮询中捕获它,则这将会发生。2Δmax在这里被使用,这是因为C.p可能是在下一个轮询周期中服务的最后一个端口。
[0820] 假设存在两个迹线,一个指向端口C.p而另一个指向端口D.q,而蜂窝C和D没有p p q q通过任何的因果链相连接。要求分别在端口C.p和D.q处一对事件X(t)和X(t)的发生p q p
总是使得(t <t)。使得(p[0],…,p[r-1]=C.p)成为指向X 的因果链中的端口,而q
(q[0],…,q[m-1]=D.q)成为指向X 的因果链中的端口。使得tn(p[0])和tn(q[0])成p[j]
为将第n个消息分别传递到端口p[0]和q[0]的时间;τ max是完成q[j]:tip()的执行p q p q
所需的最大时间;而t 和t 是事件X 和X 发生的时间。随后对于该对端口序列如下的应该保持为真:
[0821] tp ≤ (tn(p[0])+ ∑ {τp[j]max|0 ≤ j < r}) < (tn(q[0])+ ∑ {τq[i]min|0 ≤ iq<m})≤t (6.45)
[0822] 因此,我们需要Xp和Xq应该是周期同步的。
[0823] Ad hoc调整:让我们假设条件(6.45)不满足。如何无需作大量的重新编程即可实现它?具体的,让我们假定具有通过实施的ALLEOP中的因果链没有彼此连接的端口C1.f1和C2.f1的两个蜂窝C1和C2。假设系统的正确操作需要仅在执行了C1.f1处的TIP之后应该执行C2.f1处的TIP。让我们将这个需求编写为TM
这个问题可利用大量生成和端口矢量在TICC -Ppde中方便地解决,这如图16
所示。
[0824]
[0825] 图16:说明ad hoc调整
[0826] 假定两个其它的端口C1.g和C2.f2,定义了[C2.f1,C2.f2作为端口矢量并安装将C1.g连接到C2.f2的支路,这如图16所示。现在,仅在C2.f2从C1.g接收到信号之后C2才服务C2.f1处的消息。在执行了C1.f1:tip()之后,C1.g发送这个信号。C1.f1和C2.f1处的TIP具有如下的格式,
[0827] (C1.f1:mR?()&C1.g:pR?()*){C1.f1:r().s();C1.g:s()}
[0828] (C2.f1:mR?()&C2:f2:mR?()*){C2.f1:r().s();C2.f2:s()} (6.46)[0829] 利用这个,C1:f1和C2:f1将会是周期同步的而需求总是可以被满足的。实际上,这个安排可以用来不仅调整成对的端口,还可以用来调整周期同步化分组至分组的交互。在部分7中描述了利用分组至分组的信号交互,如下
[0830]
[0831]
[0832] 图17:Ad hoc同步
[0833] 这里,为了包含所需的周期同步在实施中仅需要作的修改是,(i)设定所需的分组至分组路径;和(ii)改变TIP定义。剩余的实施可维持不变。这里的安排非常类似于在异步硬件系统中使用时间信号来调整子系统活动的方式。
[0834] Ad hoc同步:在TICCTM-Ppde中,不同蜂窝的轮询周期彼此之间不是同步的。然而,有时必须同步化没有通过路径链彼此连接的且没有在蜂窝分组中的端口的服务。我们将它们称为孤立的蜂窝。因此,对于孤立的蜂窝Cj,其中0≤j<n,期望实现同步,
[0835] [●→(C0.f:tip(),…,Cn-1.f:tip())(t)] (6.48)[0836] 这是通过安装如图17所示的自我闭环的路径来实现的。端口Cj.g与蜂窝Cj相连接而每个端口Cj.g与图17所示的自我闭环的路径相连接,其中0≤j≤n。每个Cj.f处的TIP具有如下的格式,
[0837] Cj.f:mR?(){Cj.g:s();Cj:g:mR?()*{Cj.f:r().s()}}. (6.49)[0838] 这里,每个蜂窝Cj.g一旦经由Cj.f接收到消息时立即通过自我闭环路径向自身发送信号。仅在所有的蜂窝Cj经由它们各自的端口Cj.g发出信号(在部分7中描述了用于这个的协议)之后,同步的信号才通过代理a0传递到所有的Cj.g。每个Cj在接收到这个同步的信号之后立即在它的端口Cj.f响应已接收到的消息。在图17中与代理a0相连接的其中一个蜂窝可以具有全局时钟。在这种情况下,所有的蜂窝将会与全局时间同步地在端口Cj.f响应它们各自的消息,或是系统中的任何其他的事件。这非常类似于使用时钟的交汇技术,但是复杂得多:同步化机制不必须被编程为并行线程,仅必须安装自我闭环的网络和修改TIP。
[0839] 这里在思考后作出同步和调整。这些种类的ad hoc同步和调整不能在π微积分中、在施动者系统中、在CSP中或任何其他当前可以利用的并行编程范例中无需作出大量的重新编程而实现。我们将会在这个部分中总结出关于包含任意数目的节点的NFSPALLEOP的一些评述。
[0840] 6.7动态成长的非有限状态ALLEOP的例子
[0841] 在图18中示出了这样的一个简单网络。它具有n个蜂窝。每个蜂窝C[i],0≤i≤n与csm(通信系统管理器)相连接。当蜂窝被安装时,从蜂窝的被分配的csm端口(总端口的子类)自动地设定到它的相关联csm的私有路径。需要动态地安装新的蜂窝或路径的任何蜂窝通过调用合适的cell:installCell(…)和cell:installPathway(…)方法会将服TM务请求消息发送到它相关联的csm。这些方法都是由TICC -Ppde系统提供的。蜂窝X会向它的csm发送用于破坏X或破坏路径的请求。蜂窝使用csm来安装其他的蜂窝和路径,这是因为这些是昂贵的操作,需要花费100至250微秒。在经由它的csm端口向csm发送请求之后,蜂窝可继而服务它的其他端口并返回csm端口以确保轮询周期来接收来自csm的响应并采取合适的已经编程的动作。只有当所请求的蜂窝具有合适的特权时,csm才服务请求。在任何情况下,csm都将响应信息发送回到所请求的蜂窝。
[0842]
[0843] 图18:具有NFSP ALLEOP的网络
[0844] 当应用开始时,图18中的网络仅包含蜂窝C[0],X和csm。X通过向它的功能端口C[0].f发送消息来激活C[0]。开始时,如图18所示,C[0]的csm端口被调谐到代理a1。当被激活时,作为它的初始化的一部分,C[0]请求它的csm安装C[1],并经由路径将它的端口C[0].g连接到C[1].f。当C[0]从csm获得已经完成任务的响应时,它将C[0].csmPort从代理a1断开连接,经由C[0].g将消息发送到C[1].f,随后暂停自己,由此释放它的分配的CPU。发送到C[1].f的消息包含在下面将由C[1]所使用的条件。
[0845] 发送到C[1].f的消息激活C[1]在其中一个可利用的CPU中运行。当被激活时,C[1]按照顺序作相同的事情,将它的csm端口调谐到代理a1,安装并激活下一个蜂窝C[2],随后将C[1].csmPort从a1断开连接,并随后暂停自己,除非在接收到的消息中的条件停止它这样做。因此,每个最新安装的蜂窝继续安装并激活另一个蜂窝并暂停自己,除非是接收到的条件阻止它。这导致网络成长直到条件停止它。
[0846] 当条件停止成长时,假设在蜂窝C[n],n≥1,C[n]没有安装新的蜂窝,而是通过向C[n-1].g发送回答来响应它在端口C[n].f处接收到的消息,并随后破坏它自己,由此释放它的分配的CPU。在来自C[n].f的响应消息被传递到C[n-1].g时,C[n-1]在其中一个可利用的CPU中继续它的被暂停的操作,重复C[n]所作的动作。因此,每个新安装的蜂窝逐个地完成它的事务并破坏它自己,直到C[0],X和csm是在网络中剩下的唯一的蜂窝。此时,C[0]经由它的端口C[0].f响应它初始从X.g接收到的服务请求,并由此完成了事务。
[0847] 在这个例子中示出定义的细节并不重要,即蜂窝和路径、TIP、ALLEOP和迹线的动态生成和构造的设施。值得注意的是,在迹线中将会发生如下的因果序列。它开始于由X.g向C[0].f发送的消息,继续到C[n].f,并随后开始颠倒处理。因果链如下所示:
[0848]
[0849] 设定‘X.g’=‘g’,‘C[i].f’=‘fi’和‘C[i].g’=‘gi’,其中0≤i≤n,(6.50)被缩减为,其中n>0,
[0850] gSf0D[(g0Sf1D)(g1Sf2D)…(gn-1SfnD)][(fnSgn-1D)(fn-1Sgn-2D)…(f1Sg0D)]f0SgD (6.51)[0851] 现在设定gSf0D=α,giSfi+1D=βi,fi+1SgiD=βi-1,其中0≤i≤n和f0SgD=α-1,我们获得基于上下文的序列,
[0852] α[β0β1…βn][βn-1…β1-1β0-1]α-1,n≥0, (6.52)[0853] 因此,对于这个的ALLEOP明显不是有限ALLEOP,然而它具有有限的描述。我们通常认为与动态网络相关联的ALLEOP是一般递归的。
[0854] 我们现在继续展示分组至分组消息传递协议,该协议包括(i)用于生成当与应用并行地运行时关于应用的动态成长的因果网的SMS设备;(ii)用于数据从属安全检查的设备,其中消息仅被传递到满足先验指定的安全需求的端口;和(iii)用于自动同步和调整的设备。
[0855] 7.分组至分组通信和自我监视系统的协议
[0856] 利用ALLEOP通过ECT评估证明CTL断言,并且用于自我监视系统(SMS)的嵌入式TM TM设备是TICC -Ppde的集成部件。它们对于TICC -Ppde都是唯一的。如果不讨论SMS的基本架构是如何与消息交换协议集成的,这样的展示是不完全的。我们以分组至分组Das路径的变例作为例子在这个部分来进行展示。
[0857] 对于dm路径,分组至分组消息交换将来自计算网格的一个多处理器中的端口分组中的总端口的父蜂窝的服务请求传递到该网格中的其他不同的多处理器中的功能端口的不同端口分组。由功能端口分组以复用模式顺序地发送响应消息。响应消息是由发送规定的服务请求的总端口分组一起收集的,如果接收到的消息彼此之间不一致则请求重新计算。在网格中的每个多处理器动态地安装仅与在多处理器中操作的蜂窝一致的SMS因果网。Dm路径使用4状态硬件代理、4状态软件端口,并且还使用硬件路由器和交换机。因此,协议比这里描述的这个更加复杂。
[0858] 我们对于sm路径中的三种模式的消息传送提供了三种模式的完成信号:s用于发送模式,f用于转发模式,而h用于挂起计算的挂起模式。挂起模式仅由总端口使用。在挂起模式中,不发送服务请求消息并且路径是被拆卸的。蜂窝通过经由虚拟存储器M的便签式存储器交换信息来调整它们发送的信号的类型。
[0859] 如上所述,在共享的存储器环境下,在发送模式中而不在转发模式中切换路径的虚拟存储器的读取/写入存储器。由TIP确定的发送和转发之间的选择,可以基于由并行线程设定的布尔旗标。并行线程应基于TIP是转发消息还是发送消息将要被发送的消息写入到读取或写入存储器当中,并如果需要则设定合适的布尔旗标,以使得TIP作出正确的选择。因此,并行线程和TIP应该在它们所作的方面彼此一致。在分布式存储器消息交换中,不存在转发模式或挂起模式,而是存在数据信号e和取消信号a的结束以拆卸路径并使得网络路由器和交换机回到它们的活动状态,等待用于开始新的路径建立处理的新的信号。
[0860] 在图19中示出了分组至分组消息流动的修改后的Das路径。在总端口的分组G=[g0,g1,…,gn-1]和功能端口的分组F=[f0,f1,…,fm-1]之间交换消息。路径具有四个代理:a0,a1,a2和a3。它们通过如图所示的h分支彼此相连接。所有的四个代理都附接到虚拟存储器M上。为了使得图示清楚,如图19所示,a2和a3偏离地附接到M上。代理a0调谐到端口分组G,a1调谐到端口分组F,a2调谐到功能端口eb.f1而a3调谐到作为事件构建器蜂窝的eb蜂窝的功能端口eb.f2。代理a0.nxt=[a1,a2]并且a1.nxt=[a0,a3]。功能端口矢量[eb.f1,eb.f2]附接到eb蜂窝。我们很快将会看到由这个蜂窝执行的任务。每个eb蜂窝可服务几个不同的路径,其中每个路径通过功能端口矢量中的独立成对的端口和诸如图19所示的端口[eb.f1,eb.f2]和代理a2,a3的相关代理彼此相连接。应用可具有几个这样的eb蜂窝。
[0861]
[0862] 图19:具有自我监控的分组到分组SM路径
[0863] 端口分组G和F中的每个端口都关联于将消息从图19所示的路径的一端传递到另一端所需的协议。当端口分组中的端口的父蜂窝完成了它的计算并准备发送消息时,蜂窝开始执行与端口相关联的协议。因此,端口分组中的端口的所有父蜂窝将在相互不可比较的时间点并行地开始评估它们各自的端口处的协议。路径上的代理调整消息发送。
[0864] 图19中的代理ai,i=0,1,具有对它定义的三个属性:一个是ai.selectedPort,它可以是调谐到ai的任何端口,第二个是布尔属性,ai.dC(‘dC’表示‘传递完成’),它初始化为假,而第三个是被称为完成信号矢量ai.csV的矢量。它具有调谐到ai的每个端口的一个矢量分量以存储从该端口接收到的信号和用于从ai.nxt[1]接收到的信号的一个部件。每个部件假设四个可能的值中的一个>0:ai.csV[j]=(c|f|h|ignore)>0,其中0≤j<ai.csV:size()-1,c用于发送,f用于转发,而h用于挂起;这些信号是由调谐到ai的端口发送的。最后一个部件,ai.csV[ai.csV:size()-1],存储由ai.nxt[1]发送的信号c。存在有第四信号,ai基于在消息发送过程中计算得到的条件使用该第四信号来设定ai.csV[j],其中0≤j<ai.csV:size()-1,以指示对应于j的端口应该被忽略。我们很快将看到ai.csV的部件如何被使用。
[0865] 我们假设G中的总端口正在向F中的功能端口发送联合服务请求。总端口分组是[Ci.gi|0≤i<n-1],其中n-1=G:size()而a0.csV:size()=n。图19中的总端口分组G中的每个Ci.gi中的协议具有如下所示的格式(我们使用‘.’来指定协议的连续序列分量的串联)。Ci.gi:protocol()具有两个串联的分量,Ci.gi:prefix()和Ci.gi:suffix()。下面的语句(7.2a)描述了Ci.gi:prefix()将会作什么。我们下面将会看到Ci.gi:suffix()将会作什么。下面,m-1=F:size()而a1.csV:size()=m。
[0866]
[0867] 当父蜂窝Ci准备发送消息时,它与分组G中的其它端口的父蜂窝并行地执行Ci.gi:prefix()。这样的并行执行不是同步的;不同的父蜂窝Ci在不同的时间可做这个。当执行Ci.gi:prefix()时,如果它尚未被设定,Ci首先设定a0.selectedPort=C0.g0;如果它们尚未被初始化,则初始化矢量a0.csV和a1.csV;这些矢量的最后部件不被初始化。Ci随后设定a1.dC=false,如果它尚未为假。两个或更多的Ci可同时执行这些初始化。不存在相互干扰;这里不需要并行线程锁。
[0868] 在初始化之后,每个蜂窝发送三个可能的完成信号中的一个xi=c|f|h>0到他的端口Ci.gi并且端口将这个信号转发到a0。在这之后,Ci评估表达(a0.
selectedPort≠Ci.gi)?(){a1:dC?()*{};}。这导致除了a0.selectedPort的父蜂窝之外的所有其他蜂窝Ci等待直到a1:dC变为真;由此它们停止继续执行协议。当a1.dC变为真时,每个蜂窝Ci以它的服务顺序开始服务它的下一个端口。同时,在a1.dC变为真之前,当所有其他的蜂窝等待a1:dC?()变为真时,a0.selectedPort的父蜂窝C0开始执行C0.g0:suffix();这将会是执行C0.g0:suffix()的唯一蜂窝。
[0869] 代 理a0将 会 期 望 从 每 个Cj.gj∈ G接 收 到 完 成 信 号xj> 0,其 中a0.csV[j]≠ignore,并且从a0.nxt[1]=a2接收到一个信号c,其中a0.csV[n-1]>0。当a0从端口Cj.gj接收到信号xj>0时,它将会得知蜂窝Cj已经完成了它的运算。当它从a2接收到信号,c>0时,它将会得知在通过相同路径完成先前消息交换的过程中eb做了什么。这些信号成为保护间隔的变量,(7.2b)中的a0:AP1(a0.csV[0…n-1])?()*。C0执行这个保护间隔,这是因为只有蜂窝仍继续执行协议。仅当它的所有部件都大于0时,即它已经接收到所有期望的完成信号之后,保护间隔评估为真。重复地执行直到它变为真。当它变为真时,a0.selectedPort的父蜂窝C0执行C0.g0:suffix-body()。在G中对于所有总端口后缀体都是相同的。因此,哪个总端口被选择为选择的端口无关紧要。我们将会看到后缀体将会做什么。在定义gi:suffix-body()之前,我们必须定义更多的变量和方法。它们与sm路径中的代理和端口相关联。我们现在做这个。
[0870] 安全规范:下面,a1.M是指附接到a1的虚拟存储器。只有当端口Dj.fj满足指定的安全条件时,即a1:Sy(Dj.fj,a1.M)?(),其中0≤j<m-1=F:size(),代理a1将消息传递到转向它的端口Dj.fj。如果对于任何j,a1:Sy(Dj.fj,a1.M)?()为假,则设定a1.csV[j]=ignore,即忽略第j个端口。用户可对于不同的路径定义不同的安全功能(系统具有两个默认的安全定义:在一种定义中,F中的每个端口都接收消息。在这种情况下,不存在安全检查。在另一种定义中,定义了安全级别M.security,安全模式M.rd:msg().mode,以及对于每个f∈F的安全级别f.security。当且仅当M.security≤(f.security+M.rd:msg().mode)时,M中的消息被传递到端口f。通过设定M.rd:msg().mode为高,由此将消息传递到低安全的端口,蜂窝具有特权。仅当它具有必要的特权时,蜂窝可请求其他的蜂窝或路径被动态地安装。蜂窝可临时地将它的特权委托给另一蜂窝。这种安全系统可内嵌到原型TICC和TICC-Ppde当中)。当消息被传递到所有的安全端口时,将变量a1.dC设定为真。
[0871] 其他路径变量和方法:变量a0.ccS保持由下面(7.4-(i))中使用的第二协定协议方法计算得到的合成完成信号(ccS)的值。在(7.3)中定义了AP2。在(7.4)中使用了方法a0:resetPathway()来将其中出现a0的sm路径复位为它的初始状态。方法exception(f)在端口f∈F发出意外以警告观察者在这个端口发生的安全故障。方法a0:swMem()切换a0的读取/写入存储器。方法f:timeStamp()在f的父蜂窝的本地时间下设定f处的时间戳,这指示什么时间消息被传递到f。条件f:active?()检查f的父蜂窝是否已经运行在CPU中;方法f:activate()激活在可利用的CPU中的f的父蜂窝。如上所述,TICC-Ppde自己管理所有的CPU分配和蜂窝激活。
[0872] 我 们 准 备 定 义 gi:suffix-body():它 使 用 了 第 二 协 定 协 议 功 能,a0:AP2[a0:csV[0…n-2]]。注意到,这在其中不包括从代理a2接收到的信号a0:csV[n-1]。它仅检查a0从G中的总端口接收到的完成信号,并设定合成完成信号a0.ccS=
a0:AP2[a0.csV[0…n-2],其中
[0873]
[0874] 注意到,作为来自a2的完成信号的a0.csV[n-1]在这里不使用。现在我们展示gi:suffix-body()并讨论它将做什么。
[0875]
[0876]
[0877] 相同的后缀与每个gi∈G的关联简化了对于端口分组G的动态改变的调整;在新的事务开始之前可动态地将端口追加到G或是从G中删除。现在让我们考虑gi:suffix-body()所做的:
[0878] (7.4-(i)):如果(a0.ccS=h),则复位路径并将a1.dC设定为真。在这种情况下,不发送消息。如果(a0:ccS≠h),则C0开始执行从(7.4-(ii))开始的其余协议并在这个执行的结束将a1.dC设定为真。发生如下的:
[0879] (7.4-(ii)):首先执行安全检查并利用不安全的安全端口的忽略信号更新矢量a1.csV,并且生成意外(用于通知安全故障的消息)。如果所有的功能端口都是不安全的,则协议执行被放弃。否则,它将继续。
[0880] (7.4-(iii)):首先,复位之前从a2和a3接收到的a0:csV[n-1]和a1:csV[m-1]中的信号。代理a0随后做如下的:如果(a0.ccS=c)(见(7.3)),则切换读取/写入存储器,将开始信号s发送到a1,并将信号c传递到eb.f1;否则,不切换读取/写入存储器,将转发信号f传递到eb.f1,并将信号s发送到a1。在任何一种情况下,在eb的本地时间下设定信号传递时间戳。这个时间戳被eb蜂窝解释为消息发送的时间,在下面的(7.6)中被称为eb.ts。由于所有的eb蜂窝是与全局时间同步的,因此这个消息发送时间也是全局时间。
[0881] (7.4-(iv)):它首先检查对于每个安全的功能端口f[j]∈F,它的父蜂窝是否已TM经被激活。如果没有,则它激活父蜂窝。TICC -Ppde中的激活相对而言是昂贵的。它花费大约2.5微秒在2GHz的计算机中激活蜂窝(由Rajesh Khumantham先生来实施用于管理TM
处理和并行线程激活的TICC 子系统)。这是描述从(7.3-(iv))中分开这个操作的语句的原因。通常,激活仅执行一次,消息被首次传递到端口;分开这部分使得传递信号以快速的持续被发送到所有的安全端口。在将传递信号发送到所有的安全端口之后,利用时间戳将信号s经由代理d传递到端口eb.f2,并随后将a1:dC设定为真;eb将这个时间戳解释为由(7.6)中eb.td表示的消息传递时间。
[0882] 如果CCP是以机器指令实现并且硬件辅助可用于设定时间戳,则信号被传递到在(估计的)2GHz的CPU中的连续端口之间小于3纳秒分隔的安全端口(利用软件中实施的CCP,无时间戳对于每个端口的每个信号传递它花费大约3纳秒。这是通过执行在每个环路周期中将信号传递到四个端口的环路测量的,复位信号并重复环路一百万次。一百万次重6
复花费的总时间被4×10 除以获得每个端口对于信号传递所花费的平均时间。C++优化器TM
在这个测试过程中被关闭。时间戳设备在原型TICC -Ppde中不可利用)。对于每个安全的功能端口f,在端口f处设定的信号传递时间戳是它的父蜂窝的本地时间。当对于所有的安全端口完成了消息传递时,或当放弃了协议执行时,a1.dC被设定为真。可由功能端口的父蜂窝来组织被传递的消息的处理以便仅在a1:dC变为真之后,即仅在消息被传递到所有的安全功能端口之后才开始。这是通过如下修改f:mR?()和g:pR?()来实现的:
[0883] {(t)}[●→f:mR?()(t)]{(true & f:state=S)(t’)}
[0884] {<(g:input=s∨g:state=S) & a0.dC=true>(t)}[●→g:pR?()(t)]
[0885] {(t’)}. (7.5)[0886] 同时,当eb在本地时间eb.ts和eb.td下分别感应到eb.f1处的信号c|f和eb.f2处的信号s时,它安装与分组至分组消息传递相关联的如下的通信事件:
[0887] C.giS|F(eb.ts)for(0≤i<n),and(eb.td)for(0≤j<m) (7.6)[0888] 如在等式(5.21)中指定的一样,并在与因果网相集成之后,通过在eb.f1和eb.f2处分别执行如下所示的协议,向a0和a1两者发回完成信号c:
[0889] (eb.f1:c→a2:c→a0)and(eb.f2:c→a3:c→a1). (7.7)[0890] 所有的这些都是当图19中的功能端口Dj.fj的父蜂窝正在处理对于刚传递给它们的服务请求的响应时所做的。由于不存在两个eb蜂窝在成长的因果网中的相同地点安装通信事件,因此当它们并行地执行它们的活动时在不同的eb蜂窝中不存在相互干扰。
[0891]
[0892] 由于eb蜂窝可访问虚拟存储器,因此它可访问a1.csV并识别消息被传递到的功能端口。利用ALLEOP,它可确定事件实例应该被安装的成长的因果网中的地点。利用这些数据,eb蜂窝将通信事件安装到因果网当中。在图20中示出了要被安装到因果网中的因S果网片段。这里gi 的分派时间被设定为ts,其中0≤i<n-1,即信号被传递到eb.f1的时间。到功能端口的传递时间表面上被记录为td,即信号被传递到eb.f2的时间。图21显示S S
了对于答复消息发送而安装的网络。如果消息已经被转发,则图20和图21中gi 和f1 的S F
上标 将会变为 。
[0893] 注意到,eb蜂窝根据它对于ALLEOP的知识可期望消息发送和消息传递事件实例。实际上,如果期望的事件节点没有处在先验指定的时间期限内,则不停地监视成长的因果网的与eb蜂窝并行的ea蜂窝(事件分析器蜂窝,下面将会描述)将会向观察者发出关于可能的系统故障的错误报告。由于eb蜂窝可访问与eb.f1和eb.f2相连接的路径的虚拟存储器,因此当安装事件实例时,它甚至可以检查在消息发送和接收蜂窝中保持为真的迹线中的条件。然而,这会不当地延迟的消息发送并且在运行时间中不是实际的。但是,这可以在测试模式下做出。
[0894] 当接收到服务请求的F中的功能端口的父蜂窝感应到功能端口处的消息传递信号时,通过向a1发送c|f信号,它们执行相关联的并行线程和协议以发回响应消息。此时,a1仅期望来自端口eb.f2和来自所有的安全功能端口的信号,这是因为对于不安全端口在a1.csV中已经设定了忽略信号。用于发回(转发)答复消息的协议类似于在(7.1),(7.2a),(7.2b)和(7.4)中示出的协议,具有如下的不同:a1:selectedPort被设定为a1.csV中的第一安全端口,即第一端口fj∈F,其中a1.csV[j]≠ignore。对于向G中的总端口传递响应不做安全检查;G中的每个端口都接收响应。
[0895]
[0896] 图22:在图21和22的事务中由eb蜂窝安装的因果网片段
[0897] 在响应消息的传递过程中,如(7.7)所述,仅在a1从所有的安全端口D.fj接收到完成信号并从a3接收到完成信号之后,a1才向a0发送信号s并向a3发送信号c|f。代理a3将信号c|f转发到eb.f2以通知eb响应消息正在被分派到G中的总端口。在将响应消息传递到总端口之后,a0向用于将信号转发到eb.f1的a2发送信号s以通知eb响应消息已经被传递回到G中的总端口。当eb在端口eb.f1和eb.f2处感应到这些信号时,它在成长的因果网中的适当地点对于每个安全的fj安装图21所示的通信事件实例。在完成这个安装之后,eb利用(7.7)所示的协议经由eb.f1和eb.f2向代理a0和a1发送完成信号c。在图22中示出了图20和图21的组合后的因果网片段。
[0898] 我们已经关于代理a0,a1和端口g和f(见图1至图4)讨论了ndFSM。sm路径中的所有代理和端口都是相同的2状态ndFSM。很明显,协议对于点对点通信而言更加简单,这是因为不存在选择的端口并且ai.csV都仅具有两个部件,其中i=0,1。协议最多使用(6+m-1)个CCP,其中m-1是F中端口的数目。这并不计数由Ci.gi的父蜂窝并行地执行以向a0发送完成信号的第n-1个CCP。分组至分组通信相对而言是昂贵的,但是仍比传统的分组至分组通信便宜很多。
[0899] 如上所述,应用在它的网络中可具有几个eb蜂窝。没有两个eb蜂窝将服务相同的sm路径。除了eb蜂窝之外,应用还具有几个ea蜂窝和事件分析器蜂窝。ea蜂窝用于检查成长的因果网和ALLEOP之间的一致性,并查找在因果网中的先验指定的事件模式的发生以警告观察者关于这些发生。在大多数情况下,将由使用ALLEOP节点作为终端符号的常规表达指定所关注的事件模式。TM
[0900] TICC -Ppde的这种方式的使用需要处理单元(CPU)的实际上不加限制的提供。随TM着多核芯片和纳米技术的发展,所需的CPU很快应该可以利用。TICC -Ppde不仅提供了利用任意数目的处理单元的自然环境,而且还可有效地使用可利用的处理单元来自动地构建每个应用的自我监视系统(SMS)。当应用运行时,ALLEOP指定将发生的事件模式。与指定模式的偏差将会被SMS解释为错误。当然在计算值是错误的时因果网中的事件模式可以是正确的。然而,如在部分6.5中讨论的,通过在实施过程中和实施之后生成的正确性证明来排TM
除这种可能性。这些特征对于TICC -Ppde是唯一的(在这点上是值得怀疑的。某天我们可TM
能会实施“理解”它们做什么的软件系统。这里,我们怀疑这样的软件系统应该在TICC -范例中的SMS的上下文中的能力。这需要基于在它们当中构造的一组通用种子模式将所关注的在因果网中发生的因果链的学习模式的通用能力包含在事件分析器蜂窝(ea蜂窝)当中。学习将会特殊化并细化种子模式。Ea蜂窝可通过与它们的环境的交互和与应用自身的交互来做这个。当然,ea蜂窝还需要代表所学习的模式的能力。出于这个目的,它们使用了用于定义种子模式的相同类型的语法。这些语法将会使用ALLEOP节点作为非终端符号。
可将这些模式想象为所关注的并指定了在应用中发生的活动的因果网的概要。甚至具有模式的模式概要等级。当系统识别出这些模式的发生时,使用它们来通信并引导它自己的计算,并细化它们,系统性能可表明类似于“理解”。这种能力对于构建可诊断并修复它们自己TM
的系统而言是必需的。长远来看,它们导致了自我理解的软件系统。TICC 范例中的SMS提供了用于调查这样的系统的设计中的问题的上下文。我们假设我们的大脑皮层可在大脑中作出这种类型的动态样式分析。进化已经使得我们构建了具有特定的内部种子模式:用于面部识别、声音识别、气味识别、运动识别、手指调整、振动感应、手/眼调整、以及腿/身体调整的样式都是这样的种子模式的例子。识别出的模式动态地控制内部和外部的有机体的行为,还控制模式自身是如何细化的。生物学家同意,甚至处于原始形式的内部能力对于种群生存具有重大的影响。它们广泛地分布在各种类型的昆虫和动物种群当中。利用学习,这些内部能力被改善并被特殊化并导致我们在自然界所看到的令人眼花缭乱的大量展现。
学习能力随着种群而变化。当人类看到图像时,在人的整个大脑中发生事件。我们假设,所看到的图像的识别是一个连续的处理,该连续处理是当图像被看到时作为通过大脑皮层在大脑中动态识别正在进行中的事件的因果链的样式的结果而发生的。这里,识别出的模式与上述这些处理并行地影响并引导正在进行的识别处理。因为已经存在有为解决这个问题的许多模式识别工作,因此不能以事件或模式的组合聚类的方式来描述这些类型的识别处理[Francis Crick,47])。
[0901] 7.1单向环型道路
[0902] 至此我们使用了这样的约定:答复通过与服务请求被发送路径相同的路径被发送。有时,当由不同的其它蜂窝中的一个蜂窝大量生成不同的序列计算时,这有助于复杂化并行线程并增多与蜂窝附接的端口的数目。也有助于降低序列计算的效率。图23中的修改后的Das路径避免了这个问题(在这个附图中没有示出利用eb和ea蜂窝的SMS的路径变量,以便使得附图变得简单)。
[0903] 这里,图23中的总端口分组G1中的端口向功能端口分组F1中的端口发送它们的联合服务请求消息。当G1作出这个时,它的端口获得复位以接收答复。它将会从F3中的端口接收这个答复。F1中的端口接收由G1中的端口发送的请求,并向F2中的端口发送它们的联合答复,该联合答复被视为另一服务请求。当F1作出这个时,它的端口获得复位以接收来自G1的下一个服务请求消息。图23中的经由路径环路的消息顺时针流动,直到G1中的端点端口接收到来自F3中的端口的应答。仅在G1已经从F3接收到这个应答之后,G1才向F1发送它的下一个服务请求。可向图23中的虚拟存储器附接任意多个代理。我们将图23中的修改后的Das路径称为复合的sm路径,这是因为它具有一个虚拟存储器及与它相关联的几个代理。这种配置对于在并行网络中执行序列计算是有帮助的。当它们处理接收到的消息时,环绕复合路径的任何一个分组中的蜂窝都可并行地工作。
[0904]
[0905] 图23:单向环路径
[0906] 8.结论性评述
[0907] 我们这里介绍了组合来自各种其他范例的概念的并行编程范例。TICCTM提供了对TM TM于在并行编程开发中一起工作的必要粘合(glue)和执行平台TICC -Ppde。TICC -Ppde提TM
供了如下方法:(i)定义并行处理TICC -网络;(ii)利用TIP和CIP概要地指定了这些网络的部分之间的交互;(iii)通过并行线程的连续细化完成了实施;(iv)从实施中自动地获得ALLEOP模型;(v)利用动作特征化从ALLEOP模型自动地获得迹线;(vi)从迹线构建ECT网络;(vii)在FSP和NFSP等级上使用ECT网络来产生实施的有效属性的交互证明,被声明为CTL断言;(viii)将运行时间自我监视系统(SMS)自动地包含在每个完成的实施TM
中;和(ix)执行限制测试和ad hoc同步和调整。(x)TICC -Ppde需要并使用大量的处理单TM
元。它提供了对于在与TICCNET 集成的多核芯片的分集中高效的开发和运行程序所需的概要和工具。这些对于所有软件系统,特别是对于实时网络物理系统和在任何不可访问的TM
环境下运行的系统的设计、实施、验证及运行而言都是有价值的工具。它们对于TICC -Ppde都是唯一的。我们相信未来所有的软件系统都是并行软件系统。
[0908] 在施动者系统中,理论上在施动者系统的语义的定义中可包括消息交换的语义。当然它可以作出复杂得多的分析。但是在π微积分中,通信的语义不能被包括在微积分的语义中,这是因为不能在π微积分中框架中通过链接定义名称的通信的机制。它必须被假设为给定的原语。
[0909] 在TICCTM-Ppde中,同步和调整被构建到通信系统当中。对于每个消息交换,可在狭窄界限内预测何时消息发送事件开始和何时消息被传递。类似的,可在合理狭窄的界限内对于每个动作事件预测它开始执行的时间和它完成执行的时间。在施动者系统和π微积分中不能做这些。我们通过展示从领域上的一组事件到自身的单调连续映射定义了TMTICC -Ppde的语义,映射是由被有效后的实施定义的。因此,保证仅获得期望的结果。被有效后的实施变为语义定义的一部分。
[0910] TICCTM-Ppde中的TIP交互规范是与π微积分中的交互规范相类似的,区别在于通过与端口相关联的协议在TIP中明确地指定了通信机制。以与CSP相类似的方式将通信TM和计算集成,但是具有更大的复杂度、能耗并与异步通信部件相互隔离。TICC -Ppde是自我同步、自我调整和自我激活的。它们不需要监视器、旗语、调度器、同步器、调整器、线性化器或其他任何附件来正确地作出编程工作。
[0911] TICCTM-Ppde假设任意数目的处理单元的可利用性。如果需要满足在总结中讨论的量化条件,则处理单元的数目可达到几百万个:简单来说,量化条件要求在任何一个轮询周期内由蜂窝服务的端口的数目独立于在系统中蜂窝的数目。在这个标准下在部分6中没有解决方案是可任意量化的。这提供了充分利用由多核和纳米量化技术提供的期望扩展的TM大量处理单元的机会。在TICC -Ppde中提出的编程技术理想地适用于充分利用这样的技术。
[0912] 当前的原型实施尽可能地消除了使用操作系统的需求。理论上,可完全地消除TMTICC -Ppde中的操作系统的需求。我们尚未做到这点。如果CCP作为指令硬件实施并且TM TM
多核芯片通过还与芯片集成的TICCNET 相互连接,则TICC 对于共享存储器和分布式存储器通信两者提供了具有几百纳秒范围内的高速通信的设备。在任意给定的时间内并行地交TM
换的消息数目仅受到在这个时间内在系统中运行的有效蜂窝的数目和在TICCNET 中可利用路径的数目的限制。
[0913] 利用FSP[15]和CTL[40-44]的设计规范的基于模型的验证已经在系统设计中扮演了重要的角色。它们用于证实设计和验证实施应该满足的属性。FSP遇到的问题在于不能通过连续的细化将概要FSP规范直接地转换为实施。这使得必须利用不同的工具证实实施,这种任务与设计证实相比较更加复杂。
[0914] Clark等人[38-40]和[Emerson,41]的基于模型的验证已经验证了硬件设计规范,而非硬件实施,这是因为调整和争竞条件的争议点似乎不构成验证系统的一部分。可是,由Clark等人引入的验证方法被硬件设计者广泛地使用来使设计有效。存在有如GEZEL[Schaumont等人,46]的实现无争竞硬件系统的设计和验证的硬件描绘语言。然而不TM
清楚它们是否正在被广泛地使用。TICC -Ppde规范方法学可用于指定并验证无争竞异步硬件系统的实施。实施的所有定时、同步和调整需求都隐含地成为规范的一部分。在验证TM
过程中需要考虑它们。唯一的局限是部件应该异步地相互交互。这使得TICC -Ppde不适TM
用于验证由同步硬件设计驱动的时钟脉冲。利用TICC -范例的优点在于,期望的计算的概要规范看上去类似于概要设计的FSP规范,但是它们还提供了通过连续细化将它们直接地缩减为实施的方法学。
[0915] 利用TICCTM-范例由此可以组合基于模型的形式验证来使实施有效的优点和已经验证的部分实施的连续细化。除了提供这样的验证能力之外,无论是硬件还是软件,只要部TM件异步交互并且使用基于CCP的通信机制,TICC -范例还自动地将SMS(自我监视系统)TM
包含在完成的实施当中以监视应用的生命周期内的性能。TICC -Ppde将系统开发的焦点从编程转移到网络组织、交互规范和证实上。
[0916] TICCTM-范例中的软件/硬件部件之间的交互模式与它们在传统的并行软件系统、TM时间分割的并发软件系统或同步硬件系统不相同。应该被有效的设计TICC -网络、定义TIP和CIP、开发并行线程的特征化、以及识别CTL断言是重要和困难的问题。它们需要关于训练系统设计者和程序员方式的新方法。不仅应该在编程方面还应该在部件交互分析、逻辑和验证技术方面来训练设计者。
[0917] 这里提出的思想具有开启新时代的计算和软件/硬件工程学的潜力。很可能深远地影响个人使用它们的台式机和笔记本计算机的方式,在科学和技术应用中设计及使用计算机的方式,以及社会、教育、商业和政府组织使用计算机的方式。我们甚至能够生产可保护用户免受隐私泄露和恶意攻击的复杂的有效的自我校正软件。
[0918] 附录I
[0919] OG-解决方案:TIPS,ALLEOPs和迹线
[0920] 环境蜂窝:
[0921] E.i:TIP()=[(i:mR?()&g:pR?()){g:s();/*开始所有蜂窝*/
[0922] i:s();/*对用户的应答*/} (I.1)[0923] 入口十字转门传感器:
[0924] Se[j:0…1].f:TIP()=
[0925] (Se[j].f:personAtGate?()&Se[j]f:mR*?()){
[0926] Se[j].g:s();//signals Et[j].ft
[0927] Se[j].g:pR?()*{Se[j].g.personAtGate=false;}} (I.2)[0928] 当一个人接近门(十字转门)时,在门处的传感器设置Se.g.personAtGate=true。在让这个人进入公园或者因为公园已满拒绝这个人进入之后,这个人离开门。在这一点,入口十字转门的功能端口Et[j].ft发送回答复至Se.g。当传感器接收到该答复时,它将Se.g.personAtGate复位为假。当下一个人来到门口时,传感器再次将其设置为真。由此,第二个人仅在第一个人离开门后才能进入。
[0929] 入口十字转门:
[0930]
[0931] 定义:
[0932]
[0933] 这个判定被用于讨论便利性。仅当信号已经由Se[j].g传递给Et[j].ft并且Et[j]已经感应到该信号时其为真。当Et[j].ft答复Se[j].g时,在对在门口的那个人做出响应之后,Et[j]:personEntering?()自动地变为假,因为Et[j].ft.input=s将不再是真。
[0934] {Et[j].g:mR?()*}[●→Et[j].g:letPersonIn()]{Et[j]:personInPark?()} (I.5)
[0935]
[0936] 出口十字转门传感器:
[0937] Sx[j:0…1].f:TIP()=
[0938] Sx[j].f:personAtGate?(){
[0939] Sx[j].g:s();//信号Xt[j].ft
[0940] Sx[j].g:pR ? ()*{Sx[j].g.personAtGate = false;}} (I.7)
[0941] 出口十字转门:
[0942]
[0943] 定义:
[0944]
[0945] 计数器:如果在公园中有空间,在端口C.f[j:0…1]感应到信号时将计数器加一,即,counter.count<max,并且经过 并对Et[j].g做出响应,给出进入的允许,否则C经过 发送响应以拒绝进入,然后等待响应并且然后通过C.f[j]应
答接收的信号。当蜂窝C开始时,计数器被初始化为零,并且设置max大于零。
[0946]
[0947] 定义:
[0948] {counter.count<max)?()}[●→counter++]{counter.count≤max)?()} (I.15)[0949] {counter.count≤max)?()}[●→counter--]{counter.count<max)?()} (I.16)[0950] 显示单元:当在它的中断端口感应到信号时,将用于计数的请求转发给计数器。当接收到该请求时,显示计数。
[0951] D.i:TIP()=
[0952] D.i:mR?(){D.i:s();D.g:f();D.g:mR?()*{D.g:displayCount().s();}} (I.17)[0953] 定义:
[0954]
[0955]
[0956] 轮询周期:忽略中断端口,除了显示单元之外。
[0957]
[0958] 不需要定义用于蜂窝的CIP,因为它们应该是明显的。从上面的定义可知,系统计算下面的ALLEOP和迹线。
[0959] ALLEOPS:
[0960] Et[j:0…1]:ALLEOP():
[0961]
[0962]
[0963] Xt[j:0…1]:ALLEOP():.
[0964]
[0965] C ALLEOP():计数器ALLEOPs
[0966]
[0967]
[0968] D:ALLEOP():显示单元ALLEOP。这里U是请求计数的外部用户
[0969]
[0970] 注意,在(I.35)中,对于通过D.g接收的消息不需要答复。对于OG-解决方案的组合的ALLEOP是:
[0971] O-Garden:ALLEOP()=
[0972] □(Et[0]:ALLEOP()‖Et[1]:ALLEOP()‖D:ALLEOP()‖
[0973] Xt[0]:ALLEOP()‖Xt[1]:ALLEOP()‖C:ALLEOP())] (I.36)[0974] 迹线:我们现在将描述用于入口十字转门Et[j]的迹线。
[0975] 入口十字转门迹线:下面的迹线是从(I.27)中的Et[j:0…1].ft:ALLEOP()得到的。在部分6.1中的表I中的ECT网络的上面三块中表示这个迹线的信息。表I还表示了在C.f[j:0…1]:trace(cf[j].t0)中的信息和Et[j].ft:trace(e[j]ft.t0)与C.f[j ]:trace(cf[j].t0)之间的交互。建议读者比较下面的迹线和在表I中上面三块中的信息。这将使得读者能够理解迹线和ECT之间的对应性。这将是单调乏味的,但不是复杂的。
[0976]
[0977]
[0978] 从表I和II中的ECT网络可以推导用于本实施的其他迹线。
[0979] 附录II
[0980] PC-解决方案:TIPs,CIPs,ALLEOP和迹线
[0981] 这里我们通过定义用于实施中的所有蜂窝分类的CIP而描述实施。在这个例子中更容易这样做。此外,示出了定义实施的不同格。
[0982] 生产者CIP & TIP:
[0983] 在初始化之后,在每个轮询周期中,生产者P[j]在它的中断端口P[j].i寻找信号。如果在P[j].i存在信号,那么P[j]终止它的操作。否则继续轮询它的端口P[j].f,每次它在P[j].f感应到信号并将其发送至分发者的端口D.g[j]时,产生新的产品,如在(II.2)中P[j]:tip()所示。
[0984]
[0985]
[0986] 定义:
[0987]
[0988] 消费者CIP & TIP:
[0989]
[0990] 定义:
[0991]
[0992] C[j].hasProduct是在消费者分类中定义的属性。(II.5)中的C[j]:usedUp?()必须以适当的方式由设计者在消费者分类中定义。
[0993] 分发者CIP & TIP:
[0994]
[0995]
[0996] 定义:
[0997]
[0998] ALLEOPs:在下面的ALLEOP中,为了简单的原因,我们省略中断端口轮询、中断消息处理和终止处理。
[0999] Consumer C[j:0…(m-1)]ALLEOP:
[1000]
[1001] 生产者P[j:0…(n-1)]ALLEOP:
[1002]
[1003]
[1004] 分发者ALLEOP:
[1005]
[1006]
[1007] 迹线:我们在这里不展示迹线,因为在部分6.3的表III中的ECT网络中出现了组合迹线。迹线提供的所有信息封装在ECT网络中。
[1008] 附录III
[1009] DP-解决方案:CIPs,TIPs,ALLEOP和迹线
[1010] Btlr CIPs和Tips:Btlr代表Butler分类并且btlr是Btlr的例子。这里我们也忽略中断端口轮询、中断消息处理和开始/停止处理。
[1011]
[1012]
[1013] btlr:response(j)的定义
[1014]
[1015]
[1016] 注意,btlr在感应到中断信号的轮询周期中服务具有未决的服务请求的所有哲学家。仅在所有餐叉都在桌子上之后以及在从所有哲学家接收到他们已经终止的应答之后,终止游戏。在btlr:BODY()中用于while-loop的loop不变量是 其中W[j]表示哲学家P[j]正在等待餐叉。 是死锁状态。在游戏的过程中绝不会达到这种状态。在部分6.4中给出了证明。在Btlr分类中定义了下面表征的所有动作和条件。这里没有对于所有动作示出实施。下面给出它们的特征。
[1017] 定义:Btlr动作和条件的特征
[1018]
[1019]
[1020] 哲学家CIP和TIPs:
[1021]
[1022] 定义:哲学家定义和条件特征,0≤j<5:
[1023]
[1024]
[1025] ALLEOPs:在下文中,“|”分开替代物
[1026] Btlr ALLEOPs:
[1027]
[1028]
[1029]
[1030] 如我们已经提到的,仅在已经服务了所有等待哲学家并且所有哲学家已经停止了吃饭并返回餐叉之后btlr终止操作。
[1031] 哲学家ALLEOPs:
[1032]
[1033] 等待的哲学家仅在他/她吃完之后响应于终止信号。由此,在游戏结束之前,每个哲学家应该已经得到满足。
[1034] 轮询周期:
[1035] btlr:Polling()=[btlr.f[0]:mR?()→btlr.f[1]:mR?()→btlr.f[2]:mR?()[1036] →btlr.f[3]:mR?()→btlr.f[4]:mR?()→btlr.i:mR?()
[1037] →btlr:Polling()] (III.33)[1038] P[j:0…4]:Polling()=[P[j].g:pR()*→P[j].i:mR?()→P[j]:Polling()] (III.34)[1039] 突出的判定&初始状态:
[1040] 在用于TIP的ETC评估开始之前突出的判定的集合被用于指定初始状态。总的来说,突出的判定包括确定要在TIP的选择点进行选择的条件。由此,在这个集合中包括在虚拟存储器中的任何非标准保护间隔和消息的状态。例如,在这个例子中,如果在下一个TIP执行开始之前没有对在功能端口的业务请求做出响应,则在这个集合中包括虚拟存储器中的保护间隔和消息的状态。ECT的符号评估的规则是:如果在初始状态没有指定确定在选择点的选择的判定,或者在ECT评估中早先使用的判定当中没有指定该判定,那么从应该包括该选择点引出的所有因果链作为在符号评估中的可能的替代物。
[1041] 对于DP-解决方案,突出的判定集合包括下面的条件:
[1042] btlr:frksAvlbl?(j),E[j],T[j]和W[j],btlr.f[j]:mR?()和
[1043] btlr.f[j].rd:empty?(),其中0≤j<5. (III.35)[1044] 在部分6.4中定义了哲学家的状态T[j]、P[j]和E[j]。还定义了游戏的公理和它的初始条件。在部分6.4中表示的证明仅要求P[j].g:trace(p[j].g.t0)和btlr.f[j]:trace(bf[j].t0)。在部分6.4中在表IV和V中示出了从这些迹线中得到的ECT网络。为了方便和清楚的目的,我们将网络拆分为容易读取的一个接一个的块,或者通过并行动作彼此激活。读者可以注意到在每个ECT块中,在块中包括为动作定义的前提条件和后置条件。从这两个表中取出证明所需的信息。
[1045] 这完成了DP-解决方案的实施和定义。在表述权利要求之前,我们定义在权利要求中使用的术语,使得更容易地理解权利要求。
[1046] 权利要求的序言
[1047] 在该序言中定义权利要求的叙述中使用的术语名称、属性、数据、方法、条件、概要、改进、运行、动作事件和通信事件:
[1048] (i)名称是给定的字母符号中的任意有限字符串,
[1049] (ii)数据是通常用于表示值的二进制比特0和1的任意有限字符串,
[1050] (iii)属性是用于定义对象实例x的特性的任意名称,x.attribute被用于指代用于对象x的属性的值,x.attribute在对象实例x的分类X中定义。
[1051] (iv)方法具有格式x:name(),是可选的,每个方法是计算机程序,在对象实例x的分类X中定义用于方法x:name()的计算机程序。如果对其没有定义计算机程序,则方法是概要。
[1052] (v)条件具有格式x:name?(),没有自变量,每个条件是计算机程序,在对象实例x的分类X中定义用于条件x:name?()的计算机程序。条件的评估将返回真值(真或假),或者真值(真、假或未知)。如果对其没有定义计算机程序,条件是概要。
[1053] (vi)概要:如果软件部件包括概要方法和/或条件,则软件部件是概要。
[1054] (vii)改进:定义用于软件部件中的概要方法和条件的计算机程序被称为改进该软件部件。如果已经对软件部件中的所有方法和条件定义了计算机程序,则该软件部件被完全改进。
[1055] (viii)运行:执行用于应用A的完全改进的并行计算机程序被称为A的运行,在A中的每个并行计算机程序由不同的专用CPU(计算单元)执行,在A中的并行计算机程序通过消息交换彼此交互,同时运行A,这是在A中的并行计算机程序之间的唯一交互模式。
[1056] (ix)动作事件:动作事件具有格式(name,t),动作事件是由程序语言中语句的执行引起的,或者由方法或条件的执行引起的,名称是由该执行引起的事件的名称并且t是该事件的发生时间。
[1057] (x)通信事件:通信事件具有格式(nameS,t)或(nameD,t)或(nameF,t)(‘S’用TM于‘发送’,‘D’用于‘传递’以及‘F’用于‘转发’),通信事件发生是由在TICC -Ppde编程语言中的通信语句的执行引起的,名称是附接于蜂窝的端口的名称,该蜂窝发送/接收或转发在通信中交换的消息,t是该通信事件发生的时间。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈