ns-3离散事件仿真引擎实现分析

合集下载

离散事件系统建模与仿真研究

离散事件系统建模与仿真研究

离散事件系统建模与仿真研究离散事件系统(DES)是现实世界中诸多系统的抽象,其模拟与仿真研究对于系统优化与性能改进具有重要意义。

本文将就离散事件系统建模与仿真研究展开讨论,探究其在实践中的应用和发展前景。

一、离散事件系统的概述离散事件系统是指在离散时间下描述系统的一种数学模型,其特点是系统状态以离散的方式变化,系统行为由事件驱动并发生变化。

与连续系统相比,离散事件系统更贴近真实世界的很多场景,如交通系统、供应链管理和计算机网络等。

通过对离散事件系统进行建模与仿真研究,可以更好地理解系统行为以及利用模型来提升系统性能。

二、离散事件系统建模方法离散事件系统建模是指将实际系统抽象为离散事件系统的过程。

建模的目标是准确地描述系统行为,以便进行进一步的仿真与分析。

在离散事件系统建模中,系统元件、状态、事件以及它们之间的关系是不可或缺的要素。

1. 系统元件离散事件系统的建模过程首先需要确定系统中的元件,这些元件可以是实体、资源或者处理单元。

例如,对于一个制造业的供应链系统,系统元件可以包括供应商、生产线、仓库等。

2. 状态状态用于描述系统元件的属性和行为,它包括系统的内部状态和外部状态。

内部状态指元件内部的变量或属性,如库存量、生产速率等;外部状态指元件与环境的交互,如接收订单、发货等。

3. 事件事件是离散事件系统中的行为触发点,可分为外部事件和内部事件。

外部事件是由系统环境引起的,如用户的请求、供应商的发货等;内部事件则是系统元件内部触发的,如库存量低于阈值、生产任务完成等。

三、仿真模拟与性能评估离散事件系统建模的目的是为了进行仿真模拟与性能评估,通过对系统模型进行仿真,可以获取系统在不同状态下的行为与性能指标。

仿真模拟可以基于真实数据或者随机数据,通过引入事件触发机制,模拟系统的运行过程。

1. 模型验证在进行仿真模拟之前,需要首先验证建立的离散事件系统模型的正确性。

模型验证可以通过与实际系统进行对比和验证来确保模型的准确性。

离散事件系统动态运行仿真模拟研究

离散事件系统动态运行仿真模拟研究

离散事件系统动态运行仿真模拟研究一、概述离散事件系统动态运行仿真模拟是一种重要的技术手段,用于对复杂系统进行模拟,测试和优化。

它的应用范围非常广泛,在制造业、航空航天、电子商务等领域都有着广泛的应用。

本文将围绕离散事件系统动态运行仿真模拟进行探讨。

二、离散事件系统的概念离散事件系统是指在不连续的时间点上,由离散模型描述的系统。

它包括一系列事件和决策,每个事件的发生都可能引起系统状态的变化。

在离散事件系统中,事件是不可预测的,需要根据系统的状态和规则来决定何时进行下一个事件。

例如,在一个工业生产线上,生产速度可能因为故障而减慢,或是因为调整而提高。

这些事件都是不可预测的,并且会影响整个生产线的状态。

三、离散事件系统的运行仿真模拟离散事件系统的动态运行仿真模拟是指对离散事件系统进行模拟,以评估其性能和可靠性。

这种仿真模拟是在计算机上进行的,它可以在更短的时间内完成对系统的测试,同时可以模拟复杂的系统状态和事件,为决策提供支持。

在进行离散事件系统的仿真模拟时,需要对系统进行建模。

建模包括对系统的基本组成部分进行分析,确定系统中的重要事件和决策,并设计相应的概率模型。

在模拟的过程中,在当前状态下,根据之前得到的概率模型和事件规则,做出下一个事件的决策。

随着仿真的进行,系统状态会动态变化,仿真结束时,可以得到各种指标,如系统性能、运行效率和可靠性等。

四、离散事件系统运行仿真模拟的应用离散事件系统的动态运行仿真模拟在许多领域都有着广泛的应用。

在工业制造领域中,通过进行仿真模拟,可以对生产线进行优化,减少成本,提高生产效率。

在航空航天领域,通常以飞机航线模型进行仿真模拟,以评估飞机运行的性能和安全。

在电子商务领域,通过仿真模拟模型,可以分析整个商业流程和系统,优化客户体验,提高系统的可用性和收益。

五、结论离散事件系统动态运行仿真模拟是一种重要的技术手段,可以对复杂的系统进行模拟,测试和优化。

虽然其应用范围广泛,但每个应用领域都需要进行具体的建模和优化工作。

基于ns—3构建计算机网络教学仿真平台

基于ns—3构建计算机网络教学仿真平台

基于ns—3构建计算机网络教学仿真平台【摘要】计算机网络原理课程抽象、复杂,基于ns-3构建计算机网络教学仿真平台有助于提高学生的学习兴趣。

【关键词】计算机网络;网络模拟;ns-3;可视化《计算机网络原理》概念抽象、协议繁琐,传统的理论教学以板书或者PPT 进行理论讲解,枯燥乏味。

构建基于新型网络模拟器ns-3[1]构建计算机网络教学仿真平台,能提高计算机网络的教学质量[2]。

1.ns-3简介ns-3广泛汲取了现有优秀开源网络模拟器如ns-2,GTNetS,yans等的成功技术和经验,专门用于教育和研究用途的离散事件模拟器,基于GNU GPLv2许可,可以免费地获取、使用和修改[3-4]。

2.ns-3仿真流程搭建ns-3网络仿真场景和搭建实际网络类似[5-6],首先生成网络节点(Node),然后为节点安装网络设备(NetDevice)及相应的传输媒体(Channel),接下来安装网络协议,包括应用层(Application),传输层,MAC层,ns-3提供了多个应用层和传输层协议,数据包(Packets)通过协议栈(Protocol stack)向下传递给网络设备(类似于网卡,实现了MAC层和物理层协议),于是如图1所示数据包就像在真实网络中一样流动。

3.ns-3仿真实例通过仿真实例展示基于ns-3构建的计算机网络教学仿真平台的优势。

仿真场景如图2所示,网络分成两部分:基于CSAM/CD协议的有线局域网和点到点的通信链路。

其中节点0是服务器;节点1有两块网卡,一块网卡和局域在一个网段,另一块网卡和服务器在一个网段,负责局域网和服务器的通信。

3.1 仿真脚本下面我给出C++脚本的关键代码(p2p网络的部分,csma网络和其代码类似)://生成节点:NodeContainer p2pNodes;p2pNodes.Create (2);//配置网卡信道参数并安装网络设备:PointToPointHelper pointToPoint;pointToPoint.SetDeviceAttribute (“DataRate”,StringValue (“5Mbps”));pointToPoint.SetChannelAttribute (“Delay”,StringValue (“2ms”));NetDeviceContainer p2pDevices;p2pDevices = pointToPoint.Install (p2pNodes);//安装网络协议栈并配置IP地址:InternetStackHelper stack;stack.Install (p2pNodes.Get (0));Ipv4AddressHelper address;address.SetBase (“10.1.1.0”,”255.255.255.0”);Ipv4InterfaceContainer p2pInter faces;p2pInterfaces = address.Assign (p2pDevices);//安装应用程序,Node0为服务器,Node5为客户机:UdpEchoServerHelper echoServer (9);ApplicationContainer serverApps = echoServer.Install (p2pNodes.Get (0));UdpEchoClientHelper echoClient (p2pInterfaces.GetAddress (0),9);//配置路由Ipv4GlobalRoutingHelper::PopulateRoutingTables ();//利用追踪系统捕获网络数据包:pointToPoint.EnablePcapAll (“p2p_csma”);csma.EnablePcap (“p2p_csma”,csmaDevices.Get (0),true);3.2 网络仿真演示图3是ns-3可视化模块PyViz在线显示实例仿真场景的拓扑结构、网络配置及通信时的画面。

基于NS3的网络协议分析与模拟

基于NS3的网络协议分析与模拟

J ] . 计算机工程与应用, 2 0 0 3 ( 3 9 ) 用此技术 J a v a 程 序 就 可 以访 问带 有 O D B C驱 动 程 序 [ 4 ]张维明 、 邓 苏等 , 信 息 系统 建模技 术与应 用, 电子 工业 出版 的数 据库 , 实 现 数据 库 中教 师信 息 表 连接 的程序 代 码 [
数 据库 由 3个基本 表 和若 干视 图组 成 。教师 的相 关信
参 考文献 : 操 作 ,都 会 自动 保存 到数 据 库 中教 师基 本 信 息表 当 [ 1 ] 丁 占涛, 邹敏 . 基于 B / S 模 式 的教师信 息管理 系统 [ I ] _ 微 型 中, 以便 在查 询和 提取 教 师 信 息时 使用 教 师 基本 信 息 电脑 应 用 , 2 0 0 3 , 1 9 ( 1 ) .
进行录入, 当前录入信息会覆盖原来的信息。
2 ) 、 教师信息查询模块 : 我 们 可 以根 据 设 计 的培
训 内容 , 根据课程需求, 查 询 相 应 专业 、 授 课 内容 、 职 s h o u j i + ” , ’ ’ + y o u x i a n g + ” , ’ + x i a n g mu + ” , ’ + t i m e + ” ; s q 1 . e x e c u t e U p d a t e ( C o n d i t i o n ) ; 称 等相 关 的教师 。 3系统 实现
表示为:
t r y { C l a s s . f o r N a me ( ” s u n . j d b c . o d b c . J d b c O d b c D r i v e ” ) ; } c a t c h ( C 1 a s s N o t F o u n d E x c e p t i o n e ) { l ; t y { r c o n = D r i v e r Ma n a g e r . g e t C o n n e c t i o n ( ” j d b c : o d b c : s u n " , " 8 a ” . ”

离散事件动态系统建模与仿真技术研究

离散事件动态系统建模与仿真技术研究

离散事件动态系统建模与仿真技术研究离散事件动态系统(Discrete Event Dynamic System,DEDS)是一种用来描述离散事件的数学模型,其在集成电路设计、制造业、物流管理、网络通信等领域中得到了广泛应用。

离散事件动态系统建模和仿真技术是研究这一领域的关键问题之一。

I. 离散事件动态系统简介离散事件动态系统是一种将时间分为离散事件的模型,该模型针对每个事件进行计算,以决定模型的下一个状态。

每个事件的时间戳都是不同的,一次模拟可以包含大量的事件,事件之间可能会有多种关系,这是离散事件模拟的特点。

常见的离散事件动态系统包括排队系统、自动控制系统、网络系统、供应链系统、交通系统等,可以应用于机器人系统、智能交通、虚拟现实等领域。

II. 离散事件动态系统建模离散事件动态系统的建模是指将动态的系统描述成一个离散事件模型的过程,常用的建模框架包括Petri网、DEVS和CTPN等。

Petri网是描述离散事件模型的一种图形化建模语言,其由Petri网元素和变迁组成。

当一个Petri网达到一个使变迁操作成为可能的状态时,变迁将被激活。

Petri网允许对分布式系统进行实时分析和检验,并允许通过变形分析系统行为的改变。

DEVS是离散事件系统建模技术的一种形式化表达,其通过定义系统组件之间的输入输出以及它们之间的转移逻辑来描述系统行为。

DEVS模型一般包含四个部分,输入信号、状态、事件响应函数和状态转移函数。

CTPN是一种图形化建模语言,它通过两个主要元素,控制流程和时间约束,来建模系统的动态行为。

控制流程用于表示系统中的活动和控制流,时间约束表示活动之间的时间上限和下限。

III. 离散事件动态系统仿真离散事件动态系统仿真技术是为了模拟离散事件系统的行为,以便分析和预测其性能。

通常,离散事件动态系统仿真需要从实际系统的模型出发,将系统的模型转换成计算机程序,利用程序模拟实际系统不同的状态和事件,并通过这些状态和事件来推断系统的行为。

基于NS—3的OLSR路由协议性能仿真

基于NS—3的OLSR路由协议性能仿真

基于NS—3的OLSR路由协议性能仿真随着近年来Ad hoc网络的发展,Ad hoc网络的各项性能得到越来越多的研究,而路由协议的性能好坏将直接影响到Ad hoc网络的性能。

本文选用NS-3网络模拟器作为仿真环境,对Ad hoc网络中的OLSR路由协议进行仿真性能分析。

标签:Ad hoc网络;NS-3网络模拟器;OLSR路由协议0 引言近年来,由于在消防救灾、应急通信等行业中占着重要地位,Ad hoc网络得到越来越多的重视,而路由协议作为Ad hoc网络中最重要的组成部分之一,也相应的成为了研究的热点方向。

本文将选择OLSR协议作为仿真协议,在NS-3网络模拟器下对其进行性能仿真评估。

1 NS-3网络模拟器在现代通信网络发展中,网络技术得到了广泛的应用,因此对于网络技术的研究与开发有着越来越大的需求,网络模拟技术也应运而生,目前现有的网络模拟工具主要包括:OPNET,NS-2,GloMoSim,OMNET++等等,然而在研究过程中发现,当前的模拟工具都存在着各种各样的不足。

针对这样的问题,美国华盛顿大学的Thomas R.Henderson 教授及其小组在美国自然科学基金NSF的支持下开发出了全新的网络模拟工具NS-3。

NS-3是一部全新的网络模拟软件,是目前最受欢迎的网络模拟软NS-2的最终替代软件,而不是NS-2的升级版本。

NS-3可以说既摒弃目前的主流网络模拟软件OPNET和NS-2的缺点,又整合这两部软件的一些优点。

NS-3是一个离散事件模拟器,它的体系结构主要由模拟器内核和网络组件组成。

模拟器内核主要由事件调度器和网络模拟支持系统组成。

网络模拟器支持系统主要包括:Attribute系统,Logging系统和Tracing系统。

Attribute系统主要实现对NS-3仿真实体进行仿真参数的设置、组织、访问、修改等;Logging系统是NS-3中新引入的概念,类似于一种基于控制台的消息记录模块,这种机制在进行仿真过程的追踪和模块扩展的时候极其方便有效;Tracing系统主要用来实现NS-3中的仿真结果输出。

NS3文档

NS3文档

一、简介1. 什么是NS-3?NS是一个离散事件驱动网络模拟器。

官方定义:(from /)ns-3 is a discrete-event network simulator for Internet system s, targeted primarily for research and educational use. ns-3 is free software, licensed under the GNU GPLv2 license, and is publicly available for research, development, and use.ns-3 is intended as an eventual replacem ent for the popular ns-2 simulator. The project acronym “nsnam” derives historically from the concatenation of ns (network simulator) and nam (network animator).2. NS-3 vs NS-2NS-3虽然冠以一个“3”,但事实上跟它广泛流行的前任NS-2并非一脉相承,或者从使用角度上说,仅仅继承了一个名称而已。

NS-3基本上是一个新的模拟器,不支持NS-2的API。

NS-3是完全用C++编写的(也有可选的Python接口),而NS-2一部分模块使用C++而另一部分使用OTcl。

因而NS-3最大的特点就是脚本可以C++或Python语言,而在NS-2中,我们使用的是OTcl。

NS-3的功能仍旧在开发中,因此它远没有NS-2完善(当然NS-2的维护也在进行中)。

NS-3并不包含目前所有NS-2的功能,但它具有某些新的特性:正确的多网卡处理、IP寻址策略的使用、更详细的802.11模块等等。

Latest stable release: ns-3.2.1 (November 20, 2008)4. NS-3的一些名词解释POSIX:Portable Operating System Interface一组操作系统API的协议/标准族,最开始为了Unix系统上的可移植性而开发的,也适用于其他操作系统。

离散事件系统仿真技术与实例

离散事件系统仿真技术与实例

离散事件系统仿真技术与实例概述离散事件系统仿真是一种模拟离散事件的技术,通过模拟系统中的事件和它们之间的相互作用来分析和优化系统的性能。

在实际应用中,离散事件系统仿真可以用于评估不同策略的效果,预测系统的行为,甚至设计新的系统。

本文将介绍离散事件系统仿真的基本原理和常用方法,并通过实例进行演示,帮助读者深入了解该主题。

离散事件系统仿真的基本原理离散事件系统仿真基于以下几个基本原理进行模拟:1. 离散事件离散事件是指在系统中发生的具体事件,它们可以是系统内部的操作,也可以是外部的输入。

离散事件系统通过跟踪和处理这些事件来模拟系统的运行过程。

2. 事件驱动仿真离散事件系统仿真是一种事件驱动的仿真方法。

系统在仿真过程中,根据当前的状态和已经发生的事件,确定下一个要处理的事件,并执行相应的操作。

这种方法可以更加准确地模拟实际系统的行为。

3. 随机性离散事件系统仿真通常包含一定的随机性。

系统中的事件往往是基于概率模型,具有一定的随机性。

这使得仿真结果更加真实,能够反映系统在不同条件下的不确定性和变化性。

4. 时间推进离散事件系统仿真通过推进时间来模拟系统的运行。

仿真过程中,系统的时间可以是离散的,也可以是连续的。

根据实际系统的特点,选择合适的时间推进策略对系统进行仿真。

离散事件系统仿真的方法和工具1. 事件扩展Petri网方法事件扩展Petri网是一种常用的离散事件系统仿真方法。

它将Petri网模型与离散事件模型结合起来,能够较好地描述事件之间的相互作用和系统的行为变化。

2. Agent-based仿真方法Agent-based仿真是另一种常用的离散事件系统仿真方法。

它将系统的各个组成部分建模为独立的智能体,并模拟它们之间的相互作用和决策过程。

Agent-based仿真在复杂系统的建模和分析中具有较好的灵活性和可扩展性。

3. 常用工具在离散事件系统仿真中,有许多常用的工具可供选择。

例如,Arena是一款功能强大的商业仿真软件,提供了丰富的建模和分析功能。

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

NS-3离散事件仿真引擎实现赵问道浙江大学信息与通信工程研究所2009年11月目录一、ns-3离散事件仿真引擎的基本概念 (3)二、ns-3离散事件仿真引擎的基本原理 (4)三、基本的仿真器类:Simulator (5)四、仿真器实现类:SimulatorImpl类及其派生类 (10)五、事件调度器类:Scheduler及其派生类 (12)NS-3离散事件仿真引擎实现分析一、ns-3离散事件仿真引擎的基本概念Ns-3是一个基于事件的(event-based)仿真系统。

除了系统状态变量和系统事件发生逻辑外,基于事件仿真还包括以下组成部分:(1)时钟(Clock)仿真系统必须要保持对当前仿真时间的跟踪。

离散事件仿真与实时仿真(real time simulations)不同,在离散事件仿真中时间是跳跃的(time ‘hops’ ),因为事件是瞬时发生的– 随着仿真的进展,时钟跳跃到下一事件的开始时间。

Ns-3内部仿真时钟用一个64比特的整数表示,其单位由用户通过TimeStepPrecision::Set函数设定。

(2)事件列表(Events List)仿真系统至少要维护一个仿真事件列表,一个事件用事件发生的时刻和类型来描述,事件类型标识用于仿真事件的代码,一般事件代码都是参数化的,事件描述中还包含表示事件代码的参数。

Ns-3的事件列表由Scheduler类及其派生类实现,Simulator类提供创建具体的Scheduler对象的方法,以及插入各种事件的静态接口函数。

(3)随机数发生器(Random-Number Generators)根据系统模型,仿真系统需要产生各种类型的随机变量(random variables)。

这由一个或多个伪随机数发生器(Pseudorandom number generators)产生。

NS-3包含一个内置的伪随机数发生器,随机数由RandomVariable类及其派生类实现,可以产生具有各种分布特性的随机数,具体有UniformVariable类、ConstantVariable类、SequentialVariable类、ExponentialVariable类、ParetoVariable类、WeibullVariable类、NormalVariable类、EmpiricalVariable类、IntEmpiricalVariable类、DeterministicVariable类、LogNormalVariable类、GammaVariable类、ErlangVariable类、ZipfVariable类和TriangularVariable类等。

(4)统计(Statistics)仿真系统通常会记录系统的统计数据,用以表示感兴趣的一些统计量。

(5)结束条件(Ending Condition)因为事件是自举的,理论上来说离散事件仿真系统可以永远运行下去。

因此,仿真系统设计者必须决定仿真什么时候结束。

典型的选择是“在事件t”(“at time t” )或者“在处理n个事件后”(“after processing n number of events”)或者,更一般地,“当统计量X达到值x时”(“when statistical measure X reaches the value x”)。

一个仿真系统的主循环结构如下:(1)开始(Start):初始化结束条件(Ending Condition)为FALSE。

初始化系统状态变量。

初始化时钟(Clock)(通常从仿真时刻0开始) 。

调度(Schedule)初始化事件(例如,将初始事件缴入事件列表(Events List))。

(2)循环(“Do loop” or “While loop”):While (结束条件(Ending Condition )为FALSE) then do:{将时钟设置成下一事件发生时刻。

执行下一事件,并将其从事件列表(Events List)中移除。

更新统计数据。

}(3)结束(End):当设定的结束条件为真时,仿真循环结束,同时系统产生统计报告。

二、ns-3离散事件仿真引擎的基本原理Ns-3是一个面向Internet系统的离散事件网络仿真系统(a discrete-event network simulator)。

Ns-3离散事件仿真引擎的入口是Simulator类,事件的调度、仿真系统启停等均通过Simulator类来操作。

Simulator类所有的成员函数全部为静态类型的(static),因此,Simulator类是不需要实例化的,直接采用“类名::方法”的方式进行调用。

Simulator类提供了启动和停止仿真器、事件调度、取消事件、设置调度器、获得和设置仿真器、获得事件时间等方法接口。

具体的仿真器由SimulatorImpl类及其派生类实现。

SimulatorImpl类派生自Object类,定义了仿真器的接口,所有成员函数均为虚函数,需要在其派生类中具体实现。

目前Ns-3有两个派生类:DefaultSimulatorImpl类和RealtimeSimulatorImpl类。

RealtimeSimulatorImpl类用于实时仿真。

调度器由Scheduler类及其派生类实现。

Scheduler类派生自Object类,定义了调度器的接口,所有成员函数均为虚函数,需要在其派生类中具体实现。

目前Ns-3有三个Scheduler类的派生类:CalendarScheduler类、ListScheduler类和MapScheduler类。

ns-3离散事件仿真引擎的工作原理如下:1. 在所有的仿真脚本主程序中,在设置好仿真网络系统后,通过调用Simulator::Run()来启动仿真系统。

通过调用GetImpl()来获得SimulatorImpl对象指针,这个SimulatorImpl对象指针是静态对象指针,只有一个实例。

但在每次调用GetImpl()时,都会重新创建对象。

在获得SimulatorImpl对象指针后调用SimulatorImpl对象的Run()方法。

2. SimulatorImpl对象的创建:在Simulator的静态成员方法GetImpl()中,由ObjectFactory对象factory的Create<SimulatorImpl>()方法来创建具体的SimulatorImpl对象,具体的类型由factory的SetTypeId(类型名)来设定。

在中定义了一个全局变量:GlobalValue类型的g_simTypeImpl,默认实现的仿真器类型为ns3::DefaultSimulatorImpl。

具体的SimulatorImpl对象创建好后,调用其SetScheduler(调度器对象指针)来设置所采用的事件调度器。

3. Scheduler具体对象的创建:在Simulator的静态成员方法GetImpl()中,由ObjectFactory对象factory的Create<Scheduler>()方法来创建具体的Scheduler对象,具体的类型由factory的SetTypeId(类型名)来设定。

在中定义了一个全局变量:GlobalValue类型的g_schedTypeImpl,默认实现的调度器类型为ns3::MapScheduler。

4. 仿真事件的产生和执行:在仿真主程序中都会创建一系列存放在ApplicationContainer对象中的应用程序(Application对象),ApplicationContainer对象通过Sart方法和Stop方法去调用所有Application 对象的Sart方法和Stop方法去启动和停止应用程序。

Application对象的Sart方法和Stop方法通过ScheduleStart (const Time &time)和ScheduleStop (const Time &time)这两个内部方法去调用Simulator::Schedule方法,在调度器中安排启动和停止事件。

在仿真主程序设立完所有事件后调用Simulator::Run ()方法开始执行所有调度事件。

三、基本的仿真器类:SimulatorSimulator类是Ns-3离散事件仿真引擎的入口,主要用于控制仿真事件的调度、仿真系统启停。

Simulator类本身不实现具体的仿真引擎,它提供了一种可以采用不同具体仿真引擎实现的机制,具体的仿真器由SimulatorImpl类及其派生类实现。

Simulator类的成员函数全部是静态的,因此,Simulator类是不需要实例化的。

根据上面的仿真系统原理,Simulator类的成员函数可以分成以下几种类型:1. 仿真引擎管理接口函数具有设置具体仿真引擎实现的接口函数SetImplementation(Ptr<SimulatorImpl> impl)和获取当前使用的仿真引擎实现的接口GetImplementation (void),具体如下:static void SetImplementation (Ptr<SimulatorImpl> impl);static Ptr<SimulatorImpl> GetImplementation (void);Ns-3具体的仿真引擎由SimulatorImpl类及其派生类实现,目前Ns-3有两个派生类:DefaultSimulatorImpl类和RealtimeSimulatorImpl类。

DefaultSimulatorImpl类实现的是一个用于离散事件仿真的单线程的、不进行实时时钟同步的仿真器。

RealtimeSimulatorImpl类实现的用于实时仿真的多线程的、事件与实时时钟同步的仿真器。

可以通过SetImplementation (Ptr<SimulatorImpl> impl)来更改所使用的具体仿真引擎。

2. 事件调度器管理接口函数可以随时设置仿真系统所采用的事件调度器。

前一个事件调度器已经调度的事件会在我们使用之前转移到新的事件调度器,目前Ns-3有三个事件调度器:日历调度器(CalendarScheduler类实现)、列表调度器(ListScheduler类实现)和图调度器(MapScheduler类实现)。

具体实现如下:static void SetScheduler (Ptr<Scheduler> scheduler);3. 仿真器起停管理接口函数(1)运行仿真器运行仿真器,直到①所有事件都已执行;②用户调用Simulator::Stop():static void Run (void);运行下一个仿真事件,然后立即返回:static void RunOneEvent (void);(2)停止仿真器停止仿真器,如果某一事件激活该方法,则它是Simulator::Run在返回到调用者之前所执行的最后一个事件:static void Stop (void);在指定时间time停止仿真器,当下一个事件的到期时间大于指定停止时间时强制Simulator::Run 返回到调用者:static void Stop (Time const &time);(3)检测是否完成检测判断系统已经没有调度的事件或仿真时间已到停止时间:static bool IsFinished (void);4. 仿真器事件时间管理接口函数(1)下一个调度事件的到期事件static Time Next (void);(2)当前仿真时间static Time Now (void);(3)当前执行事件的剩余时间static Time GetDelayLeft (const EventId &id);(4)一个事件可以安排的最大仿真时间static Time GetMaximumSimulationTime (void);5. 事件调度安排接口函数(1)在某一时间安排某一事件的调度接口函数NS-3共实现了三类在某一时间安排某一事件的调度接口函数。

相关文档
最新文档