基于OPNET的通信网仿真 第三章 基于中断的离散事件仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在OPNET中,对仿真事件表的管理 是由仿真内核(Simulaton Kernel, SK) 施行的。仿真内核是OPNET中的控制中 心。如果将OPNET仿真平台比拟成一台 计算机,那么仿真内核就是CPU。
在仿真中,仿真内核能够对事件进 行管理和调度进程。
二 离散事件驱动
在实际应用中,仿真要对网络通信的某 个过程进行模拟;而网络通信涉及诸多的 协议,节点、实体间彼此又相互作用。因 此,仿真必然涉及许多的事件和中断。而 这些事件中,一个事件可能是由另一个事 件触发的,彼此间存在着复杂的时序关系 和逻辑关系。如何将这些纷繁复杂的事件 进行合理的调度并有效地控制进程的行为, 是仿真中的核心问题。
• 时间(time):表征事件执行的仿真时间, 为非负的双精度浮点值。
• 事件(event):包括执行ID、调度ID和 中断类型
• 源(source):表示事件产生的模块及 源模块中事件的执行ID。
• 数据(data):包括输入流标识( instrm ID)、数据包标识(Packet ID )、代码(code)等事件信息。
• 模块(module):表征仿真事件的执 行模块。
事件属性的观察方法
在ODB窗口中截取的rx_sink模块的一个 事件的属性实例
事件执行的仿真时间约为16秒;事件的执行ID为 70,调度ID为78,处理事件的中断类型为流中断 ;源模块为rx节点的radio_receiver,源模块的 流中断事件的执行ID为68;执行模块是rx节点的 rx_sink;数据中输入流号为0,数据包ID为11。
3.1 离散事件仿真
一 仿真事件表
在OPNET仿真中,事件是指状态 的变化,如数据源发送数据包、定时器 超时、信道空闲与繁忙的转变等,都构 成了事件。而中断是对事件的处理。
事件和中断是一对相互关联的范畴。
一般地,一个事件总会引起一个中断。 但此中断不一定真正去执行,例如用事 件类核心函数op_ev_cancel()可以删除已 经预设(schedule)但尚未执行 (excution)的事件。
初始事件的设置
当设为使能时,初始化代码将在仿真开 始后最先执行。初始化代码位于进程的初始 状态中,以箭头表征:
在仿真开始前,仿真内核按照进程的优先级 ,将这些初始事件加入到仿真事件表中。
表头 表尾
时间 (Time)
0.0
0.0
...
0.0
类型 (type) 初始事件
初始事件
...
初始事件
模块 (Module)
第三章 基于中断的离散事件仿真
3.1 离散事件仿真 3.2 驱动问题的深入讨论 3.3 事件的类型
仿真是一个动态的过程,需要按一 定逻辑去处理许多任务。仿真可以比拟成 人的走路。人在走路中,不仅要有骨骼、 肌肉等人体运动结构的支持,还需要脑和 神经系统的指挥。同样地,仿真不仅需要 一个由图形语言和代码所构建的模型结构 ,还需要有一个驱动机制,去指引仿真中 各个动作逻辑有序地进行。
自中断函数的调用形式为:
op_intrpt_schedule_self (time, code) 其中,第一个参数time为double型,表示
预设事件的执行时间;该值为绝对仿真时间 ,而不是当前仿真时间的时延。第二个参数 是用户自定义的中断代码,用以标识该自中 断。
simple_source进程初始状态中包产生的 启动自中断代码如下:
模块1




模块2




...


模块n
在OPNET仿真中,还涉及一个仿真 控制权的概念。由于一般情况下,离散 事件仿真是在串行计算机中执行的,同 一时刻只能处理一个事件。一个实体要 对事件进行处理,必须获取执行仿真的 权利,我们称这种权利为仿真控制权。
仿真开始后,仿真内核将首先执行位于表 头的事件,并将仿真控制权转给模块1。模块 1获得控制权后,将执行该模块进程模型的初 始状态,进行进程的初始化,通常包括读取 对象属性、注册统计量和设置自中断等工作 。其中,自中断可预设未来的中断事件,可 通过中断函数集中的自中断函数实现,该函 数的作用为调用函数预设一个中断事件。
我们还可以用一个模块间的接收过 程,将上述事件的主要属性串接起来, 以便更好地理解其中的内涵:作为接收 机的源模块收到来自接收天线的一个数 据包(ID=11),发给instrm为0的包流 线,并通过仿真内核预设了包流线的输 出节点——rx_sink中的事件(流中断事 件),执行的仿真时间约为16秒。
下面我们以simple_source进程为例, 描述离散事件驱动的主要过程。
在仿真开始时刻(仿真时间为0),通常 要对进程进行初始化。这种对进程进行初始 化的事件称为初始仿真(Begin Simulation, BEGSIM)事件。初始事件是在进程接口( Process Interface)的begsim intrpt属性中设置 的:
事件和中断在OPNET的仿真中发挥着 极其重要的作用,可以说,OPNET仿真 就是一系列事件和中断相互引发、交替 作用的动态过程。在这个过程中,需要 对事件进行有效管理。OPNET是通过仿 真事件表(Simulation Evnet List)来完 成这项工作的。
仿真事件表是一个动态的列表,包括 时间、事件标识、中断类型、源、数据和 执行模块等属性:
OPNET采用了一种称为离Biblioteka Baidu事件驱动 (Discrete Event Driven)的仿真机制,其基 本思想如下所述:尽管物理世界的网络通 信是连续发生、进行的,但我们总可以将 其分解为离散的事件。而离散事件总是在 离散的时间点上发生的,不发生事件的时 间段本质上对我们的仿真不产生任何影响。 因此,尽管时间是连续的,我们可以仅对 事件发生的离散时间点进行处理,从而简 化仿真的模型和过程。
// Schedule a self interrupt that will indicate our start time for
// packet generation activities. If the source is disabled, // schedule it at current time with the appropriate code value. if (start_time == SSC_INFINITE_TIME)
相关文档
最新文档