(完整版)3OPNETModeler进程建模课件.ppt

上传人(卖家):三亚风情 文档编号:3422215 上传时间:2022-08-29 格式:PPT 页数:168 大小:13.35MB
下载 相关 举报
(完整版)3OPNETModeler进程建模课件.ppt_第1页
第1页 / 共168页
(完整版)3OPNETModeler进程建模课件.ppt_第2页
第2页 / 共168页
(完整版)3OPNETModeler进程建模课件.ppt_第3页
第3页 / 共168页
(完整版)3OPNETModeler进程建模课件.ppt_第4页
第4页 / 共168页
(完整版)3OPNETModeler进程建模课件.ppt_第5页
第5页 / 共168页
点击查看更多>>
资源描述

1、第三章 进程建模方法2012年11月内容提要 引言 进程建模方法举例(实验1)动态进程(实验2、3)ODB进程调试(实验4)总结引言什么是进程建模方法?进程建模方法(Process Modeling Methodology,PMM)在OPNET Modeler中创建进程的一套系统化的方法 最快、最高效的开发手段 获得一致的结果 对于大型模型的建模不可或缺OPNET开发环境进程创建进程模型是进程模型是自定义仿真自定义仿真开发的核心!开发的核心!方式的对比进程模型的动态性初学者应理初学者应理解红色状态,解红色状态,因为他们非因为他们非常重要!常重要!状态、事件和行为动机 防止用户落入常见的陷阱中

2、帮助用户尽快走出空白状态l 避免“我应该从哪里下手?”揭示模型内部隐含的关联l 避免:“我猜想会发生XXX。”避免使自己陷入困境PMM是通往成是通往成功开发进程模功开发进程模型的金钥匙!型的金钥匙!创建进程模型的步骤 获得协议、标准文档 使用PMM进行进程模型设计 审查设计 在OPNET中实现进程创模方法的步骤 前4个阶段:设计l 第1阶段:上下文定义l 第2阶段:进程级分解l 第3阶段:为每个进程枚举事件l 第4阶段:为每个进程填写事件响应表 这是一个返复迭代的过程,也是PMM的精髓!最终阶段:在OPNET中实现l 第5阶段:为每个进程制定进程的行为进程建模方法举例进程建模方法例1:停等协议

3、 位于发送方的链路层协议 基本功能:在误码信道上提供可靠的通信 接收来自上层的帧,并发送到物理层进程建模方法例1:协议需求进程建模方法例1:协议需求(续)接收来自上层的帧 向物理层发送帧 收到物理层的发送完成确认后,再发送下一帧 在等待确认期间,将收到的任何帧都缓存在队列中 等待确认有一定的时间限制,如果超时,那么重发等待确认的帧 链路可能失效,在链路恢复之前,不能够发送或重发帧第1阶段:上下文定义 考查整个系统 第1步:定义相互独立的模块 第2步:选择模块之间的通信机制 第3步:为系统和每个模块开发图表第1阶段:上下文定义(续)上层协议实体SWaRe协议物理层实体需要发送的帧发送帧确认第2阶

4、段:进程级分解 第1步:决定合适的进程模型分解技术l 单进程模型l 复合(父子)进程模型 第2步:对复合进程模型,确定每个进程各自的任务和功能 第3步:对复合进程模型,确定根进程,以及动态创建子进程的条件第2阶段:进程级分解(续)此处采用单进程模型第3阶段:事件枚举 第1步:为每个进程定义逻辑事件 第2步:选择事件的实现方法SWaRe协议确认超时需要发送的帧确认链路失效链路恢复第3阶段:事件枚举(续)事件名称事件名称事件描述事件描述中断类型中断类型第3阶段:事件枚举(续)事件名称事件名称事件描述事件描述中断类型中断类型帧到达上层递交帧STRM超时重传时钟超时SELF收到确认收到帧的确认STRM

5、链路失效链路失效FAILURE链路恢复链路恢复RECOVERY启动进程启动BEGSIM第4阶段:填写事件响应表 事件响应表描述了进程模型在不同状态下对各种事件的响应行为 事件与行为是由协议标准规定的 有哪些转换条件?有哪些状态?状态状态事件事件转换条件转换条件行为行为目的状态目的状态转换条件第4阶段:发掘状态 一所状态l 表示进程中的一个阻塞点l 与特定事件的发生相对应l 对各种事件进行适当的响应l 与其他所有状态不相容 问题:l 在当前阶段,通常还不知道所有的状态 方案:l 从初始状态出发,发掘所有的状态第4阶段:迭代从初始状态出发 第1步:选择一个状态 第2步:选择一个事件 第3步:选择一

6、个转换条件 第4步:确定响应行为 第5步:确定目标状态 重复第3步:遍历所有转换条件 重复第2步:遍历所有事件 重复第1步:获得所有状态第4阶段:初始状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态初始化初始化帧到达超时收到确认链路失效链路恢复启动使用使用“BEGSIM”中断,中断,可以防止初始状态处理可以防止初始状态处理任何其他类型的任何其他类型的中断!中断!第4阶段:初始状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态初始化初始化帧到达超时收到确认链路失效链路恢复启动无无空闲空闲发现一个新状态!发现一个新状态!第4阶段:空闲状态状态状态事件事件转换条件转换条件行为行

7、为目的状态目的状态空闲空闲帧到达超时收到确认链路失效链路恢复启动第4阶段:空闲状态空空事件事件转换条件转换条件行为行为目的状态目的状态空闲空闲帧到达无存储帧发送帧设置时钟等待确认等待确认链路失效无无链路失效链路失效行为的描述可行为的描述可以细化到以细化到KP!第4阶段:等待确认状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认等待确认帧到达超时收到确认链路失效链路恢复启动第4阶段:等待确认状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认等待确认帧到达无帧排队等待确认等待确认确认超时收到确认链路失效第4阶段:等待确认状态状态状态事件事件转换条件转换条件行为行

8、为目的状态目的状态等待确认等待确认帧到达无帧排队等待确认等待确认确认超时无复制帧发送帧设置时钟等待确认等待确认收到确认链路失效第4阶段:等待确认状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认等待确认帧到达无帧排队等待确认等待确认确认超时无复制帧发送帧设置时钟等待确认等待确认收到确认队列空队列非空链路失效第4阶段:等待确认状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认等待确认帧到达无帧排队等待确认等待确认确认超时无复制帧发送帧设置时钟等待确认等待确认收到确认队列空取消时钟销毁帧拷贝空闲空闲队列非空链路失效第4阶段:等待确认状态状态状态事件事件转换条件转

9、换条件行为行为目的状态目的状态等待确认等待确认帧到达无帧排队等待确认等待确认确认超时无复制帧发送帧设置时钟等待确认等待确认收到确认队列空取消时钟销毁帧拷贝空闲空闲队列非空取消时钟销毁帧拷贝取出队首帧复制帧发送帧设置时钟等待确认等待确认链路失效第4阶段:等待确认状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认等待确认帧到达无帧排队等待确认等待确认确认超时无复制帧发送帧设置时钟等待确认等待确认收到确认队列空取消时钟销毁帧拷贝空闲空闲队列非空取消时钟销毁帧拷贝取出队首帧复制帧发送帧设置时钟等待确认等待确认链路失效无无等待确认且等待确认且链路失效链路失效第4阶段:链路失效状态状态状

10、态事件事件转换条件转换条件行为行为目的状态目的状态链路失效链路失效帧到达超时收到确认链路失效链路恢复启动第4阶段:链路失效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态链路失效链路失效帧到达无帧排队链路失效链路失效链路恢复第4阶段:链路失效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态链路失效链路失效帧到达无帧排队链路失效链路失效链路恢复队列空队列非空第4阶段:链路失效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态链路失效链路失效帧到达无帧排队链路失效链路失效链路恢复队列空无空闲空闲队列非空第4阶段:链路失效状态状态状态事件事件转换条件转换条件行为行为

11、目的状态目的状态链路失效链路失效帧到达无帧排队链路失效链路失效链路恢复队列空无空闲空闲队列非空取出队首帧复制帧发送帧设置时钟等待确认等待确认第4阶段:等待确认且链路失效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认且等待确认且链路失效链路失效帧到达超时收到确认链路失效链路恢复启动模型的设计过模型的设计过程有助于实际程有助于实际系统的设计!系统的设计!第4阶段:等待确认且链路失效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认且等待确认且链路失效链路失效帧到达无帧排队等待确认且等待确认且链路失效链路失效确认超时无设重发标志等待确认且等待确认且链路失效链路

12、失效链路恢复第4阶段:等待确认且链路失效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认且等待确认且链路失效链路失效帧到达无帧排队等待确认且等待确认且链路失效链路失效确认超时无设重发标志等待确认且等待确认且链路失效链路失效链路恢复有重发标志无重发标志第4阶段:等待确认且链路失效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认且等待确认且链路失效链路失效帧到达无帧排队等待确认且等待确认且链路失效链路失效确认超时无设重发标志等待确认且等待确认且链路失效链路失效链路恢复有重发标志消重发标志复制帧发送帧设置时钟等待确认等待确认无重发标志第4阶段:等待确认且链路失

13、效状态状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认且等待确认且链路失效链路失效帧到达无帧排队等待确认且等待确认且链路失效链路失效确认超时无设重发标志等待确认且等待确认且链路失效链路失效链路恢复有重发标志消重发标志复制帧发送帧设置时钟等待确认等待确认无重发标志无等待确认等待确认第5阶段:制定进程行为 第1步:根据协议标准,检查进程的行为逻辑,确保功能完整、无误 第2步:在OPNET中实现状态机 第3步:编写代码第5阶段:第2步实现状态机 状态转换时的行为可以在3处执行l 离开当前状态时:出口指令块l 从一个状态转换到另一个状态期间:转换指令l 进入新状态时:入口指令块第5阶段

14、:第2步实现状态机(续)转换指令对应于事件的响应行为 建议将所有行为放置在转换指令中 出口指令块:离开某状态时,转换指令中共通的部分 入口指令块:进入某状态时,转换指令中共通的部分第5阶段:第2步实现状态机(续)强制状态仅用于hold住代码非强制状态是真非强制状态是真正的系统状态!正的系统状态!强制状态仅为编强制状态仅为编码方便而设!码方便而设!第5阶段:第2步实现状态机(续)状态状态事件事件转换条件转换条件行为行为目的状态目的状态初始化初始化启动无无空闲空闲第5阶段:第2步实现状态机(续)状态状态事件事件转换条件转换条件行为行为目的状态目的状态空闲空闲帧到达无存储帧发送帧设置时钟等待确认等待

15、确认链路失效无无链路失效链路失效第5阶段:第2步实现状态机(续)状态状态事件事件转换条件转换条件行为行为目的状态目的状态等待确认等待确认帧到达无帧排队等待确认等待确认确认超时无复制帧发送帧设置时钟等待确认等待确认收到确认队列空取消时钟销毁帧拷贝空闲空闲队列非空取消时钟销毁帧拷贝取出队首帧复制帧发送帧设置时钟等待确认等待确认链路失效无无等待确认且链路失效等待确认且链路失效第5阶段:第2步实现状态机(续)状态状态事件事件转换条件转换条件行为行为目的状态目的状态链路失效链路失效帧到达无帧排队链路失效链路失效链路恢复队列空无空闲空闲队列非空取出队首帧复制帧发送帧设置时钟等待确认等待确认等待确认且链路失

16、效等待确认且链路失效帧到达无帧排队等待确认且链路失效等待确认且链路失效确认超时无设重发标志等待确认且链路失效等待确认且链路失效链路恢复有重发标志消重发标志复制帧发送帧设置时钟等待确认等待确认无重发标志无等待确认等待确认第5阶段:第2步实现状态机(续)另一种方式:使用强制状态第5阶段:第3步编写代码 在“HB”中定义宏 允许begsim中断 定义状态变量 定义函数第5阶段:第3步编写代码(续)在“FB”中编写函数第5阶段:第3步编写代码(续)进程建模方法小结 什么是进程建模方法?l 在OPNET Modeler中创建进程的一套系统化的方法l 最快、最高效的开发手段l 防止落入常见的陷阱中 进程建

17、模方法的优点?为什么使用进程建模方法?l 避免在模型设计过程中犹豫不决l 结合OPNET进程编辑器,减少协议实现过程花费的时间l 能够减少代码行数l 设计进程模型的统一方法l 容易实现协议行为的可视化实验1:学习使用PMM进行进程建模目标:实现1CSMA协议时间:45分钟内容提要 运用前面所学的建模方法,实现自定义的1CSMA协议,要求l 接收来自业务源的报文l 以广播方式向网络发送报文l 当信道空闲时,才能向信道发送报文l 当报文到达时,如果信道不空闲,那么将报文排队(FIFO)l 当信道变空闲时,先等待一段随机时延(backoff),再发送报文l 在发送一个报文后,先等待一段随机时延(ba

18、ckoff),再发送下一报文提示 使用统计线(statistic wire)汇报信道的忙(1)、闲(0)状态。l 以信道变闲为事件,触发一个中断(统计线中断)。l 中断触发条件的设置 上升沿(信道由闲变忙)下降沿(信道由忙变闲)l 信道的忙闲状况可以通过读取统计线来获得(非中断)。包含一个随机后退(backoff)的时钟,将触发一个超时中断(自中断)。不考虑链路的失效和恢复。5个阶段 第1阶段:上下文定义 第2阶段:进程级分解 第3阶段:为每个进程枚举事件 第4阶段:为每个进程填写事件响应表 第5阶段:为每个进程制定进程的行为第1阶段:上下文定义 画出协议的上下文图表。第2阶段:进程级分解1.

19、确定适合于系统的进程分解技术。a.单进程b.复合进程2.对复合进程,确定每个进程的功能。3.对复合进程,确定根进程以及动态创建各子进程的条件。第3阶段:事件权举1.为每个进程定义逻辑事件。2.选择每种事件的实现方式。3.填写下表。事件名称事件名称事件描述事件描述中断类型中断类型第4阶段:填写事件响应表 从初始状态出发1.第1步:选择一个状态2.第2步:选择一个事件3.第3步:选择一个转换条件4.第4步:确定响应行为5.第5步:确定目标状态6.重复第3步:遍历所有转换条件7.重复第2步:遍历所有事件8.重复第1步:获得所有状态第4阶段:填写事件响应表 填写下表状态状态事件事件转换条件转换条件响应

20、行为响应行为目标状态目标状态第5阶段:制定进程的行为1.检查进程的行为逻辑是否符合协议标准。2.(可选)手工画出状态转换图。3.在OPNET中实现状态转换图。4.(家庭作业)编写代码,并编译进程模型。l可以参考“csma_test”进程模型。第1阶段:上下文定义 画出协议的上下文图表。业务源CSMA协议物理介质帧到达发送帧信道变闲第2阶段:进程级分解1.采用单进程。第3阶段:事件权举事件名称事件名称事件描述事件描述中断类型中断类型启动协议初始化BEGSIM帧到达上层递交一帧STRM信道变闲信道由忙变闲(接收机)STAT后退结束随机后退时钟超时SELF注意,不需要信注意,不需要信道变忙的事件!道

21、变忙的事件!第3阶段:事件权举事件名称事件名称事件描述事件描述中断类型中断类型BEGSIM协议初始化BEGSIMFRAME_ARRIVAL上层递交一帧STRMMEDIUM_FREE信道由忙变闲(接收机)STATBACKOFF_OVER随机后退时钟超时SELF第4阶段:填写事件响应表状态状态事件事件转换条件转换条件响应行为响应行为目标状态目标状态初始初始启动无无等待等待等待等待帧到达信道闲发送帧后退后退信道忙帧排队信道忙信道忙注意,信道变闲注意,信道变闲是事件,信道的是事件,信道的忙闲状况是通过忙闲状况是通过统计线读取的值!统计线读取的值!注意,多个帧发注意,多个帧发送时,将自动被送时,将自动被

22、缓存,并依次发缓存,并依次发出!出!第4阶段:填写事件响应表状态状态事件事件转换条件转换条件响应行为响应行为目标状态目标状态初始初始启动无无等待等待等待等待帧到达信道闲发送帧后退后退信道忙帧排队信道忙信道忙信道忙信道忙帧到达无帧排队信道忙信道忙信道变闲无设置后退时钟后退后退第4阶段:填写事件响应表状态状态事件事件转换条件转换条件响应行为响应行为目标状态目标状态初始初始启动无无等待等待等待等待帧到达信道闲发送帧后退后退信道忙帧排队信道忙信道忙信道忙信道忙帧到达无帧排队信道忙信道忙信道变闲无设置后退时钟后退后退后退后退帧到达无帧排队后退后退后退结束信道忙无信道忙信道忙信道闲队列长1取出队首帧发送帧

23、等待等待信道闲队列长1取出队首帧发送帧后退后退第4阶段:填写事件响应表状态状态事件事件转换条件转换条件响应行为响应行为目标状态目标状态InitBEGSIM无无IdleIdleFRAME_ARRIVAL!MediumBusysend_frame()BackoffMediumBusyenqueue()Medium BusyMedium BusyFRAME_ARRIVALenqueue()Medium BusyMEDIUM_FREEbegin_backoff()BackoffBackoffFRAME_ARRIVALenqueue()BackoffBACKOFF_OVERMediumBusyMediu

24、m Busy!MediumBusy&QueueSizeIsOnedequeue_and_send()IdleMediumFree&!QueueSizeIsOnedequeue_and_send()Backoff第5阶段:在OPNET中实现状态机第5阶段:编写代码“HB”指令块动态进程内容提要 引言 配置l 声明子进程l 子进程的模型属性 进程的生命期l 创建l 调用l 销毁引言 什么是动态进程?l 可以在仿真运行过程中由其他进程动态创建和销毁的进程 什么时候使用动态进程?l 减少模块复杂度 当一个模块需要同时执行不同的任务时 当需要为信息提供多种不同的处理方式时l 可变数量的会话交互 当一个模

25、块需要同时管理多个队列时 当一个服务器需要同时与多个客户进行通信时例1:802.11e WLAN wlan_dispatch进程根据HCF Parameter属性设置,动态创建wlan_mac或wlan_mac_hcf进程。例2:ZigBee 802_15_4_mac进程创建一个csma/ca子进程,该子进程专门负责帧的发送。例3:TCP:tcp_conn_v3 tcp_manager_v3进程在打开新的TCP连接时创建一个tcp_conn_v3子进程,并在关闭连接时将其销毁。动机 模块化的组织(分解)l 每一个进程执行一项特定的任务l 设计多个“简单”进程模型,而非一个“复杂”进程模型l 对

26、于相同的输入/出需求,子进程可以相互替换l 是可扩展建模技术的核心概念 模仿现实系统的设计理念 便于创建和维护术语 根进程l 节点模型中,每个模块所包含的唯一的初始进程。子进程l 在仿真期间创建的进程。l 可以由初始进程或其他子进程创建。父进程l 一个子进程的创建者。l 根进程没有父进程。进程组l 一个模块中包含的所有进程。进程簇的示例一个进程组都运行在同一模块中层级数量没有限制,通常为1级或2级每一层中,子进程数量不受限制在每一层中,子进程的模型可以不同OPNET配置:声明子进程 创建子进程模型 在进程编辑器中打开父进程 菜单File Declare Child Process Models

27、 勾选子进程模型子进程的模型属性 父进程和子进程的模型属性将融合在一块(在Edit Attributes对话框中查看)子进程属性以子进程模型名为前缀 在同一个模块中的所有的子进程模型共享一套属性及属性值 子进程模型属性一般很少使用l 通常父进程在创建子进程时传递一个状态指针进程的生命期 进程创建 进程调用 进程销毁进程创建 op_pro_create(model_name,ptc_mem_ptr)l 根据给定进程模型,创建一个新的进程对象,并与所属模块关联l 允许父进程向子进程传递一个共享内存指针l 返回子进程的句柄没有没有“.pr.m”进程创建(续)子进程可文访问所属模块的所有资源l 子队列

28、(subqueues)l 报文流l 统计线l 统计量声明 运行时效率l 一种逻辑的仿真部件 不是一个独立的OS进程或线程l 子进程的创建开销与10个空事件的处理相当l 对仿真的性能影响很少,却能提供强大的灵活性与模块化进程调用 op_pro_invoke(pro_handle,arg_mem_ptr)l 在当前模块、当前事件的环境中,调用一个子进程l 被调用的子进程认为自己就像是在响应当前事件l 附加信息可以通过参数进行传递l 父进程被阻塞,直到函数返回 类似于一个C函数调用(调用子进程代码来响应当前事件)调用者阻塞,直至被调用者结束执行 被调用的子进程可以再调用其他子进程进程调用(续)对于被

29、调用的子进程,本次调用就如同一次中断触发l 从非强制状态开始执行l 直至转换至下一个非强制状态l 程序执行的控制权再回到父进程 只能调用属于同一模块的子进程 不能够循环(递归)调用l 仿真内核将报错进程销毁 op_pro_destroy(pro_handle)op_pro_destroy_options(pro_handle,options)l OPC_PRO_DESTROY_OPT_KEEP_EVENTS 或l OPC_PRO_DESTROY_OPT_NONE 进程销毁l 删除动态创建的子进程l 调用“TB”指令块 清理子进程动态分配的内存 销毁该子进程创建的其他子进程 根进程的“TB”永远

30、不会执行进程销毁(续)子进程可以将自身销毁 根进程不能被销毁 当前子进程调用栈上的任何进程都不能被销毁实验2:使用子进程目标:学习使用子进程时间:25分钟内容提要 一个模块具有多个输入报文流。开始时,根进程监视所有报文流。修改后,根进程将创建子进程,并在报文从不同报文流到达时,调用相应的子进程处理。仿真结束时,销毁子进程。观察根进程1.打开OPNET Modeler。2.打开“dynproc_new”工程。a.菜单File Openb.选择“dynproc_new”,按“OK”c.选择“root_process”场景3.运行仿真。观察根进程(续)4.观察仿真结果。观察根进程(续)从仿真进度对话

31、框中,按“Simulation Console”,打开仿真控制台 查看位于末尾的内容。根进程监视所有的报文流,记录从各报文流收到的报文数量。并在仿真结束时(ENDSIM中断),通过op_sim_message()核心函数将结果打印到控制台。观察根进程(续)5.关闭仿真进程对话框。6.双击“Node”节点,查看节点模型。7.在工程编辑器中,关闭仿真序列(Simulation Sequence)对话框。增加子进程 在本节中,将要向进程模型增加代码。l 创建子进程来处理由各报文流输入的报文。l 当报文到达时,调用对应的子进程。l 在仿真结束时,销毁创建的子进程。创建子进程1.在根进程初始化时,创建子

32、进程。a.打开“dynproc_root”进程模型。i.切换到节点模型ii.双击“dp”模块b.双击“Init”状态上半部分,打开入口指令块。c.在“#1A”注释行下面,加入代码,创建类型为“dynproc_child”的子进程。d.保存修改。调用子进程2.在报文到达时,调用子进程。a.打开“Dispatch”状态的入口指令块。b.在“#1B”与“#1C”注释行之间,加入代码,调用子进程。c.保存修改。销毁子进程3.在仿真结束时,销毁子进程。a.打开“FB”指令块。b.在dynproc_root_cleanup()函数的“#1D”注释行之后,加入代码,销毁子进程。c.保存修改。声明子进程4.声

33、明根进程需要使用的子进程。a.菜单File Declare Child Process Models。b.勾选“dynproc_child”。c.按“OK”。5.菜单Compile Compile Code,编译进程。6.回到工程编辑器。7.切换至“child_process”场景a.菜单Scenario Switch To Scenario child_processs运行仿真8.运行仿真。9.观察仿真结果后,关闭仿真进度对话框。实验2小结 创建子进程来处理由各报文流输入的报文。当报文到达时,调用对应的子进程。在仿真结束时,销毁创建的子进程。中断定向 当一个模块受到中断触发时,该模块中的哪个

34、进程获得程序执行的控制权?4种机制l 手工定向l 固有定向l 基于类型的定向l 基于端口的定向手工定向 默认情况下,根进程将获得程序执行的控制权 然后,根进程调用相应的子进程 根进程将阻塞,直到子进程返回固有定向 op_intrpt_schedule_self(time,code)仿真内核自动调用正确的子进程固有定向(续)op_intrpt_schedule_process(pro_handle,time,code)仿真内核自动调用正确的子进程基于类型的定向 op_intrpt_type_register(type,pro_handle)将指定中断类型定向到指定进程基于端口的定向 op_int

35、rpt_port_register(type,index,pro_handle)用于报文流和统计线 优先于基于类型的定向注销中断定向 基于类型的定向l 将指定类型定向至根进程(或其他进程)基于端口的定向l op_intrpt_port_deregister(port_type,port_index)l 调用op_intrpt_port_register(type,index,pro_handle)函数,将指定端口定向至其他进程直接与间接调用 采用op_prp_invoker(pro_handle,invmode_ptr)例1:l 基于端口的定向l 返回OPC_PROINV_DIRECT直接与间

36、接调用(续)例2:l 手工定向:根进程在收到报文后调用子进程l 返回OPC_PROINV_INDIRECT进程间通信 进程间共享内存l 模块级共享内存l 父子进程间共享内存 参数传递模块级共享内存 设置:op_pro_modmem_install(mem_ptr)访问:op_pro_modmem_access()父子进程共享内存 设置:op_pro_create(model_name,ptc_mem_ptr)访问:op_pro_parmem_access()参数传递 设置:op_pro_invoke(pro_handle,argmem_ptr)访问:op_pro_argmem_access()

37、其他数据共享方法 通用的方法(并非只针对子进程)获得其他进程的状态变量l op_ima_obj_svar_get(Objid,Svar_Name)l op_pro_svar_get(pro_handle,Svar_Name)全局注册表l oms_pr_process_register()l oms_pr_attr_get()l oms_pr_process_discover()l oms_pr_attr_get()仅仅针对根进程针对根进程可能很慢可能很慢其他数据共享方法 接口控制信息(ICIs)l op_ici_create()l op_ici_attr_set()l op_ici_attr_

38、get()全局变局l“HB”指令块中定义变量l 头文件中定义变量动态进程小结 一个模块可以包含多个进程 提供可扩展性和模块化 进程可以在运行时动态创建和销毁 中断可以被定向给指定的进程 进程间可以采用共享内存通信实验3:中断定向与进程间通信目标:基于端口的定向与模块级共享时间:15分钟内容提要 在仿真设计中加入中断定向与进程间通信的机制 采用基于端口的定向l 根进程不需要处理到达的报文,报文全都交给对应的子进程处理l 中断类型都是流中断,因而基于类型的定向是不足以实现报文处理分工内容提要(续)模块级内存共享l 子进程可以看作连接管理器l 子进程将与连接相关的统计量报告给根进程l 根进程通过模块

39、型共享内存,将统计量句柄共享给子进程基于端口的中断定向1.回到“dynproc_root”进程模型。2.打开“Init”状态入口指令块。3.在“#2A”注释行之后,加入代码,实现基于端口的中断定向4.保存修改。5.编译进程模型。运行仿真6.回到“dynproc_new”工程编辑器,切换至“child_process”场景,运行仿真,并观察结果。7.关闭仿真进度对话框。设置模块级共享内存1.回到“dynproc_root”进程模型。2.打开“Init”状态入口指令块。3.在“#3A”注释行之后,加入代码,设置模块级共享内存:4.保存修改。5.编译进程模型。访问模块级共享内存6.打开“dynpro

40、c_child”进程模型。a.在进程编辑器中右击。b.在快捷菜单中,选择Child Processes dynproc_child。7.打开“Main”状态的入口指令块。8.在“#3C”注释行之后,加入代码,访向根进程共享的统计量句柄,写入统计量:9.保存修改。10.编译进程模型。11.回到“dynproc_new”工程编辑器。选择统计量12.选择统计量进行收集。a.右键“Node”节点,选择Choose Individual DES Statistics选择统计量(续)b.在结果选择对话框中,展开“Module Statistics”,展开“dp”,再展开“node”。c.勾选“Packet

41、_Size(Bits)”统计量进行收集。选择统计量(续)d.右击“Packet_Sizes(Bits)”,在快捷菜单中选择Change Collection Modee.修改统计量收集方式i.修改Capture Mode为bucketii.点选Every _ secondsiii.填入25(秒)f.按“OK”进行仿真13.运行仿真,并观察结果。a.在工程编辑器中右击,在快捷菜单中选择View Resultsb.在结果查看对话框中,勾选所有3个子进程的“Packet_Sizes(Bits)”统计量。c.按“Show”。设置模块级共享内存(续)14.比较面板中的绘图,理解子进程是如何使用根进程提供

42、的模块级共享内存来报告统计量的。实验3小结 基于报文流的输入编号,将报文指派给相应的子进程 根进程不处理任何报文,而将报文处理的工作全部交给子进程来完成,实现了模块化的设计。通过中断定向,使得中断触发时,直接由仿真内核调用应相的子进程。ODB进程调试在ODB(OPNET Debugger)中进行进程调试的步骤 定位进程 控制进程 跟踪进程 显示进程状态在ODB中定位进程:进程列表 promap 命令l 显示与指定模块关联的进程列表l 使用“promap all”命令显示当前所有进程的列表 使用ODB中的网络结构树型列表在ODB中定位进程:进程标签 进程标签(tag)l 为了区分同一个模块中的不

43、同进程l 采用op_pro_tag_set(pro_handle,tag_string)核心函数设置在ODB中控制进程:暂停进程 prostop 命令l 设置一个断点(breakpoint),使得指进程在受到任何中断(interrupt)触发时暂停(break)l 也可以在树型列表中,通过右击对应进程,选择Break On Any Event For This Process在ODB中控制进程:带标签的断点 op_prg_odb_bkpt(label)核心函数l 定义一个带标签的断点(breakpoint),使得指进程在ODB控制下中断(break)l 带标签的断点需要由ODB激活 prols

44、top 命令l 为指定进程激活所有携带对应标签的断点在ODB中跟踪进程:跟踪进程 protrace 命令l 为指定进程激活完整跟踪(full trace)l 也可以在树型列表中,通过右击对应进程,选择Break On Any Event For This Process在ODB中跟踪进程:带标签的跟踪 op_prg_odb_ltrace_active(label)核心函数l 判断ODB是否激活了指定的跟踪标签 proltrace 命令l 在ODB中为指定的进程激活指定的跟踪标签显示进程状态:执行诊断指令块 诊断指令块(Diagnostic Block)l 包含C/C+语句,将诊断信息输出到控制

45、台 prodiag 命令l 执行指定进程的诊断指令块 proldiag 命令l 执行指定进程的诊断指令块,并激活指定的跟踪标签(仅限于本次对诊断指令块的执行)l 进程的诊断指令块中使用op_prg_odb_ltrace_active(label)核心函数进行判断,控制输出结果实验4:调试动态进程目标:学习使用ODB调试时间:15分钟内容提要 学习使用ODB进行信真调试 观察子进程创建过程 观察子进程对报文的处理 观察子进程在处理完50个报文后的状态1.回到“dynproc_new”工程,切换到“child_process”场景。开启ODB2.配置仿真,开启ODB。a.展开“Execution”

46、b.选择“OPNET Debugger”c.勾选“Use OPNET Simulation Debugger(ODB)”d.按“Run”开启ODB(续)观察ODB调试窗口设置进程跟踪和断点3.果看递交给根进程“dynproc_root”的事件的相关信息。a.在树形列表中依次展开top Node dpb.此时,dp模块中仅有一个进程对象(根进程,类型为dynproc_root)。设置进程跟踪和断点(续)3.果看递交给根进程“dynproc_root”的事件的相关信息。a.在树形列表中依次展开top Node dp。设置进程跟踪和断点(续)b.此时,dp模块中仅有一个进程对象(根进程,类型为dyn

47、proc_root,Objid为0)。右击,选择“Trace This Process”和“Break On Any Events For This Process”。设置进程跟踪和断点(续)c.查看“Console”(控制台)选项卡。2.按“Continue”,继续仿真运行。仿真将在根进程受到第1个中断触发之前暂停。3.然后,按“Next”,单步执行当前事件。a.上拉滚动条,查看跟踪输出,观察子进程的创建过程。b.观察树形列表,模块中出现了3个新进程。为子进程设置断点c.右击第3个子进程,选择“Break On Any Events For This Process”,继续仿真运行。为子进程

48、设置跟踪4.仿真将在子进程受到第1个事件触发之前暂停。跟踪该子进程,然后单步执行该事件。a.右击子进程,选择“Trace This Process”b.按“Next”,观察子进程的初始化过程。注意子进程设置了进程标签后引起的变化。禁用断点与跟踪5.禁用所有的断点和跟踪。a.在窗口右下角,选择“ODB Breakpoints”选项卡,禁用所有的表项。b.在“ODB Traces”选项卡中做同样的设置。激活带标签的断点6.在进程模型中,已经设置了一个带标签的断点“dynproc_50”,在进程处理了50个报文时生效。现在激活该断点。a.切换到“Console”选项卡。b.在ODB命令栏中输入:pr

49、olstop 6“dynproc_50”,回车。c.继续仿真运行。d.仿真将在子进程运行到该带标签断点时暂停。执行诊断指令块7.现在,调用子进程的诊断指令块。a.在ODB命令行中输入:prodiag 6,回车。b.观察诊数指令块产生的输出。8.按“Continue”,继续仿真运行,直至仿真结束。实验4小结 学习了基本ODB的功能与命令。l 如何确定根进程、子进程的进程模型、对象?l 如何使ODB在进程受事件触发或运行到带标签的断点时,暂停仿真?l 如何利用ODB跟踪进程在一次事件中的执行过程。l 如何在ODB中调用进程的诊断指令块。动态进程小结 一个模块可以包含多个进程 提供可扩展性和模块化 子进程可以在运行时被创建和销毁 中断在默认情况下定向给根进程,但可以被重定向给子进程 进程间可以通过共享内存进行通信 通过ODB,可以跟踪调试进程的执行

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文((完整版)3OPNETModeler进程建模课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|