现在的位置: 首页 > 综合 > 正文

ns2仿真模型

2013年09月05日 ⁄ 综合 ⁄ 共 763字 ⁄ 字号 评论关闭
 

ns2仿真是基于离散事件的。在具体的实现上,它首先要求使用者构造一个事件队列,然后再依次执行这个队列中的事件。下面的代码很清楚地显示了这一点:
set ns [new Simulator]
$ns at 0.5 "puts 0.5"
$ns at 1.0 "puts 1.0"
$ns at 0.75 "puts 0.75"
$ns at 2.0 "puts 2.0; exit"
$ns run
运行后的结果为:
0.5
0.75
1.0
2.0
在这段代码中,首先创建了一个仿真器,其后的几行在不同的时间点创建了不同的事件,注意其中的1.0和0.75两个事件是反序创建的,但是在输出时是正序发生的,也就是说,仿真器在内部对时间进行了排序。
根据事件队列存储数据结构的不同,NS2有4种不同的模型:
链表(List)在系统内部使用一个单链表将所有的事件按时间顺序连接起来,这样在插入和删除一个事件时可能需要遍历整个链表,但是在运行时的速度却相当快。
堆(Heap)这种方式使用堆来存储事件列表(时间顺序),这种方式的好处是插入与删除事件速度较快,尤其是在事件数量非常大的时候,相比链表方式优势更为明显,因为它的复杂度仅为O(log(n)),且运行时速度相当快。
日历表(Calendar)这种方式以时间点为主键使用哈希表来存储事件,速度最快,这也是默认使用的方法。
实时调度器(RealTime)这种方式尝试将仿真时的时间与真实时间进行同步,也就是说如果在事件列表中最后一个事件的时刻是在第5秒发生,那么仿真时间也必定需要5秒。而其它方式则不需要。
在前3种方法中,它们在仿真器运行之后使用的时间是相同的,区别仅在于插入和删除的时间,而实时调度则是一种比较特殊的模型,使用较少。
通过如下命令可以改变仿真器的模型:
$ns use-scheduler List 
此处的List可取上面列出的4个值。

 

抱歉!评论已关闭.