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. Dijkstra实现最短路径

    #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const ...

  2. Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解

    简介 最近了解到很多网页开发者对jquery中的 .bind() .live() .delegate() 和 .on() 方法存在很多的疑惑.这些疑惑通常是关于它们之间真正的区别是什么啊,什么时候该使 ...

  3. windows下限制Redis端口只能由本机访问

    在使用redis的时候,我只想要本机能够访问,这时可通过防火墙会阻止外界的访问 1.找到防火墙,选择高级设置2.点击"入站规则",再点击"新建规则" 3.点击& ...

  4. 关于append,appendTo,prepend,prependTo的区别

    之前做项目对于这几个的方法总是有点模糊,尤其是prepend和prependTo; 1.append <style> span{ background:yellow; } .test{ b ...

  5. Java Hashtable 源码(JDK8)

    记录了HashMap也来看看Hashtable吧,最近打算换份实习,所以想看看书回顾一下,不然就快记不得了.....囧啊囧啊,记性太差怎么破??? Hashtable里面的一些变量: Entry< ...

  6. WPF与Winform中的不同(1)

    1. 部分控件的Text属性,变成了 Content属性 如: winform中,Button.Text = "abc"; wpf中,Button.Content = " ...

  7. hdu 3794 Magic Coupon

    浙大计算机研究生保研复试上机考试-2011年  贪心: 注意:输入输出用scanf  printf 可以加快速度,用cin WA #include<iostream> #include&l ...

  8. 【.Net】 C#参数数组与函数重载

    static int ParamsFunc(int i, string s) { return i; } static int ParamsFunc(int i, string s, params i ...

  9. .Net程序员玩转Android系列之三~快速上手

    快速环境搭建和Hello World 第一步:JAVA SDK(JDK)的安装: 官方下载地址: http://www.oracle.com/technetwork/java/javase/downl ...

  10. package.json中^符号和~符号前缀的区别

          开发中经常会使用npm install 安装依赖包,经常会看到^符号和~符号,现将二者的区别总结如下:     版本号 x.y.z : z :表示一些小的bugfix, 更改z的号, y ...