2,CloudSim的實體:CloudSimShutdown、CloudInformationService、Datacenter、DatacenterBroker
模擬的全過程
啓動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的createVMsInDatacenter的simEvent存入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的submitCloudlets的simEvent存入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發送finishExecution的simEvent存入deferredQueue中。
第十次循環:
1,啓動runClockTick()方法處理DeferredQueue。Datacenter的processEvent()的processEventVmDestroy處理clearDatacenter的simEvent,shutdownEntity處理finishExecution的simEvent。
2,啓動runClockTick()方法處理futureQueue。把基本參數設置爲模擬結束。