distributed mutual exclusion - bguos152/wiki.files/distributed... · 2015-06-17 · os 2015, meni...
TRANSCRIPT
![Page 1: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/1.jpg)
OS 2015, Meni Adler, Danny Hendler & Roie Zivan 1
Distributed Mutual Exclusion
Introduction
Ricart and Agrawala's algorithm
Raymond's algorithm
This presentation is based on the book: “Distributed operating-systems & algorithms” by Randy Chow and Theodore Johnson
![Page 2: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/2.jpg)
2 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Distributed mutual exclusion required (e.g.) for transaction processing on replicated data
We assume there are no failures o Processors do not fail
o Communication links do not fail
It is easy to implement mutual exclusion using totally-ordered timestamps o The first algorithm we show may use (e.g.) Lamport's timestamps
Distributed mutual exclusion: introduction
![Page 3: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/3.jpg)
3 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: high-level ideas
When you want to enter your CS o Record your timestamp
o Ask everyone else whether they “permit”
When asked for a permission o Halt response if in CS
o Halt response if in entry code with a smaller timestamp (we use total order between timestamps)
o Otherwise, “permit”
Upon exit from CS o Send halted responses (if any)
![Page 4: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/4.jpg)
4 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: data-structures
Per processor variables
timestamp current_time
Timestamp my_timestamp
integer reply_pending
boolean isRequesting
boolean reply_deferred[M]
Processor’s current
Lamport timestamp
![Page 5: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/5.jpg)
5 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: data-structures
Per processor variables
timestamp current_time
Timestamp my_timestamp
integer reply_pending
boolean isRequesting
boolean reply_deferred[M]
The timestamp of the
processor’s current
request
![Page 6: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/6.jpg)
6 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: data-structures
Per processor variables
timestamp current_time
Timestamp my_timestamp
integer reply_pending
boolean isRequesting
boolean reply_deferred[M] The number of permissions
that the processor still need to
collect before entering the CS
![Page 7: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/7.jpg)
7 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: data-structures
Per processor variables
timestamp current_time
Timestamp my_timestamp
integer reply_pending
boolean isRequesting
boolean reply_deferred[M]
True iff this processor is
requesting or using the CS
![Page 8: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/8.jpg)
8 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: data-structures
Per processor variables
timestamp current_time
Timestamp my_timestamp
integer reply_pending
boolean isRequesting
boolean reply_deferred[M]
Entry j is true iff this
processor deferred replying
to processor j’s request
![Page 9: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/9.jpg)
9 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: entry-code
Request_CS:
1 my_timstamp current_time
2 isRequesting TRUE
3 Reply_pending M-1
4 for every other processor j
5 send(REMOTE_REQUEST; my_timestamp)
6 wait until reply_pending = 0
Set the (Lamport)
timestamp of my request
![Page 10: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/10.jpg)
10 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: entry-code
Request_CS:
1 my_timstamp current_time
2 isRequesting TRUE
3 reply_pending M-1
4 for every other processor j
5 send(REMOTE_REQUEST; my_timestamp)
6 wait until reply_pending = 0
Mark that this processor is
requesting entry to CS
![Page 11: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/11.jpg)
11 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: entry-code
Request_CS:
1 my_timstamp current_time
2 isRequesting TRUE
3 reply_pending M-1
4 for every other processor j
5 send(REMOTE_REQUEST; my_timestamp)
6 wait until reply_pending = 0
Need to receive replies
from all other processors
![Page 12: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/12.jpg)
12 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: entry-code
Request_CS:
1 my_timstamp current_time
2 isRequesting TRUE
3 reply_pending M-1
4 for every other processor j
5 send(REMOTE_REQUEST; my_timestamp)
6 wait until reply_pending = 0 Request permission from
all other processors
![Page 13: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/13.jpg)
13 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: entry code
Request_CS:
1 my_timstamp current_time
2 isRequesting TRUE
3 reply_pending M-1
4 for every other processor j
5 send(REMOTE_REQUEST; my_timestamp)
6 wait until reply_pending = 0
When all other processors
reply – may enter the CS
![Page 14: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/14.jpg)
14 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: monitoring
CS_monitoring:
Wait until a REMOTE_REUQUEST or REPLY message is received
REMOTE_REQUEST(sender; request_time)
1. Let j be the sender of the REMOTE_REQUEST message
2. if (not is_requesting or my_timestamp > request_time)
3. send(j, REPLY)
4. else
5. reply_deferred[j]=TRUE
REPLY
4. reply_pending reply_pending-1
Listener thread to respond
to protocol messages at all
times
![Page 15: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/15.jpg)
15 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: monitoring
Upon receipt of remote request
CS_monitoring:
Wait until a REMOTE_REUQUEST or REPLY message is received
REMOTE_REQUEST(sender; request_time)
1. Let j be the sender of the REMOTE_REQUEST message
2. if (not is_requesting or my_timestamp > request_time)
3. send(j, REPLY)
4. else
5. reply_deferred[j]=TRUE
REPLY
4. reply_pending reply_pending-1
![Page 16: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/16.jpg)
16 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: monitoring
If should grant
processor j’th request
CS_monitoring:
Wait until a REMOTE_REUQUEST or REPLY message is received
REMOTE_REQUEST(sender; request_time)
1. Let j be the sender of the REMOTE_REQUEST message
2. if (not is_requesting or my_timestamp > request_time)
3. send(j, REPLY)
4. else
5. reply_deferred[j]=TRUE
REPLY
4. reply_pending reply_pending-1
![Page 17: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/17.jpg)
17 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: monitoring
Send reply to processor j
CS_monitoring:
Wait until a REMOTE_REUQUEST or REPLY message is received
REMOTE_REQUEST(sender; request_time)
1. Let j be the sender of the REMOTE_REQUEST message
2. if (not is_requesting or my_timestamp > request_time)
3. send(j, REPLY)
4. else
5. reply_deferred[j]=TRUE
REPLY
4. reply_pending reply_pending-1
![Page 18: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/18.jpg)
18 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: monitoring
Otherwise, defer replying
to this request
CS_monitoring:
Wait until a REMOTE_REUQUEST or REPLY message is received
REMOTE_REQUEST(sender; request_time)
1. Let j be the sender of the REMOTE_REQUEST message
2. if (not is_requesting or my_timestamp > request_time)
3. send(j, REPLY)
4. else
5. reply_deferred[j]=TRUE
REPLY
4. reply_pending reply_pending-1
![Page 19: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/19.jpg)
19 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: monitoring
Upon receiving a reply,
decrement reply_pending
CS_monitoring:
Wait until a REMOTE_REUQUEST or REPLY message is received
REMOTE_REQUEST(sender; request_time)
1. Let j be the sender of the REMOTE_REQUEST message
2. if (not is_requesting or my_timestamp > request_time)
3. send(j, REPLY)
4. else
5. reply_deferred[j]=TRUE
REPLY
4. reply_pending reply_pending-1
![Page 20: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/20.jpg)
20 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: exit section
Release_CS:
1. is_requesting false
2. For j=1 through M (other than this processor's ID)
3. if reply_deferred[i]=TRUE
4. send(j, REPLY)
5. reply_deferred[j]=FALSE
No longer requesting CS
![Page 21: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/21.jpg)
21 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: exit section
Release_CS_monitoring:
1. is_requesting false
2. For j=1 through M (other than this processor's ID)
3. if reply_deferred[i]=TRUE
4. send(j, REPLY)
5. reply_deferred[j]=FALSE
For each processor awaiting a reply from
this processor, send reply and mark that
there are no more deferred replies.
![Page 22: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/22.jpg)
22 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Ricart and Agrawal's algorithm: comments
What is the number of messages required for each passage through the critical section?
2(M-1) messages.
Next, we’ll see a more message-efficient algorithm…
Why is mutual exclusion satisfied?
Because Lamport timestamps maintain total order and causality
![Page 23: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/23.jpg)
23 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: high-level ideas
There is a single token in the system o Only the holder of the token may enter the CS
Processors communicate by using a static tree structure o Requests for the token are sent along tree edges
o The token itself is sent when available and requested
Processors maintain FIFO request queues to prevent starvation
At most a logarithmic number of messages per entry
![Page 24: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/24.jpg)
24 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: high-level ideas (cont'd)
Algorithm invariant: tree is always oriented towards token holder
Token
holder
![Page 25: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/25.jpg)
25 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: data-structures
Per processor variables
Boolean token_holder
Boolean inCS
current_dir
requests_queue
True iff this processor
currently holds the token
![Page 26: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/26.jpg)
26 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: data-structures
Per processor variables
Boolean token_holder
Boolean inCS
current_dir
requests_queue True iff this processor is
currently in the critical section
![Page 27: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/27.jpg)
27 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: data-structures
Per processor variables
Boolean token_holder
Boolean inCS
current_dir
requests_queue
The neighbor that is in the
direction of the token (or self if this
processor holds the token)
![Page 28: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/28.jpg)
28 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: data-structures
Per processor variables
Boolean token_holder
Boolean inCS
current_dir
requests_queue
FIFO queue holding IDs of neighbors
from which requests for the token
arrived (may also contain self)
![Page 29: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/29.jpg)
29 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
If this processor currently holds the token
it immediately enters CS. Otherwise…
![Page 30: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/30.jpg)
30 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
If requests queue is empty, send a request
for the token. (If queue is non-empty, a
request for the token was already sent.)
![Page 31: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/31.jpg)
31 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
Enqueue ‘self’ to requests queue since this
request is on behalf of this processor
![Page 32: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/32.jpg)
32 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
When token_holder is set, this processor
has the token and may enter the CS
![Page 33: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/33.jpg)
33 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
No longer in critical section
![Page 34: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/34.jpg)
34 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
If requests are waiting…
![Page 35: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/35.jpg)
35 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
Dequeue the next hop for the earliest
request and send the TOKEN to it.
Also, update orientation of the token.
![Page 36: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/36.jpg)
36 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
This processor no longer holds token
![Page 37: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/37.jpg)
37 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: entry and exit code
Request_CS:
1 If not token_holder
2 if requests_queue.isEmpty( )
3 send(current_dir, REQUEST)
4 requests_queue.enqueue(self)
5 wait until token_holder is true
6 inCS true
Release_CS:
7. inCS false
8. If not requests_queue.isEmpty( )
9. current_dir requests_queue.dequeue( )
10. send(current_dir, TOKEN)
11. token_holder false
12. if not requests_queue.isEmpty( )
13. send(current_dir, REQUEST)
If there are more requests in this
processor’s queue, send another
request for the token
![Page 38: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/38.jpg)
38 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Listener thread to respond
to protocol messages at all
times
![Page 39: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/39.jpg)
39 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Upon a request.
If current processor holds token…
![Page 40: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/40.jpg)
40 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
If current processor in CS then
request must wait, enqueue the
direction of requesting processor
![Page 41: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/41.jpg)
41 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Otherwise current processor holds the
token but is not in CS, hence requests
queue is empty.
Send token to where the request came
from, mark that current processor no
longer holds token, and the new
orientation of the token…
![Page 42: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/42.jpg)
42 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Otherwise current processor does not hold the token…
![Page 43: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/43.jpg)
43 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
If requests queue is empty, send request in the
direction of the token…
![Page 44: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/44.jpg)
44 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Enqueue the direction of this request…
![Page 45: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/45.jpg)
45 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Upon the arrival of the token…
![Page 46: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/46.jpg)
46 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Dequeue oldest request and set new
orientation of the token to its direction
![Page 47: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/47.jpg)
47 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
If request was by this processor, mark that it
currently has the token and may enter the CS
![Page 48: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/48.jpg)
48 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
Otherwise, send the token in
the direction of the request
![Page 49: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/49.jpg)
49 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: monitoring Monitor_CS:
1 while (true)
2 wait for a REQUEST or a TOKEN message
REQUEST
3. if token_holder
4. if inCS
5. requests_queue.enqueue(sender)
6. else
7. current_dir sender
8. send(current_dir, TOKEN)
9. token_holder false
10. else
11. if requests_queue.isEmpty()
12. send(current_dir,REQUEST)
13. requests_queue.enqueue(sender)
TOKEN
14. current_dir requests_queue.dequeue( )
15. if current_dir = self
16. token_holder true
17. else
18. send(current_dir, TOKEN)
19. if not requests_queue.isEmpty( )
20. send(current_dir, REQUEST)
If the queue is non-empty, send
another request for the token
![Page 50: Distributed Mutual Exclusion - BGUos152/wiki.files/Distributed... · 2015-06-17 · OS 2015, Meni Adler, Danny Hendler & Roie Zivan 2 Distributed mutual exclusion required (e.g.)](https://reader034.vdocuments.site/reader034/viewer/2022042803/5f465bb152aef340a71ff40d/html5/thumbnails/50.jpg)
50 OS 2015, Meni Adler, Danny Hendler & Roie Zivan
Raymond's algorithm: execution scenario