120 likes | 264 Vues
Raymond Mutual Exclusion. Actions. <Upon request> Request.(h.j) = Request.(h.j) {j} h.j = k / h.k = k / j Request.k h.k = j, h.j = j, Request.k = Request.k – {j}. Actions. h.j = j Access critical section. Slight modification. h.j = k / h.k = k / j Request.k /
E N D
Actions <Upon request> Request.(h.j) = Request.(h.j) {j} h.j = k /\ h.k = k /\ j Request.k h.k = j, h.j = j, Request.k = Request.k – {j}
Actions h.j = j Access critical section
Slight modification h.j = k /\ h.k = k /\ j Request.k /\ (P.j = k \/ P.k = j) h.k = j, h.j = j, Request.k = Request.k – {j}
Fault-Tolerant Mutual Exclusion • What happens if the tree is broken due to faults? • A tree correction algorithm could be used to fix the tree • Example: we considered one such algorithm before
However, • Even if the tree is fixed, the holder relation may not be accurate
Invariant for holder relation • What are the conditions that are always true about holder relation?
Invariant • h.j {j, P.j} ch.j • P.j j (h.j = P.j \/ h.(P.j) = j) • P.j j (h.j = P.j /\ h.(P.j) = j) • Plus all the predicates in the invariant of the tree program
Recovery from faults h.j {j, P.j} ch.j h.j = P.j
Recovery from faults P.j j /\ (h.j = P.j \/ h.(P.j) = j) h.j = P.j
Recovery from Faults P.j j /\ (h.j = P.j /\ h.(P.j) = j) h.(P.j) = P.(P.j)