📜  Birman Schiper Stephenson协议

📅  最后修改于: 2021-08-25 10:10:18             🧑  作者: Mango

该算法用于维持消息的因果顺序,即首先应首先接收发送的消息。如果发送(M1)–>发送(M2),则对于所有接收消息M1和M2的进程,应在M2之前接收M1。

特征 :

  • 基于广播的消息传递。
  • 消息的大小很小。
  • 更多没有的邮件已发送。
  • 有限的州信息。

关键点 :

  • 每个进程在发送消息时将其矢量时钟加1。
  • 如果该进程已收到其之前的所有消息,则将消息传递给该进程。
  • 否则缓冲消息。
  • 更新该进程的向量时钟。

参考 :

  • 工艺:P i
  • 事件:e ij ,其中i:process是数字,而j:第i个进程中的第j个事件。
  • T m :消息m的矢量时间戳。
  • C i与进程P i相关的矢量时钟;j个元素为C i [j],包含过程P j中当前时间的P i最新值。

协议 :
P i向P j发送消息–

  • P i使C i [i]递增,并为消息m设置时间戳t m = C i [i]。

P j从P i接收消息–

  • 当P j ,j!= i接收到带有时间戳t m的m时,它将消息的传递延迟到两个都如下。
    Cj[i] = tm[i] - 1; and
    for all k <= n and k != i, Cj[k] <= tm[k].
  • 当消息传递到P j时,更新P j的矢量时钟。
  • 检查缓冲区,看是否可以传送。

例子 –

  • 所有进程的初始状态为000。
  • M1从P3广播到P1和P2。 e31将向量时钟更新为(001)并发送P1和P2。
  • P2接受带有时间戳(001)的M1,因为当将其与初始时间戳(即000)进行比较时,它会发现M1是它正在接收的第一条消息。
  • 现在我们考虑在M1到达P1之前,P2将M2发送给P1和P3,并带有时间戳(011)。
  • P1不能接受M2,因为在将M2的时间戳与其初始时间戳进行比较时,发现差异,因为P1没有早期时间戳(001)的消息,因此M2存储在缓冲区中。
  • 现在,M1被P1接收并接受。
  • M2从缓冲区中删除并被P1接受。
  • M3被P3接受,因为时间戳没有差异。