NS Simulation: Scheduling Events



  • Simulation time

    • A similation system (such as NS) must have a built-in simulation clock - it represents the "clock" in the real world.
    • You can examine (read) the value of the simulation clock by using the now command in the Simulator class
    • Example::
        set  ns  [new Simulator]
      
        $ns  now   // Returns the current simulation time
      


  • Events
    • An event is an action made by a simulation entity
    • An event (action) in a simulation is represented a OTcl command !!!
    • Each event happens at a certain time and therefore, each event has an associated event time which is the time when the event will happen
    • In simulation, events are scheduled (to happen at some future time)
    • To schedule an event, use the at command in the Simulator class
    • Example::
        set  ns  [new Simulator]
      
        $ns  at  1.0  {puts "Point 1: Now = [$ns now]"}
      $ns at 8.0 {puts "Point 2: Now = [$ns now]"}
      $ns at 4.0 {puts "Point 3: Now = [$ns now]"} $ns run // Run simulation !
    • You will see the following output:
        Point 1: Now = 1
      Point 3: Now = 4
      Point 2: Now = 8

      Notice that Point 3 happens before Point 2

    • This is what is happening:
        set  ns  [new Simulator]
      
        $ns  at  1.0  {puts "Point 1: ..."}  // Schedule event at time 1.0
      $ns at 8.0 {puts "Point 2: ..."} // Schedule event at time 8.0
      $ns at 4.0 {puts "Point 3: ..."} // Schedule event at time 4.0 $ns run // Run simulation !

      So when the simulation is run, the events are "fired" in chronological order



  • Running the NS simulation
    • The run command in the Simulation class is used to run the network simuation.
    • Example:
          set  ns  [new Simulator]
      
          ... (set up simulation network)
      
          $ns run  // run simulation
      


  • Stopping an NS simulation
    • There is no "stop" command available.
    • To stop a running simulation, you must schedule a termination command before you start running the simulation.
    • The termination command is usually a Tcl procedure (to wrap up things)
    • Example:
          set  ns  [new Simulator]
      
          #Define the 'finish' procedure
      proc finish {} {
      exit 0
      } ... (set up simulation network) #Set simulation end time
      $ns at 100.0 "finish" $ns run // run simulation


  • A simple simulation....
    • To give you a taste of simulation, here is a NS script that simulates 2 person "talking" to each other:

        proc person1 {x} {
      global ns puts "Person 1:"
      puts " Hey, $x, time is [$ns now], it's your turn to say something" $ns at [expr [$ns now] + 0.4] "$x person1"
      } proc person2 {x} {
      global ns puts "Person 2:"
      puts " Hey, $x, time is [$ns now], it's your turn to say something" $ns at [expr [$ns now] + 0.6] "$x person2"
      } set ns [new Simulator] $ns at 0 "person1 person2" $ns at 4.5 "exit 0" $ns run

    • Example Program: (Demo above code)                                                
    • Output when you run this simulation:
      Person 1:
      Hey, person2, time is 0, it's your turn to say something
      Person 2:
      Hey, person1, time is 0.4, it's your turn to say something
      Person 1:
      Hey, person2, time is 1, it's your turn to say something
      Person 2:
      Hey, person1, time is 1.4, it's your turn to say something
      Person 1:
      Hey, person2, time is 2, it's your turn to say something
      Person 2:
      Hey, person1, time is 2.4, it's your turn to say something
      Person 1:
      Hey, person2, time is 3, it's your turn to say something
      Person 2:
      Hey, person1, time is 3.4, it's your turn to say something
      Person 1:
      Hey, person2, time is 4, it's your turn to say something
      Person 2:
      Hey, person1, time is 4.4, it's your turn to say something


  • Example NS Simulation Script
    • We will construct an NS simulation script that simulate the following network:

    • The following figure is a break down of the NS components that make up the above network:
    • Here is the NS (OTcl) Script that creates the above simulation:
        #Make a NS simulator
      set ns [new Simulator] # Define a 'finish' procedure
      proc finish {} {
      exit 0
      } # Create the nodes:
      set n0 [$ns node]
      set n1 [$ns node]
      set n2 [$ns node]
      set n3 [$ns node]
      set n4 [$ns node]
      set n5 [$ns node] # Create the links:
      $ns duplex-link $n0 $n2 2Mb 10ms DropTail
      $ns duplex-link $n1 $n2 2Mb 10ms DropTail
      $ns duplex-link $n2 $n3 0.3Mb 200ms DropTail
      $ns duplex-link $n3 $n4 0.5Mb 40ms DropTail
      $ns duplex-link $n3 $n5 0.5Mb 30ms DropTail # Add a TCP sending module to node n0
      set tcp1 [new Agent/TCP/Reno]
      $ns attach-agent $n0 $tcp1 # Add a TCP receiving module to node n4
      set sink1 [new Agent/TCPSink]
      $ns attach-agent $n4 $sink1 # Direct traffic from "tcp1" to "sink1"
      $ns connect $tcp1 $sink1 # Setup a FTP traffic generator on "tcp1"
      set ftp1 [new Application/FTP]
      $ftp1 attach-agent $tcp1
      $ftp1 set type_ FTP (no necessary) # Schedule start/stop times
      $ns at 0.1 "$ftp1 start"
      $ns at 100.0 "$ftp1 stop" # Set simulation end time
      $ns at 125.0 "finish" (Will invoke "exit 0") # Run simulation !!!!
      $ns run

    • Example Program: (Demo above code)                                                


  • Problems with the above simulation
    • It simulates alright...
    • But without producing any data that we can examine !!!
    • What we still need to learn is how to add commands in the simulation program to output state variables that we are interested in !!!

http://www.mathcs.emory.edu/~cheung/Courses/558-old/Syllabus/90-NS/2-NS-Prog/events.html






NS Simulation: Scheduling Events (examples inside)的更多相关文章

  1. NS Simulation Basic

    这个网站上的一系列讲解NS2的内容真的是深入浅出,看完立刻豁然开朗.所以就接连转了几篇. Scheduling Events那篇里的例子特别好,看完就懂了. http://www.mathcs.emo ...

  2. Studying TCP's Throughput and Goodput using NS

    Studying TCP's Throughput and Goodput using NS What is Throughput Throughput is the amount of data r ...

  3. Studying TCP's Congestion Window using NS

    Studying TCP's Congestion Window using NS How to obtain TCP's CWND value The most important value th ...

  4. 18 Tar Command Examples in Linux

    FROM: http://www.tecmint.com/18-tar-command-examples-in-linux/ 18 Tar Command Examples in Linux By R ...

  5. iOS 第三方库、插件、知名博客总结

    iOS 第三方库.插件.知名博客总结 用到的组件 1.通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FMDB 本地数据库组件 SDWebImage 多个缩略图 ...

  6. zepto.js 源码解析

    http://www.runoob.com/w3cnote/zepto-js-source-analysis.html Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jqu ...

  7. zepto源码注解

    /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...

  8. Zepto源码注释

    /* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...

  9. Learn clojure in Y minutes

    Learn X in Y minutes Where X=clojure Get the code: learnclojure.clj Clojure is a Lisp family languag ...

随机推荐

  1. 引入background和background-size不显示图片

    .bgLeft { position: absolute; left: -95px; background: url("../images/logo_1.png") left to ...

  2. Python学习 day14

    一.生成器函数进阶 1.最后一个yield后的代码 先看示例: def generator(): print(123) yield 'a' print(456) yield 'b' print(789 ...

  3. Oracle 数据库管理员及管理员的作用

    以下测试实例均在Oracle11gr2下测试!!! 一.简介:每个Oracle数据库应该至少有一名数据库管理员(dba),对于一个小的数据库,一个dba就够了,但是对于一个大的数据库,可能需要多个db ...

  4. window下,nodejs 安装 http-server,开启命令行HTTP服务器

    第一步:http://nodejs.cn/  官网下载安装文件,安装nodejs: 第二步:运行中输入cmd进入命令行模式,输入  node -v ,显示版本号,代表安装成功: 第三步:在node命令 ...

  5. Flyway-使用步骤

      1.创建一个Maven项目 2.编辑当下的pom.xml,添加flyway依赖和Mysql依赖 <project ...> ... <dependencies> <d ...

  6. c++ 常用的遍历,删除,分割等等文件处理函数代码实现

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9622851.html 删除文件目录函数: void myDeleteDirectory(CSt ...

  7. 在VIM中添加行号的方法

    VIM编辑器是可以显示行号的.但是,有时候我们需要在整个代码的行首添加行号.怎么实现呢?实现的方法有很多,这里就介绍我知道的一种吧. 在每行行首添加某个字符串 :%s/^/your_string/ 在 ...

  8. div 移动

    2011-05-12 10:10 jquery实现DIV层拖动 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

  9. Spark中自定义累加器Accumulator

    1. 自定义累加器 自定义累加器需要继承AccumulatorParam,实现addInPlace和zero方法. 例1:实现Long类型的累加器 object LongAccumulatorPara ...

  10. zato server启动后自动关闭问题解决

    症状 zato start server 启动server后,过一会server自动关闭了 解决 查看日志 UnicodeDecodeError: 'ascii' codec can't decode ...