拜占庭共享内存与分布式计算模拟
拜占庭共享内存
在研究拜占庭故障对共享内存协议的影响时,需先定义合理模型。假设共享内存按进程划分,各进程只能写入自身内存位置,但可读取任意位置。若不设此限制,故障进程可能覆盖所有内存,使非平凡任务无法完成。具体而言,故障进程可随意写入自身内存,但不能写入非故障进程的内存。与崩溃故障情况类似,非故障进程可进行即时快照,即写入值后立即对任意内存区域进行原子快照。
尝试将崩溃故障模型中的共享内存 k - 集一致性和重心一致性协议应用到拜占庭环境时,会遇到障碍。在拜占庭模型中,进程只有在至少 t + 1 个不同进程写入某输入值时,才能“信任”该值。编写模仿消息传递协议的 getQuorum() 协议和 k - 集一致性协议相对容易。
然而,解决重心一致性问题存在困难。例如,有四个进程 P、Q、R 和 S,其中 S 是故障进程。P 输入值为 u,Q 输入值为 v。P 和 Q 分别将值写入共享内存,S 写入 u,P 进行快照,看到两个 u 和一个 v,于是接受 u 拒绝 v。之后,故障进程 S 将之前的 u 覆盖为 v,Q 进行快照,看到两个 v 和一个 u,接受 v 拒绝 u。尽管 P 和 Q 都接受了有效输入集,但这些集合之间不存在包含关系,即便它们是通过原子快照组装的。
解决重心一致性的简单方法是在读写模型中模拟消息传递模型。每个进程有一个数组,第 i 个位置保存其发送的第 i 条消息,若未发送则为 ⊥。当 P 要检查来自 Q 的消息时,从上次读取的位置开始遍历 Q 的数组,“接收”找到的每条消息,直到遇到空位置。
对于满足 n + 1 > (dim(I) + 2)t 的条件,一个严格无色任务 (I, O,
超级会员免费看
订阅专栏 解锁全文
613

被折叠的 条评论
为什么被折叠?



