Suzuki–Kasami algorithm

From testwiki
Jump to navigation Jump to search

Template:More citations needed

The Suzuki–Kasami algorithm[1] is a token-based algorithm for achieving mutual exclusion in distributed systems. The process holding the token is the only process able to enter its critical section. ***

This is a modification to Ricart–Agrawala algorithm[2] in which a REQUEST and REPLY message are used for attaining the critical section, but in this algorithm, a method was introduced in which a seniority vise and also by handing over the critical section to other node by sending a single PRIVILEGE message to other node. So, the node which has the privilege it can use the critical section and if it does not have one it cannot. If a process wants to enter its critical section and it does not have the token, it broadcasts a request message to all other processes in the system. The process that has the token, if it is not currently in a critical section, will then send the token to the requesting process. The algorithm makes use of increasing Request Numbers to allow messages to arrive out-of-order.

Algorithm description

Let n be the number of processes. Each process is identified by an integer in 1,...,n.

Data structures

Each process maintains one data structure:

  • an array RNi[n] (for Request Number), i being the ID of the process containing this array, where RNi[j] stores the last Request Number received by i from j

The token contains two data structures:

  • an array LN[n] (for Last request Number), where LN[j] stores the most recent Request Number of process j for which the token was successfully granted
  • a queue Q, storing the ID of processes waiting for the token

Algorithm

Requesting the critical section (CS)

When process i wants to enter the CS, if it does not have the token, it:

  • increments its sequence number RNi[i]
  • sends a request message containing new sequence number to all processes in the system

Releasing the CS

When process i leaves the CS, it:

  • sets LN[i] of the token equal to RNi[i]. This indicates that its request RNi[i] has been executed
  • for every process k not in the token queue Q, it appends k to Q if RNi[k]=LN[k]+1. This indicates that process k has an outstanding request
  • if the token queue Q is not empty after this update, it pops a process ID j from Q and sends the token to j
  • otherwise, it keeps the token

Receiving a request

When process j receives a request from i with sequence number s, it:

  • sets RNj[i] to max(RNj[i],s) (if s<RNj[i], the message is outdated)
  • if process j has the token and is not in CS, and if RNj[i]==LN[i]+1 (indicating an outstanding request), it sends the token to process i

Executing the CS

A process enters the CS when it has acquired the token.

Performance

  • Either 0 or N messages for CS invocation (no messages if process holds the token; otherwise N1 requests and 1 reply)
  • Synchronization delay is 0 or N (N1 requests and 1 reply)

Notes on the algorithm

  • Only the site currently holding the token can access the CS
  • All processes involved in the assignment of the CS
  • Request messages sent to all nodes
  • Used to keep track of outdated requests
  • They advance independently on each site

The main design issues of the algorithm:

  • Telling outdated requests from current ones
  • Determining which site is going to get the token next

References

Template:Reflist

  1. Ichiro Suzuki, Tadao Kasami, [1], ACM Transactions on Computer Systems, Volume 3 Issue 4, Nov. 1985 (pages 344 - 349)
  2. Ricart, Glenn, and Ashok K. Agrawala. "An optimal algorithm for mutual exclusion in computer networks." Communications of the ACM 24.1 (1981): 9-17.