nullOPNET的仿真原理OPNET的仿真原理唐伟
电子科技大学通信抗干扰技术国家级重点实验室
四川省成都市高新西区西源大道2006号,611731
电话:13540781734
邮箱:gauchyler@uestc.edu.cn
主页:http://staff.uestc.edu.cn/tangwei
*说明说明对象:使用OPNET进行网络仿真,准备进行代码级开发,实现自制
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
/算法的同学。
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
:自底向上。
从最底层的仿真内核开始,逐渐扩展到仿真系统的附加功能。
掌握离散事件仿真系统内核原理,深入理解有限状态机方法,从最朴实、最优美的本质出发,能够避免学生迷失在仿真系统所提供的为数众多的功能外壳与建模形式上。说明说明本次课的目的:
理解状态机的概念,并掌握通用实现方法。
理解离散事件仿真器的原理与架构。
补强对C语言的熟悉。
补强对基本数据结构的理解与实现。
了解Visual Studio 2010的使用方法。内容提要内容提要离散事件仿真
有限状态机
简易仿真器
一、离散事件仿真一、离散事件仿真仿真技术
什么叫仿真?
仿真的分类
网络仿真
主流网络仿真系统
离散事件仿真1)什么叫仿真?1)什么叫仿真?仿真就是采用模型来模拟真实情况。
模型是系统、过程或现象的物理的、数学的或其他逻辑的表达。2)仿真的分类2)仿真的分类根据被仿真对象的性质
连续系统仿真
离散事件系统仿真
根据功能用途
工程仿真
训练仿真3)网络仿真3)网络仿真网络仿真的产生背景
随着网络结构和规模的复杂化、网络应用的多样化,依靠经验进行网络
规划
污水管网监理规划下载职业规划大学生职业规划个人职业规划职业规划论文
和设计或直接的设备研发及协议开发成本过大,理论计算也难以实现,不能适应网络的发展。网络仿真技术正是用来反映和预测网络性能的科学工具。
网络仿真的意义
有效提高网络规划和设计的可靠性和准确性,明显地降低网络投资风险,减少投资浪费。4)主流网络仿真系统4)主流网络仿真系统NS
NS是由UC Berkely开发的。采用OTCL与C++混合实现,免费开源的离散事件仿真器。
OPNET
OPNET公司起源于MIT,成立于1986年,其网络仿真器包括OPNET Modeler、ITGuru、SPGuru、WDMGuru、ODK等一系列产品,都属于离散事件仿真器。4)主流网络仿真系统4)主流网络仿真系统Qualnet
由Scalable Network Technology公司提供,基于免费开源的GloMoSim开发出来的商业离散事件网络仿真器。
OMNEST
在免费开源的OMNeT++的基础上开发的商业版本,是基于组件的离散事件网络仿真器。2、离散事件仿真概念
由事件驱动的非连续时间仿真。
基本构成
事件队列
事件队列处理器
事件处理器事件0的处理器事件队列处理器2、离散事件仿真事件0事件队列取出调用事件n+1预约插入(按时间先后)内容提要内容提要离散事件仿真
有限状态机
简易仿真器
二、有限状态机二、有限状态机概念
类型
要素
特点
流程
实现(伪码)
与离散事件仿真的关系1、概念1、概念有限状态机(FSM)是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。e01/a01e10/a10e12/a12e02/a02输入(事件)输出(动作)状态转换线状态转换线S0S1S21、概念1、概念举例:
所有的数字电路(CPU、存储器、时钟)
所有的计算机程序(程序是定义在一个数据集上的执行规则)
数据集的所有不同取值构成一个有限的状态集
函数调用与返回(事件)触发程序执行
屏幕打印、播放音频提示等(输出)
修改数据集的值(转换状态)2、类型2、类型1) Moore型:输出只与当前状态相关,而与输入无关(每个状态只能输出一条状态转换线)。2、类型2、类型2) Mealy型:输出与当前状态和输入相关。
3、要素(数学模型)3、要素(数学模型)六元组 :
输入集 :有限集合
输出集 :有限集合
状态集 :有限集合
初始状态 :状态
状态转换函数 :函数
输出函数 :函数4、特点4、特点有限状态机描述了一个能够对外界环境的输入作出反应的对象的应激行为规则。
有限状态机仅在事件触发时活动(输出并转换状态),然后阻塞(停止活动),等待下一次事件触发。
有限状态机,在两次事件触发之间,记忆且仅记忆当前所处状态。4、特点4、特点由于数据集的取值组合可能非常多,严格按照定义设计有限状态机是非常复杂的。因而,通常只选择一些典型的数据,将其取值组合作为“超状态”,包含非典型数据对应的“子状态”。4、特点4、特点只有一个状态的状态机被称为组合型(Combinatorial)状态机,通常由多个状态机组合而成,将多个状态合成一个超状态。
4、特点4、特点由于超状态中包括多个子状态,在同一个事件触发下,状态机从一个超状态可以转换到多个不同状态——转换条件判断。4、特点4、特点状态机嵌套——允许将事件传递给子对象的状态机。5、基本流程5、基本流程
每个状态都需要处理所有可能的输入!5、扩展的基本流程5、扩展的基本流程
每个状态都需要处理所有可能的输入!6、实现(伪码)6、实现(伪码)function fsm (input)
{
static int state = s0; // 状态
switch (state) // 判断当前状态
{
case s0: // 当前状态为s0
switch (input) // 判断输入
{
case e01: // 输入为e01
output = a01; // 输出a01
state = s1; // 设置新状态
break;
}
break;
case s1: // 当前状态为s1
switch (input) // 判断输入
{
case e10: // 输入为e10
output = a10; // 输出a10
state = s0; // 设置新状态
break; case e12: // 输入为e12
output = a12; // 输出a12
state = s2; // 设置新状态
break;
}
break;
case s2: // 当前状态为s2
switch (input) // 判断输入
{
case e20: // 输入为e20
output = a20; // 输出a20
state = s0; // 设置新状态
break;
}
break;
}
}7、与离散事件仿真的关系7、与离散事件仿真的关系有限状态机由事件驱动,与离散事件仿真系统有着天然的匹配特性。
离散事件仿真系统提供事件引擎,驱动各有限状态机的运行。
离散事件仿真系统本身也可以建模为一个有限状态机。内容提要内容提要离散事件仿真
有限状态机
简易仿真器
三、简易仿真器三、简易仿真器仿真器架构
主要的数据结构
仿真场景设计三、简易仿真器三、简易仿真器仿真器架构
2、主要的数据结构2、主要的数据结构通用数据结构
专用数据结构1)通用数据结构1)通用数据结构内存池
双向链表
字符串哈希表A、内存池A、内存池在程序的设计过程中,通常需要使用大量的小对象(大小在1~128字节)。
利用系统的动态内存分配,往往会消耗大量的时间查找合适的空闲内存区。
内存池(memory pool)就是专门针对小对象的高速内存分配机制。A、内存池A、内存池内存池通过预先申请所需要的内存,等待需要使用的时候直接使用,能够大大减少内存动态申请次数,降低内存检索开销。
内存池可有效降低动态申请内存的次数,减少与内核态的交互,提升系统性能,减少内存碎片,增加内存空间使用率,避免内存泄漏的可能性,这么多的优点,没有理由不在系统中使用该技术。A、内存池A、内存池借鉴Modern C++ Design的设计方法。
内存区(memory chunk):内存区是一段连续的内存区域。设每个内存块(memory block,即小对象)需要N字节,一个内存区能够为C个小对象分配内存,即占用CN字节。
N个字节N个字节N个字节…N个字节内存区(占CN个字节)内存块(占N个字节)A、内存池A、内存池内联链表:将每个内存块编号为0、1、……、C-1,每个内存块的第1个字节表示下一个空闲内存块的编号。由于只占1个字节,C不大于256。…内存区(占CN个字节)12C-10内存块0内存块1内存块C-2内存块C-1A、内存池A、内存池内存区对象第一个空闲内存块的编号,初始为0。当前空闲的内存块数量,初始为C。内存区的指针,所指内存区占CN个字节。A、内存池A、内存池内存池对象内存块的大小,即N。内存区中内存块的数量,即C。内存区对象的数量。内存区对象数组的指针。A、内存池A、内存池…A、内存池A、内存池…12340第0号内存块第1号内存块第2号内存块第3号内存块第C-1号内存块A、内存池A、内存池内存块的分配A、内存池A、内存池…j首个空闲内存块编号为i。第j号内存块首个空闲内存块编号修改为j。第i号内存块返回第i号内存块。A、内存池A、内存池内存块的释放目前没有考虑内存区对象数组的缩编问题, 即内存区对象数组的大小总是单调不变的。A、内存池A、内存池…i首个空闲内存块编号为i。第j号内存块首个空闲内存块编号修改为j。第i号内存块被释放的内存块是第j号。下一个空闲的内存块的编号设置为i。A、内存池A、内存池缺点:
内存块的释放非常耗时,最坏情况下需要遍历每个内存区,时间复杂度为O(K)(K表示当前的内存区数量)。要实现O(1)的时间复杂度,需要为每个内存块增加一些内存开销。
由于释放内存区可能需要消耗很多时间,因而没有释放内存区的过程,当且仅当内存池被销毁时,所有内存区才会被销毁。
B、双向链表B、双向链表数据结构:表项1表项2表项N表头表尾……表头。表尾。表项数(即N)。表项内存池。前项。后项。数据。1*B、双向链表B、双向链表操作:
插入
按序插入
读取
删除(取走)C、哈希表C、哈希表存储(索引,数据),并根据索引查找数据。
为了快速查找数据,创建一个容量为N个单元(表片)的数组,用于存放数据。
将索引映射为0~N-1范围内的整数(散列值),并将数据放入对应表片中——希望不同的索引尽可能对应不同的整数。
为了能够处理索引散列值可能发生的碰撞,表片用链表实现,存放具有相同散列值的索引和数据。查表片比较索引获得数据。C、哈希表C、哈希表数据结构:表片1…表片2表片N表片数组表项1,1表项1,1表项1,K1…表项N,1表项N,2表项N,KN…表项2,1表项2,2表项2,K2…表片链表C、哈希表C、哈希表插入操作:…表片1…表片H表片Ni.计算索引的散列值(设为H)。ii.若链表不存在相同索引的项,则将 (索引,数据)插入表片H的链表中。HC、哈希表C、哈希表查询操作:…表片1…表片H表片N表项H,1表项H,KH…i.计算索引的散列值(设为H)。ii.遍历表片H的链表,若找到相同索引 的项,则返回对应数据。HC、哈希表C、哈希表删除操作:…表片1…表片H表片N表项H,1表项H,KH…i.计算索引的散列值(设为H)。ii.遍历表片H的链表,若找到相同索引 的项,则从链表中删除该项。H2)专用数据结构2)专用数据结构对象属性
用户对象
消息(报文)
事件
对象列表
事件列表
仿真内核
A、对象属性A、对象属性对象属性是具有名称的数值。
对象的属性列表采用哈希表实现,保存(属性名称,属性值)。
要求每个对象都有如下属性:
“name”:对象的名称,字符串类型。
根据模型需要,对象可以有其他属性。
B、用户对象B、用户对象用户对象包括:
对象名称
状态变量(存储对象的当前状态、名称等)
事件处理函数(状态机的实现)
对象的属性列表C、消息(报文)C、消息(报文)消息是(域名,域值)的列表。
采用哈希表实现。
操作
插入域
读取域值
删除域D、事件D、事件事件包括:
事件类型
目标对象
触发时刻
事件代码
事件消息(报文)B、对象列表B、对象列表用哈希表实现,允许通过对象名称查询对象。E、事件列表E、事件列表用链表实现,事件按照时间的先后顺序排列。F、仿真内核F、仿真内核仿真内核包括:
当前事件
事件列表
对象列表
仿真运行状态标志
F、仿真内核F、仿真内核主要操作:
仿真初始化(必须最先调用)
仿真结束清理(必须最后调用)
运行仿真
注册对象
预约自中断
预约远程中断
获得当前仿真时刻3、仿真场景设计3、仿真场景设计概要
简单PPP链路模型
信源
信宿
仿真场景1)概要1)概要
信源发送消息:周期性
链路传输消息:有时延
信宿接收消息:输出消息内容信源信宿PPP链路2)简单PPP链路模型2)简单PPP链路模型状态机
当接收来自输入端的消息时,缓存消息并等待时延
当等待时延结束时,将消息取出并发送到输出端2)简单PPP链路模型2)简单PPP链路模型状态变量
当前状态
对象名称
时延
链路输入端和输出端的对象(的名称)
消息队列及队列项内存池3)信源3)信源状态机
当发送时钟触发后,向链路发送报文。3)信源3)信源状态变量
当前状态
对象名称
所连接链路的名称
传输时延
最大报文发送数量
当前已发送报文的数量
4)信宿4)信宿状态机
当接收到来自链路的报文时,打印报文内容,并销毁报文。4)信宿4)信宿状态变量
当前状态
对象名称
所连接链路的名称5)仿真场景5)仿真场景主要步骤
创建链路对象“ppp link 0”,并设置相应的对象属性。
创建信源对象“source 0”,并设置相应的对象属性。
创建信宿对象“sink 0”,并设置相应的对象属性。
运行仿真。总体架构(UML图示)总体架构(UML图示)通用数据结构通用数据结构专用数据结构专用数据结构用户对象模型用户对象模型课后作业课后作业认真阅读、分析简易仿真器架构与源代码:
理解总体设计思路
理解内存池的设计与实现
理解链表的设计与实现
理解哈希表的设计与实现
理解仿真内核的设计与实现
理解用户对象模型中状态机的设计与实现
理解仿真场景的设计与实现课后作业课后作业在一周时间内,将简易仿真器的源代码抄写(或者重新实现)2~3遍,仔细体会其中的代码及注释,了解动态链接库(.dll)与可执行文件(.exe)的编写方法,并在Visual Studio 2010中进行运行和调试。
对简易仿真器中存在的不足、不方便、设计不周之处,提出你自己的
感想
传统文化与现代人生》听课感想对贪污受贿的感想个人工作感想新员工工作感想新工作感想
与建议,并在下一堂课上课前提交作业(纸制)。附注:附注:创建一个空白的解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
附注:附注:创建一个空白的解决方案(续)附注:附注:添加一个动态链接库程序附注:附注:添加一个动态链接库程序(续)附注:附注:添加一个动态链接库程序(续)附注:附注:添加头文件附注:附注:添加头文件(续)附注:附注:添加源文件附注:附注:编译、链接附注:附注:添加一个可执行控制台程序附注:附注:添加一个可执行控制台程序(续)附注:附注:添加一个可执行控制台程序(续)附注:附注:设置为活动工程附注:附注:设置工程依赖顺序附注:附注:设置工程依赖顺序(续)附注:附注:调试(添加断点)附注:附注:调试(运行调试)附注:附注:调试(运行调试)附注:附注:调试(单步)单步进入函数单步执行函数附注:附注:调试(添加监视)