📜  分布式系统中互斥的 Suzuki-Kasami 算法

📅  最后修改于: 2022-05-13 01:56:11.738000             🧑  作者: Mango

分布式系统中互斥的 Suzuki-Kasami 算法

先决条件:分布式系统中的互斥

Suzuki-Kasami 算法是一种基于令牌的算法,用于在分布式系统中实现互斥。这是对 Ricart-Agrawala 算法的修改,Ricart-Agrawala 算法是一种基于许可(Non-token based)的算法,它使用REQUESTREPLY消息来确保互斥。

在基于令牌的算法中,如果站点拥有唯一令牌,则允许它进入其临界区。非基于令牌的算法使用时间戳对关键部分的请求进行排序,而基于令牌的算法中使用序列号。

每个临界区请求都包含一个序列号。此序列号用于区分旧请求和当前请求。

数据结构和符号:



  • 一个整数数组RN[1…N]
    站点S i保持RN i [1…N] ,其中RN i [j]是迄今为止通过来自站点S i 的REQUEST消息接收到的最大序列号。
  • 整数 LN[1…N]的数组
    该数组由令牌使用。 LN[J]是站点 S j最近执行的请求的序列号。
  • 一个队列Q
    令牌使用此数据结构来记录等待令牌的站点的 ID

算法:

  • 进入临界区:
    • 当站点 S i想要进入临界区并且它没有令牌时,它会增加其序列号RN i [i]并向所有其他站点发送请求消息REQUEST(i, sn) 以请求令牌.
      这里sn是 RN i [i] 的更新值
    • 当站点 S j收到来自站点 S i的请求消息REQUEST(i, sn) 时,它设置RN j [i]为 RN j [i]sn 的最大值,即RN j [i] = max( RN j [i] ] , sn )。
    • 更新RN j [i] 后,如果有令牌,站点 S j将令牌发送到站点 S i并且 RN j [i] = LN[i] + 1
  • 执行临界区:
    • 如果站点 S i获得了令牌,则它执行临界区。
  • 释放临界区:
    执行完 Site S i 后,退出临界区并执行以下操作:
    • 设置LN[i] = RN i [i]以指示其临界区请求RN i [i]已被执行
    • 对于每个站点 S j ,其 ID 不在令牌队列Q 中,如果RN i [j] = LN[j] + 1,则它将其 ID 附加到Q以指示站点 S j具有未完成的请求。
    • 上述更新后,如果队列Q不为空,则从Q中弹出一个站点ID,并将令牌发送到弹出的ID指示的站点。
    • 如果队列Q为空,则保留令牌

消息复杂度:
如果站点在临界区请求时或每个临界区执行最多 N 条消息时已持有空闲令牌,则该算法需要 0 条消息调用。这N条消息涉及

  • (N – 1) 条请求消息
  • 1 条回复消息

Suzuki-Kasami 算法的缺点:

  • 非对称算法:即使站点没有请求临界区,它也会保留令牌。根据对称算法的定义
    “在没有被请求的情况下,任何网站都无权访问其关键部分。”

表现:

  • 同步延迟为 0,如果站点在其请求时持有空闲令牌,则不需要任何消息。
  • 如果站点不持有空闲令牌,则最大同步延迟等于最大消息传输时间,并且每个临界区调用最多需要 N 条消息。