Reading Notes on NS2(6)

NS2的离散事件调度机制

 

[1] Simulator类
在NS2中,每个网络模拟过程需要一个类对整个过程进行控制和管理,这个类就是模拟器类(Simulator类)。
注意:
(1)整个模拟过程可以看作是对模拟器类对象的操作;
(2)模拟器类是一个解释类,没有相应的编译类,封装了节点(node)、链路(link)、代理(agent)、数据分组格式等。
(3)整个模拟过程从创建一个模拟器类对象开始,通过调用这个对象的各种过程实现:创建节点、构建拓扑结构图、对模拟的各个方面进行配置、定义事件、根据定义的事件模拟整个网络的运行等。

创建一个模拟器类对象:
set ns [new Simulator]   ;#新建一个Simulator对象ns(后面要使用这个ns对象,必须在前面加$)
与此同时完成了下列一系列的初始化操作:
(a)初始化分组格式(调用create_packetformat);
(b)创建一个事件调度器(scheduler,缺省为calendar scheduler);
(c)创建一个空代理(null agent);

[2] NS2的事件和事件调度器
NS2是一个事件驱动的模拟器。
注意:
(1)一个NS2事件通常包含两个部分:(a)事件的触发时间;(b)用来处理事件的功能函数的句柄;
NS2模拟器内部at过程的主要功能是在特定的时间调用事件处理函数处理事件。
例如:
#下面这段Tcl代码首先创建了模拟器对象ns,由事件调度器在5秒时,调用执行handle_fun函数
set ns [new Simulator]
$ns at 5.0 "handle_fun"
$ns run
proc handle_fun {} {puts "This is the event handle function!"}
(2)事件调度器的工作过程:
事件调度器其实就是一个事件队列,所有的事件按事件的触发时间排列。当时间到达某一事件的触发时间时,事件调度器选择该事件出队,同时调用事件处理函数执行完该事件,如此反复执行上述过程。
如果在同一时刻,有多个事件需要执行,事件调度器将按照先调度先执行(first scheduled-first dispatched)的原则进行调度。
目前NS2支持四种事件调度器:
(a)链表式(linked-list)调度器
(b)堆式(heap)调度器——适用于有大量事件的情况
(c)时间队列式(calendar)调度器——默认的事件调度器
(d)实时(real-time)调度器

[3] 相关命令
set ns [Simulator]           ;#创建一个模拟器对象
set now [$ns now]          ;#将调度器的当前时间赋值给now变量,以便在模拟时跟踪时间
$ns halt                          ;#停止或暂停调度器
$ns run                           ;#启动调度器
$ns at <time> <event>   ;#在一个特定时间<time>调度一个事件<event>
$ns cancel <event>         ;#取消<event>事件,将事件从准备好的调度器中删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值