CloudSim源碼分析-example1的startSimulation的執行步驟

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。把基本參數設置爲模擬結束。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章