NS by Example 笔记(12)Add New Queue

Add New Queue

(Tested with ns-2.1b8a, ns-2.1b9a and ns-2.26)

 

目标 Objective

 

建立一个简单的drop-tail router output queue, 这个队列使用round-robin dequeue scheduling 在priority 15数据包 (from a "MmApp" over "UDPmm")和队列中其他数据包上。 当priority 15 包和其他包在队列中共存时, 它让每一类中在队列中时间最长(oldest)的数据包依次出列。

 

 

 

设计 Design

 

队列含有2个逻辑上的FIFO队列LQ1和LQ2, 则总的大小等于physical queue (PQ)的大小, i.e. LQ1 + LQ2 = PQ。 去实现普通的drop-tail的出列方式, 当一个数据包将要进入队列时, 排队管理器(enqueue  manager)检查LQ1 + LQ2的大小是否小于最大允许的PQ的大小。 如果小于, 则数据包加入到适当的逻辑队列去。 要实现round-robin dequeue scheduling的话, 出列管理器(dequeue manager)依次使一个逻辑队列的数据包离开并下一个数据包从另一个逻辑队列出列。 也就是说, 数据包以1:1的比例从两个逻辑队列中出列如果两个队列中都有数据包的话。

 

 

 

实现 Implementation

 

我们来给这个队列对象取个C++形式的名字叫"DtRrQueue" (Drop-Tail Round-Robin Queue)由"Queue"类衍生得来, 对应的OTcl名为"Queue/DTRR"。 当"Queue"类(in "queue.cc")中的成员函数"recv"收到一个数据包, 它调用queue对象的成员函数"enqueue", 并调用"dequeue"如果link对象没有被blocked 的话。 当link来自于blocked state, 它也调用它的queue对象的成员函数"dequeue"。 因此, 我们需要去编写"DtRrQueue"对象的类的成员函数"enqueue"和"dequeue"。Figure 30为"DtRrQueue"类的定义和它的"enqueue"和"dequeue"成员函数。 完整内容请见"dtrr-queue.h"和"dtrr-queue.cc"文件。




 
Figure 30. "DtRrQueue" class implementation

 

模拟测试 Test Simulation

 

使用在测试"MmApp" over "UDPmm"中用到的模拟脚本, 只需改变link r1-r2的RED queue为DTRR queue。 见 Figure 31. 脚本到这里this script下载或见本文附件。




 
Figure 31. "DtRrQueue" test simulation script

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值