资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,SDL,软件设计技术,SDL,软件设计技术,一 通信软件,1.,通信软件的特点,什么是通信软件,?,凡是用来实现两个或多个实体,(,计算机,电信终端,交换设备等,),之间相互通信的软件都可称为通信软件。通信软件主要有两大类,:,电信软件,和,计算机网络软件,。,电信软件主要包括,:,电话交换软件、移动通信软件、智能网软件等。,网络软件主要包括,:,各种网络协议和网络应用软件。,电信软件和计算机网络软件的特点不尽相同,,电信软件具有以下特点,:,(1),实时性强,电信软件系统属于实时系统,系统对外部事件能做出及时响应,如电话交换机用户在任何时刻拿起话机都能听到拨号音,(300ms,以内,),,用户拨完号码后,系统就会马上为其找到被叫,如果被叫空闲,就可接通被叫,(,向被叫振铃,向主叫用户送同铃音,),。被叫摘机后,双方即可通话。,(2),运行时间长,电信软件系统一旦投人运行,就要一直运行下去,除非发生故障。因而要求系统具有很高的可靠性。,(,3,)并发性强,电信软件系统能够“同时”为成千上万的用户服务,必须具有很强的并发处理能力。,(4,)结果可预期,用户在接受电信软件系统提供的服务时,对其结果是可预期的,如电话用户拿起话机应该听到拨话音,(,作为主叫时,),或可以与对方通话,(,作为被叫时,),,如果不是这样,说明系统出故障了,用户只好挂机。用户拨完一号码后,可以听到回铃音,(,被叫空闲,),或忙音,(,被叫忙,),或空号音(号码错,),或相应的语音提示。否则可认定系统发生故漳了。,(,5),离散性,电信软件系统是离散系统,支持离散事件,系统行为可以用有限状态机来描述。,网络软件具有以下特点,:,(,1,)网络软件采用分层结构,如,TCP/IP,协议栈把计算机网络分成四层。即应用层、传输层、网络层和数据链路层,上下层之间通信采用原语形式,每层使用不同的协议。,(,2,)网络软件实时性要求较低而可靠性要求高。,网络技术的发展趋势是电信与计算机网络的融合。如,VoIP,就是利用,IP,来承载语音信息;软交换就是利用计算机网络来取代传统电话交换机,实现语音和多媒体信息的交换;,XDSL,技术则是利用现有电话网络承载宽带业务。,2.,通信软件的开发过程,与开发其他软件一样,开发通信软件也需要经历以下阶段,:,需求分析,;,概要设计,;,详细设讨;,编码,;,单元测试,;,集成测试,;,系统测试,;,运行维护。,(,1,)需求分析,需求分析的主要任务是把用户对软件产品的需求和软件产品的运行环境搞清楚,经过对要求和环境的分析,采用某种形式化语言对需求进行描述,最后形成需求规格说明书。,用户的需求分为功能性需求和非功能性需求。,对于,通信软件,而言,,功能性需求,主要包括,:,软件系统应其有的功能、采用协议或信令系统的情况、与硬件环境的接口关系、与其他系统交互信息的情况等。,非功能性需求,主要包括,:,软件的可移植性、可靠性、实时性、可用性、安全保密和可重用性等。,在需求分析阶段,可以采用对象建模技术,(OMT),把分析结果抽象成不同的对象,并描述对象之间的关系。统一建模语言,UML,是一种比较成熟的标准建模语言。非常适合于实时系统、特别是通信软件系统的分析建模。,UML,具有完备的语法和语义定义,具有两种语法表示,:,图形语法和文本语法。图形语法直观易懂,便于交流,设计人员一般采用图形语法来建模。,UML,的主要内容可归纳为静态建模机制和动态建模机制。,静态建模机制主要用来构造系统的结构。而动态建模机制主要用来描述系统的行为。,由于通信软件的特殊性,在需求分析阶段,除了要描述系统的结构和系统行为以外,还需要对系统与应用环境之间交互信息的情况以及系统组件之间交换信息的情况进行描述。,Msc,(消息顺序图,),是一种形式化语言,特别适合于描述通信软件系统与外部环境之间以及系统内个功能模块之间的消息交互情况。,需求分析阶段的文档是需求规格说明书。需求规格说明书主要包括以下内容:,1,引言,说明本项目的背景,如项目的委托单位和开发单位、本软件系统一与其他系统的关系等,:,给出缩写词的原文和专用术语的定义,;,列出参考文献。,(2,任务概述,说明本软件系统的设计目标、运行环境、条件与限制等。,(3,功能需求,说明本软件系统的功能划分情况、类的定义、系统类图、系统与外部环境之间的消息,(,信号,),交互图等。,(,4),性能需求,说明本软件系统的可移植性、可靠性、实时性、可用性、安全保密性和可重用性等。,(5),数据描述,给出本软件系统用到的数据项,(,包括静态数据和动态数据,),的描述。如果用到数据库,还要给出数据库的名称和库表结构等。,(,2,)概要设计,需求分析阶段解决了系统应该“做什么”的问题,而概要设计和详细设计阶段就是要解决系统“如何做”的问题。概要设计的任务就是根据需求规格说明书,采用合适的形式化语言给出系统的结构设计,划分功能模块,给出模块间接口定义,定义主要的数据结构,设计主要算法等。,ITU-T z.100,建议中给出的,SDL,(,规范说明和描述语言,),也是一种形式化语言,该语言基于扩展的有限状态自动机,(EFSM),模型,特别适合于描述软件系统的离散过程。,SDL,既适用于概要设计阶段,也适用于详细设计阶段。由于已有工具支持,SDL,到,C,语言或,C+,语言的翻译,即代码自动生成,使得,SDL,语言在通信软件设计中得到越来越多的应用。如果在设计阶段采用,SDL.,语言,则在概要设计阶段需设计出,SDL,系统图,(,含功能块划分,),,给出必要的信号,(,消息,),定义,设计必要的进程类和功能块类,明确各功能块的功能等。,本阶段的文档是概要设计说明书,概要设计说明书的主要内容包括,:,(l),总体设计,说明软件系统的总体结构和功能模块划分情况,以及各模块的功能分配。,(2,)接口设计,设计系统与环境的接口,(,包括软件接曰和硬件接口,),和各功能模块之间的接口。,(3),数据结构设计,设计数据的逻辑结构和物理结构,定义必要的新的数据类型,说明静态数据的加载方法等。,(4,操作维护管理设计,定义故障信息,设计系统故障监测和故障处理策略,设计系统维护操作等。,(,3,)详细设计,概要设计完成后,系统功能已划分清楚,系统结构也已确定。详细设计的任务就是细化各功能模块的功能,详细设计系统行为,并用形式化语言来描述设计结果。详细设计分功能模块进行,一般将功能模块分解成多个有限状态自动机,(FSM),,先画出状态机的状态转移图,然后用,SDL,语言来描述这些状态机。一个状态机对应,SDL.,的一个进程,进程间的信号,(,消息,),交互情况可用,MSC,来描述。对于一些复杂的算法,可以定义过程来实现。,编写测试计划也是详细设计阶段的任务,测试计划包括测试方法的设计和测试用例的设计。,本阶段的文档是详细设计说明书。详细设计说明书的主要内容包括,:,(1,软件结构,说明进程划分情况和进程间的消息交互情况,定义本模块内使用的消息。,(2),数据定义,定义本模块内使用和各进程内使用的数据类型和数据结构,声明变量等。,(3,)行为描述,用,SDL,进程图详细描述系统行为,定义必要的过程,提供变量和过程的共享机制。,(4),测试计划,设计各进程单元测试的测试方法和测试用例,设计本模块集成测试的测试方法和测试用例。,3.,通信协议开发过程,开发协议有两个含义:一是指为了满足新的通信需求,研究开发新的协议,指定协议标准;二是指在一个特定的应用环境下,实现某个已经成熟的协议。,对于第一个含义,开发协议的目标是形成新的协议文本,重点是说明本协议应该具有什么功能,其协议开发过程包括:,协议分析:,协议环境分析包括用户要求、通道性质、工作模式等;,协议功能分析,根据环境分析结果明确本协议应具有的功能;,协议设计:,协议结构设计、协议机制设计,协议元素设计,设计服务原语,,PDU,格式等;,形成协议文本,用自然语言描述协议结构即协议元素之间的关系;,协议描述,用一种形式化语言来描述协议内容,包括建议的软件系统结构、模块划分、系统应具有的行为等;,协议验证,在开发环境下仿真运行协议软件,验证协议的正确性。,二、规范说明和描述语言,SDL,1.SDL,概述,SDL,语言是,CCITT,推荐的规格与描述性语言,(,Specifical,and Description Language),,是一种用来说明和描述系统的国际通用的标准化语言。它将简明的图形与固定的格式结合起来,使开发人员可以将规范与协议以一种清晰而明确的格式描述出来。这种简洁有效的描述语言能够极大地加速标准与协议的开发制定过程。,ITU,将,SDL,描述为“实时系统的特性描述语言”。绝大多数,SDL,概念有文本和图形两种表述形式。由于缺乏某些范围内的高层结构和一些象,C,语言的概念,,SDL,并非编程语言。,SDL,并不描述系统发展进程。,SDL,具有两种不同的语法,SDL/GR(,图形表示法,),与,SDL/PR(,文本表示法,),,两者之间可以互相转换。,SDL,中的数据定义只能采用文本表达方法。,SDL,允许嵌入高级语言或者转换为高级语言,如,C,、,C+,。在实际开发中,开发人员可以应用,SDL,图形化表示法来描述系统,再由,SDL,工具将其转化为,C,语言代码或者,CHILL,源代码,,最后嵌入到实际开发环境中。,SDL,既可以用来说明一个系统所应该具有的行为,也可以用来描述一个系统实际具有的行为。因而,,SDL,可以用来制作以下文档,:,需求说明、系统设计说明、系统设计描述,(,结构设计和详细设计,),、系统测试说明等。,SDL,主要用于电信领域,描述实时、交互式和分布式系统的行为,对于能用扩展的有限状态机描述的系统都非常适用于用,SDL,描述,如电话、用户电报、数据交换、信令系统、信令系统与数据协议的互通等。,2.SDL,开发的优点,1),开发周期可以缩短,40,75,;,2),可以明显改善软件质量;,3),作为正式规范描述语言,可以提高质量在,10,15,。,4),可以大幅降低系统的差错率。,5),可以快速原型化,验证实现是否满足需求,并在开发的早期进行测试,即使系统未完全实现。,6),对系统图形化、直观、易于维护。,3.,工具支持,目前最流行的支持,SDL,语言的开发工具是瑞典公司,Telelogic,提供的,TAU,开发套餐,此工具被全球客户广泛验证。,Telelogic,TAU,工具是行业公认的用于实时及其他先进软件开发和测试的可视化软件环境。它可在开发环境中实现仿真、测试、执行、自动代码生成、早期错误检测及最小化后期开发维护扥功能。,TAU,中包含了,UML Suite,、,SDL Suite,、,TTCN Suite 3,个部分,可以融合,UML,、,SDL,、,TTCN,等语言元素来构建面向实际目标环境的系统。,SDL,把应用领域分为两部分:,SDL,系统和环境,,,SDL,系统是设计者关注的对象,系统以外的部分都被视作环境,系统与环境之间可以通过交换信号来通信,保证系统能对外部事件作出反映。系统与环境的关系可抽象成下图:,环境,SDL,系统,4.SDL,系统行为,SDL,描述系统行为的基础是扩展的有限状态自动机,系统行为由系统内的所有进程实例对应的有限状态机协同工作并通过与环境的交互来实现。,SDL,的每个进程实例就是一个有限状态机。进程实例之间的通信由交换信号来实现,发送信号时可以明确地给出目标地址。每个进程实例都有一个私有存储空间记录该实例的状态和一些变量,因而系统的所有进程实例可以并发地工作。,SDL,系统与环境之间也能通信,,SDL,把环境视为一个进程,可以通过信号交互信息。,Process,caller,;,fpr,lineno,dev_no,;,Dcl,cd_num,num,cd_no,idx4:=0,code,dial_no,;,Dcl,called_no,dev_no,cd_pid,pid,a_rslt,ana_rslt,;,Dcl,succ_flag,boolean,;,Timer T;,Imported procedure,dgt_ana,;,Fpar,in,dial_no,;,Returns,ana_rslt,;,Dial_tone_on,),Set(now+10*,sec,t,),Dial_tone,(,lineno,),在,SDL,系统中,,进程实例,是基本单位,系统行为主要用进程实例来描述。具有相同特性的进程实例构成进程集,进程集,与进程集之间可以,信号,方式交互信息,进程集之间用信道相连,交互的信号都通过,信道,来传递。功能相近的进程集构成功能块,系统则由若干功能块组成,功能块之间也用,信道,相连。信道说明了功能块之间的通信关系,没有用信道相连的功能块之间不能以信号方式进行通信。,从层次关系来看,SDL,系统结构可用图,1-1,来表示,即,SDL,系统由,系统,、,功能块,和,进程,3,个层次的实体组成,系统由功能块组成,功能块可以由进程组成,也可以由功能块组成。,5.SDL,系统结构,图,1-1 SDL,层次结构图,SDL,系统图,功能块图,进程图,图,1-2 SDL,系统包含关系,从包含关系上,,SDL,系统结构可用图,1-2,来表示,即进程图被包含在功能块图中,功能块图又被包含在系统图中。,例:用“,helloword,”,来说明,SDL,图的包含关系:,工作方式:系统启动以后,当从环境向系统发送信号”,helloworld,”,时,系统将向环境回送“,helloworld,”,;当从环境向系统发送信号“,terminated(,结束,)”,时,系统会终止工作。,系统图如下图所示:,System,helloworld,Signal,hellworld,;,Signal terminated;,blk,Helloworld,,,terminated,helloworld,etos,stoe,SDL,系统图,下图是功能块“,BLK”,的功能块图。该功能块只包含一个,进程集,,而且该进程集最多只有一个,进程实例,。“,Procs,”,是进程集的名称,进程集名后的“(,1,,,1,)”表示该进程集将由系统在,初始化,时静态创建一个进程实例(第一个,1,),系统在运行过程中最多允许存在的该进程集的实例数也是,1,(后一个,1,)。,进程不能直接从环境得到信号,所以进程图的边框不代表环境,只是该,功能块的边界,,功能块通过与之相连的信道与外界通信,所以在边框上需标注与其相连的信道名。功能块内部也需要定义信道,负责连接外部信道与进程集,当功能块由多个进程集组成时,内部信道也用来提供进程集之间的通信通道。,SDL,功能块图,stoe,Block,blk,Procs(1,1),Helloworld,,,terminated,helloworld,etos,C1,C2,下图是进程集“,Procs,”,的进程图,只有一个状态,只接受两条信号,当收到信号“,helloworld,”,时,输出信号“,helloworld,”,。由于该信号可以在两条信道上传递,输出时必须指出从哪条信道传输,Sdl,进程图,Process,procs,ready,helloworld,terminated,Helloworld,via c2,1.,包,把系统图中需要定义的信号等放到包里。,在,SDL,中,包(,package),的作用类似于,C,语言中的,“,.h,”,。包中包含的内容都是可以重用的,即可以被多次引用(如,C,语言中的,#include*.h,)。,SDL,允许各层次的图和过程图引用包,包内可以包含所有图中可以定义的内容,如类型定义、信号定义、数据结构定义等。,6.SDL,语法,*,Package,包引用部分,表明在定义包时可以引用其他已经定义过的包,是可选项。,包定义:,关键字,package,开头,由用户给出包名,;,包中可以定义文本内容,在,部分给出;,包中也可以画图,在,部分给出;,包的一般定义格式如图所示:,Package,sig_def,Syntype,dev_no,=integer constants 0:127,Endsyntype,dev_no,;,Syntype,dial_no,=integer constants 0:9,11,12,Endsyntype,dial_no,;,Signal,off_hook(dev_no),on_hook(dev_no,),digit(dev_no,dial_no,);,Signal,dial_tone_on(dev_no),ring_back_tone(dev_no),tone_off(dev_no,),busy_tone_on(dev_no,),null_tone_on(dev_no),tone_off(dev_no,),ringing_on(dev_no),ringing_off(dev_no,),path_connect(dev_no,dev_no),disconnect(dev_no,dev_no,);,Signallist,from_env,=,off_hook,on_hook,digit,Signallist,to_env1=,dial_tone_on,ringback_tonf_on,busy_tone_on,null_tone_on,tone_off,path_connect,disconnect,;,Signallist,to_env2=,ringing_on,ringing_off,;,Synonym sec duration=external;,包的定义内容,2.,系统,SDL,系统完整地描述一个真实系统或一个真实系统中相对独立的一部分。在,SDL/GR,中,系统由系统图来定义或由系统类图实例化得到。,图 简单的,SDL,系统图,一个,SDL,系统就是用,SDL,规格所描述的一个具体物理存在,也就是从,SDL,语言的角度所关注的一切,对于目前不用,SDL,语言描述的,都作为,SDL,的环境看待。,用,SDL,描述的系统是一个层次化的结构。最高一层成为系统,System,层。,SDL,系统通过信道与环境连接。,每个系统可以划分为多个,功能块,(,Block),,功能块之间通过,信道,相连,各功能块相对于其他功能块而言是独立的,功能块之间以及功能块与环境之间的通信是靠,发送信号,来实现的。,块的内部可以进一步划分为,进程,Process,,进程之间通过,信号,进行通信。,SDL,中在各个结构层次中均可定义信号。信号在,text symbol,中加以定义。信号的定义由信号名和信号携带的参数构成。,系统层中定义的信道对应于协议层的上下,SAPs,;,信号则对应于,ASPs,。,3.,功能块(,Block),SDL,的功能块是在,SDL,系统内的部分功能集合。通常情况下,功能块是一些关联较为密切的功能的集合。,一个功能块又可根据需要划分为子功能块,以便在不同程度上对系统进行描述。子功能块与进程处在同一级,他们都通过一定的路由与信道相连。功能块所包含的功能最终是由在功能块内的进程来实现的。一个功能块又可有多个不同的进程来分别实现不同功能。,Block,代表了系统的静态结构,,Process,规定了系统的动态结构。,Block,中定义的信号对应系统的协议数据单元,PDUs,或者控制信息。,功能块由功能块图来描述。,功能块图与系统图基本相同,只是在功能块图的边界上要标出与本功能块相连的信道标识。,图 由功能块组成的功能块图,SDL,系统中的功能块最终都需要用进程来定义。如:,图 由进程集组成的功能块图,P1,P2,两个,个进程集之间存在创建关系,即进程集,P2,的实例由进程集,P1,的实例来创建。,创建符,的定义如下,:,:=,图中还用到了,进程符,,其定义如下:,:=,进程符中包含进程名和进程实例数,进程实例数由两个数组成,格式为,:(N1,,,N2),其中,N1,表示初始化时系统创建的该进程的实例数,,N2,表示系统在运行过程中允许动态创建的该进程的最大实例数。,如,P1(l,l),表示系统初始化时创建一个,P1,实例,由于允许创建的最大实例数为,1,,在系统运行过程中就不能再创建,P1,实例了,;,P2(0,128),表示系统初始化时不创建,P2,实例,但在系统运行过程中,最多可以同时存在,128,个,P2,实例。,进程实例数可以不写出来,缺省的进程实例数为,(0,inf,),inf,表示不受限。,4.,进程,(Process),进程是系统的基本组成单位,系统的行为主要由进程来描述,。,进程是一种扩展的有限状态机,它规定一个系统具体的动态行为。也就是讲,只有到达了进程级,系统详细的动态行为才得以描述。进程一般处于等待信号状态,当收到一个信号时,进程作出响应,执行特定的动作,在执行完相应的全部动作以后,进程进入下一个状态等待信号或者停止,(,杀死,),。,进程用进程图来定义,进程图的标题部分由关键字“,proccess,”,和进程名“,”,组成,后面还可以有参数定义,进程的参数在创建进程实例时由创建者传递给被创建者。,进程图的内容主要是状态机图。,Process,procs,ready,helloworld,terminated,Helloworld,via c2,Sdl,进程图,Process,caller,;,fpr,lineno,dev_no,;,Dcl,cd_num,num,cd_no,idx4:=0,code,dial_no,;,Dcl,called_no,dev_no,cd_pid,pid,a_rslt,ana_rslt,;,Dcl,succ_flag,boolean,;,Timer T;,Imported procedure,dgt_ana,;,Fpar,in,dial_no,;,Returns,ana_rslt,;,Dial_tone_on,),Set(now+10*,sec,t,),Dial_tone,(,lineno,),图 进程带参数的例子,Process,manage,ready,Off_hook,Lineno,Y then X else Y,;,endprocedure,;,参数的类型有,3,种,其含义如下:,In/out,表示输入输出型参数,如果该参数的值在过程中被修改了,调用者(进程或过程)中对应变量(传给该参数)的值也将被修改;,In,表示输入型参数,调用者通过该参数向过程传递数值,该参数的值即使在过程中被修改了也不会影响调用者中对应的变量。,out,表示输出型参数,过程返回后,该参数的值将被带回调用者。,6.,远端过程,在进程集内定义的过程申明成“可出口的”(,exported,),允许其他进程的进程实例来调用,这就是远端过程。,远端过程调用就是调用其他进程集中定义的远端过程。,为方便,把发出远端过程调用命令的进程称为“客户端”,把定义该过程的进程称为“服务器端“。,要实现远程过程调用,需要进行必要的定义:,首先,在”客户端“进程和”服务器端“进程的,共同的上层,中定义远端过程名。共同上层是指在该层定义的内容,两个进程均能看见,如功能块、系统。,Remote procedure,;,远端过程名在文本定义域中定义,格式如下:,Block,call_handle,Remote procedure,dgt_ana,;,Fpar,in,dial_no,;,Returns,ana_rslt,;,Remote procedure,numtodev,;,Fpar,in num,in/out,dev_no,;,Returns,boolean,;,Remote procedure,set_idle,;,Fpar,in,dev_no,;,Syntype,idx4=integer constants 0:3,Endsyntype,;,Newtype,num,array(idx4,dial_no),Endnewtype,;,Newtype,ana_rslt,Literals NORMAL_C,SET_NEW_S,RESET_S,WRONG_NO,Endnewtype,;,Synonym S_IDLE character=“0”;,Synonym S_IDLE character=“0”;,远端过程定义,在这里只是定义了一个远端过程名及参数,过程体须在“服务器”进程中定义。,在“服务器”进程中,,远端过程的定义与一般过程的定义基本一致,只需要把远端过程定义为“可出口的”(,exported).,Procedure,dgt_ana,;,fpar,in code,dial_no,;,Returns,ana_rslt,;,code,11,3,else,12,SET_NEW_S,NORMAL_C,WRONG_NO,RESET_S,号码分析过程图,Exported Procedure,numtodev,;,fpar,in,cd_num,num,in,/out,cd_dev,dev_no,;,Returns,boolean,;,Dcl,dev_int,integer;,Dev_int,:=cd_num(3)+cd_num(2)*10+cd_num(1)*100,Dev_int,Payment,,则系统返回多余的钱和车票。若,Cash,C0,C1,Destination,Ticketnumber,Cash,Resetsys,Banlance,Ticket,3.3.5 block,级定义 如图所示。,Subway,Charge,C0,R0,R2,R3,R4,R1,C1,Destination,Ticketnumber,Payment,Returnback,Cash,Resetsys,Balance,Ticket,3.4,测试与仿真,设计完成后,就可以对系统进行测试和仿真了。首先需要把设计输入到,TAU,提供的,SDL/GR,的编辑器。编辑后,再进行语法和语义分析。分析过程正确结束时可以产生仿真代码,然后把仿真代码载入,TAU,提供的,SDL Simulator,中进行整个,SDL,系统的仿真。仿真可以采用,SDL/GR,形式,或者使用,MSC,记录系统仿真的轨迹。最后,使用,Validator,进行系统验证。,6.,系统行为描述,1.,开始域:进程开始执行的地方。一旦进程实例被创建(动态或静态),就从开始域开始执行。,每个状态机都有一个而且只能有一个开始域,,开始域可以画在进程图的任意页上。开始域由开始符下接迁移过程组成。,开始符的定义如下,:,:=,迁移过程就是状态机从一个状态转移到下一个状态之间的过程,在迁移过过程中,进程可以执行一系列动作。迁移过程也可以是空的,即开始域可以从开始符直接进入状态,迁移过程不做任何操作。,图 最简单的开始域,图 开始域的一般情况,Process,caller,;,fpr,lineno,dev_no,;,Dcl,cd_num,num,cd_no,idx4:=0,code,dial_no,;,Dcl,called_no,dev_no,cd_pid,pid,a_rslt,ana_rslt,;,Dcl,succ_flag,boolean,;,Timer T;,Imported procedure,dgt_ana,;,Fpar,in,dial_no,;,Returns,ana_rslt,;,Dial_tone_on,),Set(now+10*,sec,t,),Dial_tone,(,lineno,),2.,状态域:系统行为的描述以扩展有限状态自动机,(EFSM),为模型,因而,每个状态机都包含若干种状态。状态用状态域来描述。,:=,状态符与开始符的主要区别:,(,1,)形状不同;,(,2,)一般情况下,开始符内是空的;而状态符不能为空。,状态域用来定义状态机在当前状态下对可能收到的信号的处理。,状态符下接一个输入符,表示在当前状态下,如果输入符中的信号到达本进程实例,本状态机被激活,进入迁移过程。,状态符下接一个优先输入符,表示在当前状态下,如果有限输入符中的信号到达本进程实例,不管在该信号到达之前是否已有其他信号到达,本状态机将被激活,优先进入优先输入符下接的迁移过程。,状态符下接一个保存符,表示在当前状态下,如果保存符中的信号到达本进程实例,本状态机将该信号保存下来,等本状态机被其他条件激活,经过迁移过程进入下一状态时,再根据新的状态对该信号进行处理。如果该信号出现在新状态下的输入符中,该信号会得到优先处理。也就是说,被保存的信号比优先输入符中的信号优先级要高。,状态符下还可以接连续信号符,连续信号并不是真的信号,而是一个布尔表达式,用尖括号括起来。,状态符下只能连接输入、优先输入、连续信号符和保存等四种图形符号,如下图所示。,当一条信号到达一个进程实例(状态机),如果该信号没有出现在输入符、优先输入符或保存符中,则该信号将被丢弃掉。,从上面的定义可知,状态符包含一个状态列表,状态列表可以有以下,4,种情况:,单个状态名,表示该状态域描述的情况只涉及一个状态;,多个状态名,表示在这几个状态下,同一触发事件引起的迁移过程是相同的,如下图所示:,图 信号”,msg,“,在多状态下引起相同的迁移过程,*,表示某一事件在本状态机所有状态下引起的迁移过程是相同的;,*(状态列表,1,),表示某一事件在本状态机除状态列表,1,列出的状态以外的所有状态下引起的迁移过程是相同的,一般情况下,状态机经过迁移过程后进入下一状态,进入下一状态一般有两种情况:,(,1,)改变状态;,(,2,)不改变状态。,Process,caller,;,fpr,lineno,dev_no,;,Dcl,cd_num,num,cd_no,idx4:=0,code,dial_no,;,Dcl,called_no,dev_no,cd_pid,pid,a_rslt,ana_rslt,;,Dcl,succ_flag,boolean,;,Timer T;,Imported procedure,dgt_ana,;,Fpar,in,dial_no,;,Returns,ana_rslt,;,Imported procedure,numdodev,;,Fpar,in,num,in,/out,dev_no,;,Returns,boolean,;,Imported procedure,set_idle,;,Fpar,in,dev_no,;,Dial_tone_on,),Set(now+10*,sec,t,),Dial_tone,(,lineno,),主叫进程起始域,1,(,10,),(,lineno,),(,lineno,),true,Process,manage,ready,On_hook(lineno,),Lineno,128,Ltopid(lineno,)=NULL,On_hook(lineno,)to,ltopid(lineno,),false,true,false,管理进程对挂机信号的处理,5,(,6,),3.,触发事件,当状态机处于某一状态时,如果不发生触发事件,就不会发生迁移和状态变化。,触发事件包括输入、优先输入、连续信号等。,(,1,)输入,输入表示状态机接受并消耗信号。输入用输入符来表示,输入符的定义如下:,:=,输入符上接状态符,下接迁移域。输入符的缺口可以朝向左边,也可以朝向右边。在画图时,可以利用缺口的朝向不同区别来自不同方向的信号。一般情况下,输入符内只包含一条信号。如图所示:,输入符内可以包含多条信号,表示在本状态下,输入这几条信号引起的迁移过程是一样的,如图所示。,输入符中包含一个星号“*”,表示在本状态下,除了已在本状态下其他输人符中列出,的输入信号外,本状态机所有其他有效输人信号在本状态下引起的迁移过程都是一样的,如图所示:,如果输入符下接使能条件符,表示当输入符内的信号到达本状态机输入队列队首,状态机处于目前状态时,系统要先计算使能条件符内的布尔表达式,若计算结果为真”,则消耗该信号,否则该信号保留在队列中,只要状态机处于本状态,系统就会不停地计算布尔表达式,直到计算结果为“真”为止。在这期间,状态机也可由其他触发事件引起状态改变,状态改变后,系统就不再计算该布尔表达式了,对应的信号也将被丢弃。使能条件符的定义如下,:,:=,下图是一个输入符接使能条件符的例子,当信号“,msg,”,到达本状态机,状态机处,于,S,状态,如果,x Max,,则状态机进入迁移过程。否则系统将继续计算,x,的值,直到,xmax,或状态机因其他输入事件转入其他状态。,信号是可以带参数的,对于带参数的信号输入,在输入符中,除给出信号标识符外,还需给出具有相应数据类型的变量名来接收参数值,如果某一个参数对应位没有变量与之 对应,则该参数的值被丢弃,;,如果某一个参数没有赋值,则对应变量的值不确定。,图 接受信号参数的几个例子,图中,设信号”,msg,“,带,3,个参数,用,3,个变量来接收这,3,个参数的值。,在状态”,state1“,下,,3,个参数的值都被接收下来;,在状态“,state2”,下,只接收第,1,和第,3,个参数的值,第,2,个参数的值被丢弃;,在状态“,state3”,下,只接收第,1,和第,2,个参数的值,第,3,个参数的值被丢弃。,状态机消耗一条信号后,用,sender,函数可以得到发送该信号的进程实例的,pid,但如,果该信号来自环境,则,sender,函数返回的值将不同于系统内的任何一个,pid,值。,在输入符中除了可以包含信号外,还可以包含定时器名,表示该状态下收到定时器超时信号;还可以包括远端过程名;还可以包含异常输入。系统利用自发输入来表示异常输入。自发输入用包含关键字”,none“,的输入符来表示。,图 自发输入的例子,(,2,)优先输入,状态机的输入队列是按先进先出的原则排序的,当某条信号在某个状态下需要立即处理时,可以利用优先输入来达到此目的。,优先输入表示优先输入符中的信号一旦到达该状态机的输入队列,就被插到队首,优先被消耗。优先输入符的定义如下,:,:=,优先输入符与一般输入符一样,上接状态符,下接迁移域。但优先输人符下不接使能条件符。,下图是一个简单的优先输入的例子,在状态,S1,下,即使信号“,sig1,”先到达本进程,如果在本状态机还没有消耗“,sig1”,之前信号“,sig2”,到达,则本状态机将先消耗“,sig2”,信号,进入迁移过程,。,图 优先输入的例子,3.,连续信号,连续信号上接状态符,下接迁移域,其主体是一个布尔表达式,状态机在当前状态下,将计算该布尔表达式,若计算结果为“真”,则状态机被激活,执行迁移域的动作。若计算结果不为“真”,状态机将继续计算,直到结果为真或状态机状态因其他触发事件发生改变。,连续信号的符号与使能条件符相同。,图 连续信号的例子,当在同一状态下接多个连续信号符时,可以设置连续信号的优先级,数值越小,优先级越高。,也就是说,当多个连续信号的布尔表达式计算结果为“真”时,取优先级最高者作为触发事件。,若连续信号均未声明优先级,当多个连续信号的布尔表达式计算结果为“真时,系统将随机选取一个作为触发事件。,图 带优先级的连续信号的例子,图中,如果,X=5,和,Y=8,同时成立,则状态机进入迁移过程,.,4.,保存域,一般情况下,状态机在某一状态下只接收一部分信号,当状态机处于该状态,这部分信号之一到达该进程实例的输人队列队首时,该信号就会被消耗掉。如果到达的信号不属于这部分,则会被丢弃。,有时候某一信号在当前状态下不可处理,但在下一状态是有效信号,当该信号提前到达输入队列时,就需要将该信号保存下来,等状态机转移到下一状态时再处理。这就是“保存”的功能。,保存域用包含信号列表的保存符来表示,保存符的定义如下,:,:=,保存符上接状态符,下边不接任何图形符号。保存符中信号列表的形式与输人符中的基本相同。,主要区别,是,当信号带有参数时,保存符中不用给出变量名来接收参数。
展开阅读全文