OPNET 学习系列(一)
作者:互联网
OPENET Modeler 仿真建模大解密 高嵩编著
注:该文档仅为个人学习记录,与书中对应部分一致。
第2章 系统仿真及网络仿真基础
2.4 网络仿真建模方法
通信网络系统简称为网络,也是一种系统,系统的变量通常是状态。这种系统的状态变化可能发生在连续时间轴上的任意一点,因此属于连续时间系统。但这种系统的状态变化只发生在一个离散的集合内,所以该系统的变量变化轨迹是离散的,变量变化范围也是离散的。网络系统属于连续时间的离散变化系统,但由于网络中各种状态的变化通常是由各种事件引发的,所以我们也将这种系统称为离散时间系统。
对这类系统的建模可以采用事件调度、活动扫描、进程交互三种方式,下面分别进行描述。
2.4.1 事件调度
按事件调度简历模型时,所有事件均放在事件表中。模型中有一个时间控制成分,该成分从时间表中选择具有最早发生时间的事件,并将仿真时钟修改到该事件发生的事件,然后调用与该事件相应的事件处理模块,该事件处理完后返回时间控制成分。这样,时间的选择与处理不断地进行,直到仿真终止的条件或程序事件产生为止。
事件调度的核心内容是建立活动子例程模型,包括此活动发生引起的自身状态变化,及对其他成分的状态所产生的作用等。显然在成分和事件的种类较多时这是一件非常繁重的工作。
2.4.2 活动扫描
活动扫描的主要思想是模型由成分组成,成分包括活动,但活动的发生必须满足某些条件,条件之一是时间,且时间的优先级最高。每个主动成分均有一个相应的活动子例程。
活动扫描建模的核心内容也是建立活动子例程模型,而条件处理模块则是这种策略时间的本质特点,在活动对象数量较大时,这个模块的设计将耗费大量的精力。活动扫描在实现时由于仿真执行程序结构比较复杂,其流程控制需要十分小心,这也是活动扫描的缺点。
2.4.3 进程交互
进程交互法采用进程(Process)描述系统,它将模型中的主动成分所发生的事件及活动按时间顺序进行组合,从而形成进程表,一个成分一旦进入进程,它将完成进程的全部活动。
第3章 Modeler建模基本概念
OPNET的建模思路是以事件调度为基础的,结合进程交互以便于处理。
进程的描述采用了通信协议描述常用的有限状态机模型,使得离散事件模型与实际系统相似度难以判定的问题得到了很好的缓解,并且可以将用户从分析活动扫描的最佳频率、管理进程间交互关系的复杂劳动中解放出来,使用户只需关系自己协议的核心概念,以及与其他模型的相互关系即可。
在仿真工具的设计上,OPNET也将其建模方法中的公共部分提取出来,形成OPNET的仿真核心。这些公共部分包括事件列表管理、进程调度、标准数据结构存取、主动对象的例程生成、统计数据生成等。
而关于如何划分进程、节点、网络,如何使用进程调度、事件列表,在仿真中如何存取标准数据结构中的信息等,就成为实际建模中的基本概念。
3.1 概念的起点
用Modeler构建仿真程序是对网络的建模,而解释Modeler建立模型的逻辑和道理,则是对建模活动的建模。
Modeler中分了4个域来划分建模工作内容,即进程、节点、网络、外部系统。每个域内的建模使用一种范型,既能保证灵活性和建模能力的可扩展性,又能兼顾对系统行为和结构建模的能力。4个域的划分如下所述。
- 网络域关心用节点和节点间链路来描述的系统、以描述性数据为主;
- 节点域关心用应用、处理、队列和通信接口来定义的节点能力定义,完全是数据元素;
- 进程域关心对节点内系统上运行的进程的行为的定义,可能是完全通用的决策进程或算法,以可执行代码为主;
- 外部系统域关心仿真中包含来自外部代码或系统模型所需的通信机制,以可执行代码为主。
3.2 共性概念
3.2.1 对象与模型
4个域中的模型范型各不相同,但在防战中都需要实例化,实例后的模型可以统称为对象。每个对象只能有一个模型。对象和模型之间是多对一的关系。
在Modeler的4个域中,只有2个范型具有描述动态行为的能力,即进程模型的有限状态机(FSM)和链路模型的管道过程(Pipeline),其他的模型都用于描述结构的被动模型。
3.2.2 属性
模型与对象是一对多的关系。即使引用相同模型的对象之间也会存在着一定的差异,那么模型是如何为这些差异留出余地,让模型在实例化时有足够的灵活空间呢?C++中已经通过定义”属性“解决了,Modeler也采用了这一机制,但有所不同:一是具体用途不同,C++的目的是使源代码中类的属性可以在运行时动态地创建和使用;二是实现的级别不同,C++的属性的定义是代码级的,而Modeler中的属性知识模型对应的二进制文件中的一个记录,是仿真程序运行时的数据,不需要编译到代码中。也就是说,C++的属性定义改变需要重新编译程序才能使用,而Modeler的属性定义改变不需要重新编译就能使用。
对象的属性有三种:1. 内建属性,比如name;2. 模型属性,来自其所引用的模型中定义的属性;3. 扩展属性,针对特定对象定义的附加属性。
3.2.3 属性接口
模型的属性接口是一个用来囊括模型定义中多个不同方面的术语。这些方面的共同特点是,他们都用来定义从用户角度看到的模型的外观。需要注意的是,严格地讲属性接口概念并不涵盖模型属性,而只涵盖内置属性、继承自己所包含模块和模块的属性、自己的扩展属性或所含模块和模型的扩展属性等,这些都是关于如何呈现模型内部结构的记录。
3.2.4 统计量
在信息的传递中,存在着信源和信宿两种角色,一个负责发送,另一个负责接收,在统计结果的传递过程中,也存在着这样两种角色。统计量是“源”,探针则是读取并记录统计量的“宿”。
仿真中有局部和全局两种统计量。局部统计量与特定对象相关,对于这种统计量,探针必须指定具体对象。支持局部统计量的对象可以是节点、链路或模块。
- 模块的统计量可能是自定义统计量,也可能是内嵌统计量,自定义统计量来自模块包含的进程模型和子进程模型,内嵌统计量来自模块自身,如收发信机的忙闲统计量;
- 节点统计量只能来自模块或模块的子模块;
- 链路统计量只能是自定义统计量。
3.2.5 数据包
Modeler采用了基于包的通信来模拟网络系统的数据传输活动,所以数据包的使用涉及网络、节点、进程、外部系统域。Modeler中数据包被设计成了一个描述这段数据各方面信息的复杂结构,结构内容包括:
- 包结构
- 包尺寸,包的尺寸由两部分组成(各字段尺寸的总和;用户不关心内容,被称为填充块,部分的尺寸“bulk size”,以“bit”为单位。
注意,这里的包尺寸仅表示数据包对象所模拟的数据包的大小,与仿真中数据包对象在内存中存放的的实际大小不同。 - 包的所有权信息,即创建者,当前所有者;
- 时间信息,包括创建时间、被打上的时间戳;
- 包格式,字符串类型;
- ICI信息,包附带的ICI信息;
- 数据包编号。
3.3 网络域概念
网络模型由以下部分组成:子网、通信节点、通信链路。一个子网可以包含各种网络对象;通信节点反映网络中的各种设备,其内部结构可定义;通信链路与现实网络中的链路对应,也提供了在仿真中通信节点间传送信息的机制。
3.3.1 子网
子网本质上是个容器,用来将子网中的成分抽象成一个对象。子网通常用于代表一组物理的或逻辑的对象,如局域网。子网既可以包含一组节点和链路,也可以包含其他子网。子网中包含子网组成了网络模型的层级结构。
标签:仿真,系列,模型,建模,学习,3.2,进程,OPNET,属性 来源: https://blog.csdn.net/zhangjingyang2/article/details/118026937