#algorithmes #fr #distributedalgorithms #sorbonne #mutex
L'algorithme de Susuki-Kasami
À chaque envoi du jeton, le processus expéditeur envoie aussi la file d'attente et un tableau qu'a l'information de la dernière demande d'entrée en section critique.
Types de message
REQUEST (S_j, k). indique que siteS_jest en train de faire sak-ème demande d'entrée en section critiqueTOKEN (Q, LN)Q. une file d'attente de demandes pour entrer en section critiqueLN.LN[i]indique le numéro de la dernière demande d'entrée en section critique du siteS_iqui a été satisfaite
l'algorithme
variables
etat_i.req,not_req,crit_seqtoken_iRN_iRN_i[j]est le numéro de la dernière requête reçue de la part du siteS_jRN_i[i]correspond au nombre de requêtes faites par le siteS_i
LN_i. vecteur de N positions de requêtes satisfaites
initialisation (S_i)
token = S_i == S_1
etat = not_req
RN = [ 0 for j in 1...N ]
LN = [ 0 for j in 1...N ]
Q = {}
Request_CS(i)
etat = req
if token == false
RN[i]++
diffuser (REQUEST (S_i, RN[i]))
/* attendre token == true */
etat = crit_sec
Release_CS(i)
LN[i] = RN[i]
for site in [ 1,...,N ]
if site != i et not site dans Q and RN[site] > LN[site]
Q.push_back(site)
if Q not empty
token = false
site = Q.pop()
send(TOKEN(Q, LN)) à site
etat = not_req
Receive_request_CS(S_j, REQUEST(j, k))
RN[j] = max(RN[j], k)
if token == true and etat == not_req and RN[j] > LN[j]
token = false
send(TOKEN(Q, LN)) à S_j
Receive_token(TOKEN(Q, LN))
token = true
LN = TOKEN.LN
Q = TOKEN.Q
Evaluation
- Nombre de messages par exécution de section critique
- N, si le processus n'a pas le jeton
- 0, si le processus a le jeton
- vivacité. garantie par l'ordre FIFO de la file Q
- inconvenient. pas extensible