码迷,mamicode.com
首页 > 其他好文 > 详细

NS Simulation: Scheduling Events (examples inside)

时间:2014-10-27 00:25:01      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   color   io   ar   for   strong   sp   

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)                                                 bubuko.com,布布扣

       

       

    • 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:

       

      bubuko.com,布布扣

       

    • The following figure is a break down of the NS components that make up the above network:

       

      bubuko.com,布布扣

       

    • 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)                                                 bubuko.com,布布扣

       

     

     



     

  • 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)

标签:des   style   http   color   io   ar   for   strong   sp   

原文地址:http://www.cnblogs.com/forcheryl/p/4053022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!