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. springboot pom.xml文件

    pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...

  2. 2019年UX设计新趋势

    UX设计总是在不断变化中.最近短短两年的时间里,我们已经看到,很多地方都大规模采用颠覆性技术,比如语音用户界面,混合现实和智能家居设备.设计这些体验的实际过程可能保持不变,但新技术的出现引发了新的行为 ...

  3. OC SEL (@selector) 原理及使用总结(转)

    SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应 ...

  4. 8.28_the end

    HomeWork the first level 1. 盒模型 #parent { width: 100px; height: 100px; background:black; overflow: h ...

  5. poj 2954 Triangle

    pick公式+gcd公式 #include<iostream> #include<map> #include<string> #include<cstring ...

  6. 原创经验:微信小程序开发总结

    学习时间不短了.今天公司不加班总结一下我的开发经验吧,以下都是我认为很重要的总结哦!写下来让我自己也记得更清楚,同时希望可以帮助到有需要的同学哦 一: 参数传值的方法 1:  data-id我们可以给 ...

  7. JavaScript使用Object.defineProperty方法实现双数据绑定

    Object.defineProperty这个方法非常值得学习,很多mvc框架中的双向数据绑定就是通过它来实现的. 本着互联网分享精神,今天我就将我自己的见解分享给大家,希望能有所帮助. 开始使用 O ...

  8. Swift可选链

    //可选链测试 class Person{ var residence:Residence! var name:String init(name:String){ self.name = name } ...

  9. Hadoop实战之二~ hadoop作业调度详解(1)

    对Hadoop的最感兴趣的地方,也就在于Hadoop的作业调度了,在正式介绍如何搭建Hadoop之前,深入理解一下Hadoop的作业调度很有必要.我们不一定能用得上Hadoop,但是如果理通顺Hado ...

  10. isPrototypeOf、instanceof、hasOwnProperty函数整理

    isPrototypeOf 作用:检测一个对象是否是另一个对象的原型.或者说一个对象是否被包含在另一个对象的原型链中 var p = {x:1};//定义一个原型对象 var o = Object.c ...