Algorithm description Suzuki–Kasami algorithm




1 algorithm description

1.1 data structures
1.2 algorithm

1.2.1 requesting critical section (cs)
1.2.2 releasing cs
1.2.3 receiving request
1.2.4 executing cs







algorithm description

let



n


{\displaystyle n}

number of processes. each process identified integer in



1
,
.
.
.
,
n


{\displaystyle 1,...,n}

.


data structures

each process maintains 1 data structure:



an array



r
n
[
n
]


{\displaystyle rn[n]}

(for request number),



r

n

i


[
j
]


{\displaystyle rn_{i}[j]}

stores last request number received



j


{\displaystyle j}



the token contains 2 data structures:



an array



l
n
[
n
]


{\displaystyle ln[n]}

(for last request number),



l
n
[
j
]


{\displaystyle ln[j]}

stores recent request number of process



j


{\displaystyle j}

token granted
a queue q, storing id of processes waiting token

algorithm
requesting critical section (cs)

when process



i


{\displaystyle i}

wants enter cs, if not have token, it:



increments sequence number



r

n

i


[
i
]


{\displaystyle rn_{i}[i]}


sends request message containing new sequence number processes in system

releasing cs

when process



i


{\displaystyle i}

leaves cs, it:



sets



l
n
[
i
]


{\displaystyle ln[i]}

of token equal



r

n

i


[
i
]


{\displaystyle rn_{i}[i]}

. indicates request



r

n

i


[
i
]


{\displaystyle rn_{i}[i]}

has been executed
for every process



k


{\displaystyle k}

not in token queue



q


{\displaystyle q}

, appends



k


{\displaystyle k}





q


{\displaystyle q}

if



r

n

i


[
k
]
=
l
n
[
k
]
+
1


{\displaystyle rn_{i}[k]=ln[k]+1}

. indicates process



k


{\displaystyle k}

has outstanding request
if token queue



q


{\displaystyle q}

nonempty after update, pops process id



j


{\displaystyle j}





q


{\displaystyle q}

, sends token



j


{\displaystyle j}


otherwise, keeps token

receiving request

when process



j


{\displaystyle j}

receives request



i


{\displaystyle i}

sequence number



s


{\displaystyle s}

, it:



sets



r

n

j


[
i
]


{\displaystyle rn_{j}[i]}





m
a
x
(
r

n

j


[
i
]
,
s
)


{\displaystyle max(rn_{j}[i],s)}

(if



s
<
r

n

j


[
i
]


{\displaystyle s<rn_{j}[i]}

, message outdated)
if process



i


{\displaystyle i}

has token , not in cs, , if



r

n

i


[
j
]
==
l
n
[
j
]
+
1


{\displaystyle rn_{i}[j]==ln[j]+1}

(indicating outstanding request), sends token process



i


{\displaystyle i}



executing cs

a process enters cs when has acquired token.







Comments

Popular posts from this blog

Light cavalry divisions (DLC, Division Légère de Cavalerie) List of French divisions in World War II

History VMFA-121

Biography Pavel Yablochkov