现在的位置: 首页 > 综合 > 正文

glomosim仿真的运行过程

2013年07月20日 ⁄ 综合 ⁄ 共 1257字 ⁄ 字号 评论关闭

1 glomosim系统启动的入口是.\main\driver.pc文件中的main()函数。main()函数首先调用parsec_main()函数。parsec_main()函数是parsec运行库函数,我们看不到它的源代码。

2 parsec系统的入口是driver实体。parsec系统启动时首先执行driver实体的代码。driver实体首先读取核心配置文件,解

析出仿真场景区域范围、仿真随机数种子、仿真总时间、网络中节点总数等配置信息,随后生成取名为partitionEntityNameGLOMOPartition类型的实体,然后driver实体根据网络节点初始位置配置参数NODE-PLACEMENT的设置值确定各节点的初始位置,保存在消息NodePositionMsg中,接着利用send方法把消息NodePositionMsg发送给GLOMOPartition类型的实体partitionEntityName。此后driver实体将暂停以等待实体partitionEntityName完成初始化后发送过来信息Ready。

3 GLOMOPartition类型的实体partitionEntityName被创建时就立即申请所需内存空间。当接收到driver实体发送过来的消息

NodePositionMsg时,实体partitionEntityName接收到根据消息中的信息更新本区域实体中各节点的初始位置,然后构造全局普通事件堆heapSplayTree,接着针对各节点各层模块调用其初始化函数以完成仿真初始化工作。初始化完成后实体partitionEntityName向driver实体发送信息Ready。

4 实体driver 接收到信息Ready 后得知partitionEntityName已经初始化完毕,所以它向partitionEntityName发送信息

StartSim命令它开始仿真。

5 实体partitionEntityName接收到信息StartSim后即进入仿真事件处理循环。该循环将持续下去直到事件队列为空或设定的仿

真时间已到。每次循环过程中,实体partitionEntityName从全局事件队列中取出队首事件,判断该事件由哪个节点处理,根据该事件的某些属性判断该事件应由哪个层次处理,并把该事件交给目标节点的相应层次的调度模块。该层调度模块进行进一步调度,将事件交给相应节点的具体功能模块进行处理。


6 退出循环后即进入仿真收尾阶段。该阶段中实体partitionEntityName将依次调用各节点的各层模块的收尾函数以将仿真过程
中搜集的统计数据写入本区域实体的仿真数据临时文件中。仿真收尾阶段中,实体partitionEntityName针对每个节点依次调用radio、mac、网络层、传输层和应用层的收尾调度模块。收尾阶段完成后仿真过程结束,至此函数parsec_main()执行完毕,系统重新回到函数main()的控制下。函数main()中parsec_main()后的代码继续执行。

抱歉!评论已关闭.