CloudSim源码分析-example1的startSimulation的执行步骤

来源:互联网 发布:www.javzoo最新域名 编辑:程序博客网 时间:2024/05/21 21:33
1,CloudSim主要有两个队列,一是实体队列entities(当所有实体启动startEntity(),用来存放所有实体的对象),二是事件队列,分为futureQueue(等待队列),deferredQueue(延时队列)(启动实体后,存放实体的的事件)。
2,CloudSim的实体:CloudSimShutdownCloudInformationServiceDatacenterDatacenterBroker
模拟的全过程
启动startSimulation()内的run()方法
 1) 启动实体的过程
      1,启动实体runStart()开始遍历实体的startEntity()方法,如最开始实体队列中存有Datacenter,DatacenterBroker两个实体。
      2,Datacenter和DatacenterBroker中的就会sendNow()->send()->schedule()->send()创建simEvent的对象e(Datacenter的事件是Registration(这事件的执行实体已经为CIS),DatacenterBroker的事件是Query),再把对象e存入futureQueue。
2)启动事件的执行过程
第一次循环:
       1,启动runClockTick()方法处理DeferredQueue,这次循环因为启动实体时为载入simEvent,所以没有执行。
       2,启动runClockTick()方法处理futureQueue,队列中存在Registration,Query两个simEvent存入deferredQueue中。
第二次循环:
       1,启动runClockTick()方法处理DeferredQueue。CIS的processEvent()处理Registration事件,向resList(注册列表)增加信息。DatacenterBroker的processEvent()处理Query事件,将数据中心的基础硬件资源(数据中心特征)对象存入map集合,并向Datacenter发送Get characteristics的simEvent,即存入futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在Get characteristics的simEvent存入deferredQueue。
第三次循环:
        1,启动runClockTick()方法处理DeferredQueue。Datacenter的processEvent()处理Get characteristics事件,取出DatacenterBroker的ID。并向DatacenterBroker发送DatacenterBroker所需要硬件信息的simEvent,即加入了futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在发送DatacenterBroker需要的硬件信息simEvent存入deferredQueue中。
第四次循环:
       1,启动runClockTick()方法处理DeferredQueue。DatacenterBroker的processEvent()处理simEvent,處理數據中心對DatacenterBroker請求數據中心的一些基礎設施的請求,發送回來的迴應事件。并向Datacenter发送createVMsInDatacenter的SimEvent,即存入futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在发送给Datacenter的createVMsInDatacentersimEvent存入deferredQueue中。
第五次循环:
      1,启动runClockTick()方法处理DeferredQueue。Datacenter的processEvent()处理createVMsInDatacenter的simEvent。根据需求,创建虚拟机。并发送创建虚拟机成功与否的simEvent给DatacenterBroker,即加入futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在发送给DatacenterBroker的发送创建虚拟机成功与否simEvent存入deferredQueue中。
第六次循环:
      1,启动runClockTick()方法处理DeferredQueue。DatacenterBroker的processEvent()处理createVMsInDatacenter是否成功的simEvent。并向Datacenter发送submitCloudlets的simEvent。即存入futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在发送给Datacenter的submitCloudletssimEvent存入deferredQueue中。
第七次循环:
      1,启动runClockTick()方法处理DeferredQueue。Datacenter的processEvent()处理submitCloudlets的simEvent。并向DatacenterBroker发送submitCloudlets成功与否的simEvent。即存入futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在发送给DatacenterBroker的submitCloudlets成功与否simEvent存入deferredQueue中。
第八次循环:
      1,启动runClockTick()方法处理DeferredQueue。DatacenterBroker的processEvent()处理submitCloudlets成功与否的simEvent。并向DatacenterBroker发送云任务反馈信息的simEvent。即存入futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在发送给DatacenterBroker云任务反馈信息simEvent存入deferredQueue中。
第九次循环:
      1,启动runClockTick()方法处理DeferredQueue。DatacenterBroker的processEvent()处理云任务反馈信息的simEvent。并向Datacenter发送clearDatacenter和向DatacenterBroker发送finishExecution的simEvent。即存入futureQueue。
       2,启动runClockTick()方法处理futureQueue,队列中存在发送给Datacenter的clearDatacenter和向DatacenterBroker发送finishExecutionsimEvent存入deferredQueue中。
第十次循环:
      1,启动runClockTick()方法处理DeferredQueue。Datacenter的processEvent()的processEventVmDestroy处理clearDatacenter的simEvent,shutdownEntity处理finishExecution的simEvent。
       2,启动runClockTick()方法处理futureQueue。把基本参数设置为模拟结束。
0 0
原创粉丝点击