概述
• 为什么我们需要时间管理?
• 消息排序
• HLA 时间管理服务
• 总结
为什么我们需要时间管理?
• 消息延迟可能导致错误的解释
• C 见到目标被摧毁在开火之前
• 时间异常 - 可通过延迟传递“被摧毁”事件给 C 来消除
消息排序 - 因果顺序
• 基于 Lamport 的“发生在前”关系(1978)
• 将模拟器的执行视为一系列有序的动作
• 例如,发送/接收消息 规则:
- 如果动作 A 和 B 发生在同一模拟器中,且 A 在该模拟器内的动作序列中出现在 B 之前,则 A → B(即 A 发生在 B 之前)
- 如果 A 是消息发送,B 是接收同一消息,则 A → B
- 如果 A → B,且 B → C,则 A → C(传递性)
因果顺序
• 两个事件如果没有“发生在前”的关系,则被认为是并发的
• 因果顺序交付服务保证,如果 E1 → E2,则接收两条消息的每个模拟器都会先接收到 E1,再接收到 E2
• 并发事件可能以任何顺序交付给模拟器
• “发生在前”可以扩展到消息:
- 如果一个模拟器在发送另一条消息 M2 之前发送了消息 M1,则 M1 → M2
- 如果 M1 在模拟器发送另一条消息 M2 之前被交付给模拟器,则 M1 → M2
- 如果 M1 → M2,且 M2 → M3,则 M1 → M3
• 因此,对于坦克示例,因为坦克开火事件发生在目标被摧毁事件之前,分布式模拟执行将延迟传递目标被摧毁事件,直到它已经传递了坦克开火事件 因果顺序
• 如何实现因果排序? 在多播组中使用向量时钟
• 考虑一个由 N 个模拟器组成的组
• 每个模拟器 i 维护一个计数器向量 Ci,其中
- Ci[i] = 模拟器 i 发送到该组的消息数量
- Ci[j](j ≠ i)表示已经交付给模拟器 i 的来自 j 发送的组消息的数量
• 当模拟器 i 发送消息 M 时,它将 Ci[i] 增加 1,并在消息上放置一个带有新时钟值的向量时钟时间戳
• 向量时钟时间戳表明发送者接收到了哪些消息以及在发送 M 之前发送者已发送了哪些其他消息
• 时间戳因此提供了一个摘要,说明在因果上先于(→)M 的每个模拟器发送的消息数量
• 例如,模拟器 1 发送的消息 M 上的向量时钟时间戳(5, 9, 6)意味着在发送 M 之前:
- 模拟器 1 已经向该组发送了 4 条消息
- 模拟器 2 发送的 9 条消息已经交付给 1
- 模拟器 3 发送的 6 条消息已经交付给 1
• 因此,19 条消息在因果上先于(→)M,因此对于属于该组的任何模拟器来说,所有 19 条消息都必须在 M 交付之前被交付,以维持因果排序属性
因果和完全有序
- 因果顺序不保证关于并发事件的任何顺序
- 两个不同的模拟器可以看到相同的事件集在不同的顺序中,导致其他时间异常
两架蓝色飞机攻击红色 2
两个模拟器看到相同的事件集以不同的顺序导致的时间异常
• 如果因果顺序交付服务得到加强,不仅事件按因果顺序交付,所有模拟器也保证以相同顺序接收一组共同事件的消息,则可以解决问题
• 必须定义事件的完全顺序
• 因果与完全有序通信服务(CATOCS)确保:
- 如果 E1 → E2 且模拟器接收到 E1 和 E2 的消息,则 E1 将在 E2 之前被交付
- 如果两个模拟器都接收到任何两个事件 E1 和 E2 的消息,两者都将按相同顺序接收它们
时间戳顺序
- 在时间戳顺序(TSO)中,每个事件都被分配一个时间戳
- 消息按非递减时间戳的顺序交付给每个模拟器
- TSO 消除了可能发生的因果顺序和 CATOCS 产生的时间异常
- 假设包含相同时间戳的事件被所有模拟器以相同的顺序处理,TSO 确保适当地建模了事件的前后关系,并确保所有模拟器看到事件的相同排序
HLA 消息排序服务
HLA 提供两种类型的消息排序:
- 接收顺序(无序):消息以任意顺序传递给联邦
- 时间戳顺序(TSO):发送者为消息分配时间戳;连续消息以非递减时间戳传递给每个联邦
- 接收顺序最小化延迟,不防止时间异常
- TSO 防止时间异常,但延迟稍高
时间同步交付
考虑连接两个顺序的离散事件模拟器
在 HLA 中,逻辑时间与模拟时间同义
必须适当管理每个模拟器的逻辑时间推进,以确保没有模拟器接收到其过去的消息
HLA 时间管理(TM)服务定义了联邦推进其逻辑时间的协议;RTI 将确保不在联邦的过去交付 TSO 消息
HLA时间管理服务
推进逻辑时间
HLA TM 服务为联邦定义了推进逻辑时间的协议;逻辑时间仅在联邦明确请求推进时推进
- 时间推进请求:时间步进联邦
- 下一个事件请求:事件步进联邦
- 时间推进授权:RTI 调用以确认逻辑时间推进
如果联邦的逻辑时间为 T,RTI 保证不会将时间戳 < T 的 TSO 消息传递给联邦
联邦负责将逻辑时间推进与实时执行中的实际时间同步
时间推进请求(TAR)
- 通常由时间步进联邦使用
- 联邦调用时间推进请求(T)请求将其逻辑时间(LT)推进到 T RTI 交付所有时间戳 ≤ T 的 TSO 消息
- RTI 将联邦的时间推进到 T,当可以保证交付所有时间戳 ≤ T 的 TSO 消息时,调用时间推进授权(T)
- 授权时间始终与请求时间匹配
同步消息交付
目标:按时间戳顺序处理所有事件(本地和传入消息);为支持此目标,RTI 将:
- 按时间戳顺序交付消息
- 将交付与模拟时间推进同步
联邦:下一个本地事件的时间戳为 T
- 如果没有时间戳 < T 的 TSO 消息,推进到 T,处理本地事件
- 如果有时间戳 T’ ≤ T 的 TSO 消息,推进到 T’ 并处理 TSO 消息
下一个事件请求(NER)
• 联邦调用下一个事件请求(T)请求将其逻辑时间推进到下一个 TSO 消息的时间戳或 T,取较小者
• 如果下一个 TSO 消息的时间戳 T’ ≤ T
- RTI 交付下一个 TSO 消息,以及所有时间戳为 T’ 的其他消息
- RTI 发出时间推进授权(T’)
• 否则
- RTI 将联邦的时间推进到 T,调用时间推进授权(T)
HLA 中的乐观时间管理
HLA 对乐观联邦的支持
- 联盟可能包括保守和/或乐观联邦
- 联邦不知道其他联邦的本地时间管理机制(乐观或保守)
- 可能稍后取消的乐观事件不会交付给无法回滚的保守联邦
- 乐观事件可以交付给其他乐观联邦
- 各个联邦可能是顺序或并行模拟
刷新队列请求:类似于 NER,但
(1) 交付 RTI 的本地消息队列中的所有消息,
(2) 在发出时间推进授权前,不需要等待其他联邦
总结:HLA 时间管理
功能:
• 允许具有不同时间管理要求(及本地 TM 机制)的联邦在单一联盟执行中结合
- DIS 风格的训练模拟
- 具有严格实时约束的模拟
- 事件驱动的模拟
- 时间步进的模拟
- 乐观模拟
HLA 时间管理服务:
• 事件顺序
- 接收顺序交付
- 时间戳顺序交付
• 逻辑时间推进机制
- TAR
- NER
分布式虚拟环境:总结
• 或许是迄今为止分布式模拟技术的最主要应用
- 人在环中:训练、互动、多玩家视频游戏
- 硬件在环中
• 管理处理器间通信是关键
- 死亡推测技术
- 数据分发管理
• 实时执行是必须的
• 许多其他问题
- 地形数据库,一致的动态地形
- 实时建模和显示物理现象
- 硬件时钟的同步
- 人为因素