《基于OPNET的通信网仿真》课件-第五章 进程域编程_第1页
《基于OPNET的通信网仿真》课件-第五章 进程域编程_第2页
《基于OPNET的通信网仿真》课件-第五章 进程域编程_第3页
《基于OPNET的通信网仿真》课件-第五章 进程域编程_第4页
《基于OPNET的通信网仿真》课件-第五章 进程域编程_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章进程域编程5.1

ProtoC编程方法5.2

多进程与多队列

在OPNET中,仿真的行为和过程是通过代码实现的,而代码的编写是在进程域中完成的。为了提高进程域建模效率,OPNET提供了有限状态机的编程架构和支持编程的核心函数库,构成了ProtoC编程方法。同时,OPNET提供了多进程、多队列的机制。在进程域中,通过对进程/队列模型的编程,可实现动态进程和子队列。5.1

ProtoC编程方法

ProtoC由有限状态机、OPNET核心函数、标准的C/C++构成,是一种高效描述离散事件系统行为的方法。一有限状态机

有限状态机(FiniteStateMachine,FSM)是由状态和转移构成的。所谓状态,是由单个或多个完成一个任务的进程所构成的进程载体,其可以处理事件或等待事件的触发。而转移表征状态之间的关系。当收到中断请求后,进程将根据状态转移条件发生状态的转移。1)状态状态由入口代码和出口代码组成:入口代码模拟进入状态时所进行的动作;出口代码模拟离开进程时状态所进行的动作。ProtoC的状态按是否阻塞,可分为强制状态和非强制状态;按是否进程的首个状态可分为初始状态和非初始状态。非强制状态:每执行完入口代码后(仿真系统保存进程相关信息),非强制状态处于阻塞状态,等待新的激活。

强制状态:系统执行完强制状态的入口代码后就直接执行出口代码;执行完出口代码后,直接进入到条件转移的下一个状态。初始状态:是第一次调用进程的状态

进程的初始化可以由初始中断(在进程接口中的begsimintrpt属性中设置)引发;也可以由其他中断引发,如由数据包到达引起的流中断引发。如,由数据包到达引起的流中断引发。

初始状态的强制类型和初始化过程的中断方式在建模中相互结合,形成四种逻辑关系:初始状态为强制状态,初始中断启用

初始状态为强制状态,初始中断未启用初始状态为非强制状态,初始中断启用初始状态为非强制状态,初始中断未启用2)转移

转移描述从一个状态到另一个状态的过程和条件,其由源状态、目的状态、转移条件和转移执行代码四个组件组成。在源状态的转移条件满足时,将发生状态转移,运行转移执行代码并转移到目的状态。

一个原状态可以连接多条状态转移线,但相互之间必须是互斥的和互补的——在转移时刻仅能有一条状态转移线满足条件,否则将出现多个转移方向,在仿真运行中将发生异常;同时,必须能够找到满足条件的状态转移线,否则将不能转出,也将发生异常。用户在有限状态机建模中,需认真验证转移互斥和互补关系。为了防止不能转出,经常采用建立缺省状态转移线的方法(将转移条件设置为“default”)——在其他转移条件都不满足时,按缺省状态转移线方向转移到目的状态。二文件结构

ProtoC代码本质上是C代码,除由有限状态机的图形结构和状态的入口、出口代码生成外,还必须包含状态变量和临时变量的定义。根据编程需要,还可编写头块、函数块和外部文件等文件类型的代码。头块:相当于C语言中的头文件,通常用于文件包含、函数声明、全局变量的定义、转移条件及常数的宏定义等函数块:为在头块中声明的函数进行具体的定义。所定义的函数可作为转移执行代码,也可用于状态的代码中。外部文件:函数定义和全局变量定义除了放在头块,还可放在进程模型的外部文件中。三进程中的变量

ProtoC支持状态变量、临时变量和全局变量三种变量类型。状态变量(statevariable,SV):是在进程模型的同一对象中,被所有的状态所共有的变量类型。其作用域为为进程模型的对象,即进程的一个实例。临时变量(temporaryvariable,TV):不同于状态变量,临时变量是动态存贮,其变量值在进程阻塞和激活的过程中将不会被保留。

全局变量:为不同的模块、不同类型的多个进程存储共同信息。其用法与C\C++中的全局变量是一致的,只是数据类型做了扩展(可以是C预先定义或用户定义的数据类型,也可以是OPNET预先定义的数据类型)。需要注意的是,定义全局变量的进程不能对象化为多个实例。否则,由于每个实例对象的模型是相同的(具有相同的头文件),将出现重复定义全局变量的错误。

建模中的解决方法参看教材

四核心函数

在OPNET中,核心函数(KernelProcedure,KP)是仿真建模的应用编程接口(ApplicationProgramInterface,API),可被进程模型、收/发信机管道阶段以及C/C++函数调用。可按其功能对核心函数进行分类,将每一类函数视为核心函数的一个子集(将全部核心函数视为一个集合),如数据包子集、分布子集等。子集内的核心函数根据其具体实现的功能,又可以被进一步地分类。例如,数据包子集又被分为包的创建、传输、销毁等子子集。在OPNET中,核心函数的的一般命名形式为:op_函数子集名_函数功能()。以包子集的op_pk_create()为例,第一字段“op”表示该函数为一个核心函数,第二字段表示该函数属于包子集,第三字段表示该函数的函数功能(对应于子子集)是创建数据包。在OPNET中包含如下核心函数的子集:动画(animation)分布(distribution)外部系统(externalsystem)事件(event)数据包(packet)数据流(stream)标识(identification)接口控制信息(ICI)中断(interrupt)内部模型访问(internalmodelaccess)程序(programming)进程(process)队列(queue)子队列(subqueue)分割与封装(segmentationandReassembly)仿真(simulation)统计(statistic)无线(radio)表格(table)传输(transmissiondata)拓扑(topology)数值矢量(valuevector)各类核心函数的应用方法和代码实例参看教材五程序调试方法在OPNET中,程序调试主要是通过仿真调试器进行的。仿真调试器(ODB)是仿真核心固有的一个组成部分,可为用户提供分析程序运行的环境。用户可以通过ODB交互地控制仿真,并获取事件和对象的信息。ODB的调试机制

ODB支持断点、跟踪、映射等多种命令,可通过在ODB窗口输入help命令查看命令的分类在ODB调试过程中,最有效的调试手段是断点(stop)和跟踪(trace):断点:ODB执行期间有“开通”和“闭合”两个状态,而状态的闭合就是由断点引发的

跟踪:反应仿真内核对事件调用的过程,体现仿真中进程执行的逻辑关系。

应当指出,断点和跟踪主要是针对函数、进程等仿真总体逻辑的;而在调试过程中往往需要深入到变量的微观层面,去发现和解决问题。OPNET提供了诊断块(DB)和OPNET\VC联调两种观察变量的方式,其中:前者只能用于状态变量的观察;而后者可应用于所有的变量类型。诊断块OPNET与VC的联合调试

两种变量观察方式的应用方法和代码实例参看教材5.2

多进程与多队列

一动态进程机制

在仿真中,进程经常被设计为执行一系列的复杂任务,如分多阶段处理信息、管理多个队列、同时与多个终端通信等。如果采用单一进程结构,该进程就会变得十分复杂。为了提高设计的模块化,减小复杂性,有必要采用动态进程方法。动态进程是可以在仿真过程中动态创建、销毁的进程。不同于根进程(由仿真核心创建,不能动态销毁),动态进程由用户在父进程中创建,并可在模块中动态销毁。子进程是由用户在父进程中创建的:1、建立子进程模型2、在父进程中声明子进程。3、在父进程中调用进程类核心函数op_pro_create(),创建子进程。

子进程被创建后即被挂起。子进程的初始化通常要通过父进程调用op_pro_invoke(),对其唤醒(invoke)来完成。应当注意,对于设置初始中断的根进程,其初始化是在仿真初始时刻进行的。而子进程的初始化需要父进程的唤醒;该初始化不是由初始中断产生的,而被视作仿真过程中的一般事件。

子进程初始化后,可通过进程导向(processsteering)机制,对其进行操作。其中,又伴随着子进程的内存共享问题。1)内存共享机制

多进程间的协同工作需要在进程间传递参数。参数传递具有状态变量和共享内存两种方式。

调用进程类op_pro_svar_get(),可以获取指向特定进程中状态变量的指针,从而实现基于状态变量的参数传递。而基于共享内存的参数传递可通过模块、父子、参数三种方法实现:模块内存(modulememory)父子内存(parent_to_childmemory)

参数内存(argumentmemory)

应用方法和代码实例参看教材2)进程导向机制手动导向(manualsteering)常规导向(normalsteering)中断类型注册导向(type-basedsteering)流端口注册导向(port-basedsteering)。应用方法和代码实例参看教材

二子队列机制

队列仅能应用于队列模块中,一个队列模块至少拥有且仅能拥有一个队列对象,该对象是系统的内建对象。一个队列对象至少拥有一个(可拥有多个)子队列对象,子队列是队列对象的子对象。对数据包的具体操作(如插入、访问、删除等)通常是通过子队列实现的,而队列可看做是子队列的集合。

用户可以控制进程模型执行的队列,从而可以通过定义队列的访问和管理方式对任何排队协议进行建模。用户也可以根据建模队列的特征

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论