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. Java super和this小结

    区别 this() / this. super() / super. 功能 调用本类构造.方法.属性 调用父类构造.方法.属性 操作方法 先查找本类是否有制定的调用结构,如果没有则调用父类 直接调用父 ...

  2. vue 2.0创建新项目

    参考链接  https://segmentfault.com/a/1190000011275993 背景在安装完node的基础上,机器什么都没安装参考上述链接 一.下载vue $ cnpm insta ...

  3. lucene关于IndexReader总结

    IndexReader.使用过程中有时会出现document被删除,reader还是原来的reader没有改变,所以使用openifchanged保证, 又因为IndexReader 初始化很耗费资源 ...

  4. 【转】@RequestParam @RequestBody @PathVariable 等参数绑定注解详解

    @RequestParam @RequestBody @PathVariable 等参数绑定注解详解 2014-06-02 11:24 23683人阅读 评论(2) 收藏 举报 目录(?)[+] 引言 ...

  5. windows下查看 mysql二进制日志文件

    有时候需要将linux中的mysql从线上linux种down到windows查看,但是这种binlog日志是二进制的,应该怎么查看呢? 使用window上的mysqlbinlog.exe将其转码到另 ...

  6. 微信小程序wx:for循环

    最近做微信小程序碰到了一些问题,和wx:for循环相关,wx:for有很多用途,例如可以用于swiper中图片的循环,也就是所谓的轮播图,也可以用于其它的循环,可以大大地减少代码量. 但wx:for. ...

  7. 001.開始使用ASP.NET Web API 2(一)

    原文鏈接:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web ...

  8. 三:Springboot整合Redis

    一:springboot整合redis redis版本:3.0.0 运行环境:linux 1.安装redis 1.1安装gcc yum install gcc-c++ 1.2解压redis.3.0.0 ...

  9. SSM+PageHelper+jqGrid实现数据分页

    前言 前几天自己写了一个分页功能,代码逻辑写的很乱今天发现jqGrid这个工具是真好用,故记录下来方便以后使用首先是PageHelper后台分页工具PageHelper的原理是基于拦截器实现的 具体流 ...

  10. node.js内存缓存的性能情况

    1. WEB 服务性能测试和优化 1.1   测试环境搭建 网络环境:内网 压力测试服务器: 服务器系统:Linux 2.6.18 服务器配置:Intel® Xeon™ CPU 3.40GHz 4 C ...