CloudSim基本结构-2

本文详细介绍了Cloudsim模拟框架的工作流程,重点解析了futureQueue和evbuf两个关键队列的作用。在startSimulation()启动后,通过runStart()遍历实体并发送消息。sendNow()将消息放入futureQueue,然后进入死循环,通过runClockTick()不断处理和分发消息。processEvent负责将消息分发给相应实体,并调度新事件。直到futureQueue为空,模拟结束。整个过程中,实体的事件队列和消息队列相互作用,确保模拟的准确进行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消息队列

  • Cloudsim消息队列futureQueue,用于保存所有的Entity之间传递的消息;
  • SimEntity事件队列evbuf,用于保存Entity需要执行事件;

Cloudsim

  • 执行startSimulation(),开始模拟器工作;
  • 执行runStart()函数,表示开始模拟操作,把初始工作做好:其中是遍历Entity,执行Entity:startEntity()操作,每个实体执行自己的sendNow()产生消息给对应需要执行的其他实体;
  • sendNow()最终会调用Cloudsim里面的send操作将这些消息放倒futureQueue中,等待调用;

  • 死循环:跳出条件futureQueue队列为空
  • 执行runClockTick(),返回True时,消息队列为空,跳出死循环,其中:
  • 先扫描所有的Entity执行每个实体的消息队列;
  • 取出futureQueue队列中的第一个消息,执行processEvent,把消息分发给对应的实体;
  • 判断futureQueue队列是否为空;
  • 不空:循环遍历futureQueue队列,分发执行processEvent所有当前时刻,即event时间和系统clock相同时间的消息,分发给对应的实体(添加至自己的事件队列);此时队列即使处理完了,也是返回False;
  • 继续循环,执行runClockTick(),遍历Entity,由其清空/执行完自己的事件队列(这些事件是cloudSim执行processEvent中调度得到的),事件执行过程可能产生新的消息,进一步由cloudSim进行调度分配到对应的实体事件队列;
  • 此时由于Entity事件发生时产生新的消息,故futureQueue队列仍不为空;
  • Cloudsim继续遍历消息队列,把这些消息分发给对应的实体事件队列,死循环继续不跳出;
  • 继续循环,执行runClockTick(),遍历Entity,由其清空/执行完自己的事件队列,如果此时没有新的消息产生,那么CloudSim中消息队列为空;
  • 此时继续遍历futureQueue队列,发现队列为空,那么返回True,跳出死循环;

  • Cloudsim:finishSimulation(),遍历实体的所有事件队列;
  • Cloudsim:runStop();
### CloudSim云计算仿真框架介绍 CloudSim是由澳大利亚墨尔本大学云计算与分布式系统实验室开发的一款用于简化云平台建设和测试过程的工具[^1]。这款软件允许研究人员和开发者通过模拟环境来理解和优化云计算系统的性能。 #### 功能特点 作为一款强大的云计算模拟框架,CloudSim提供了丰富的功能特性,使得用户可以深入探究云计算的工作原理并验证各种理论或算法的有效性[^2]。具体来说: - **灵活的数据中心建模**:支持创建不同类型的虚拟机、主机以及网络连接。 - **多样的调度策略实现**:能够定义多种任务分配方式以评估其效率。 - **详细的日志记录能力**:有助于分析实验过程中产生的数据变化情况。 #### 使用流程概述 对于想要利用CloudSim开展研究工作的个人而言,掌握基本的操作步骤是非常重要的。以下是关于如何启动一次完整的仿真实验的大致描述[^3]: 在完成所有必要的准备工作之后(比如安装Java Development Kit (JDK), Apache Maven, Eclipse IDE等),可以从GitHub上下载最新版的CloudSim源代码,并按照官方文档中的指导逐步配置项目结构。当一切准备就绪时,则可以通过编写自定义脚本来设置特定场景下的参数值;运行完毕后记得调用相应API收集最终的结果集以便后续处理。 ```java // 获取已完成的任务列表 CloudletList newList = broker.getCloudletList(); // 停止整个网格计算进程 GridSim.stopGridSimulation(); // 输出任务详情表单 printCloudletList(newList); // 显示数据中心欠款信息 datacenter0.printDebts(); ``` 如果希望基于现有架构做出改进或是添加新的组件到平台上的话,在重新构建之前务必先熟悉相关类库的设计模式和技术细节,这样才能确保所作修改不会破坏原有逻辑关系。 #### 安装指南摘要 为了成功部署CloudSim,建议选用如下所示的一套兼容性强且稳定性高的软硬件组合方案[^4]: | 组件名称 | 推荐版本 | | --- | --- | | JDK | 1.7 或更高版本 | | Maven | 3.x 系列 | | Eclipse | JEE 版本 | 请注意以上仅为参考配置之一,实际操作前还需参照官方网站发布的说明文件确认最适配当前需求的具体选项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值