Книга: Distributed operating systems
3.3.2. A Ring Algorithm
3.3.2. A Ring Algorithm
Another election algorithm is based on the use of a ring, but without a token. We assume that the processes are physically or logically ordered, so that each process knows who its successor is. When any process notices that the coordinator is not functioning, it builds an ELECTION message containing its own process number and sends the message to its successor. If the successor is down, the sender skips over the successor and goes to the next member along the ring, or the one after that, until a running process is located. At each step, the sender adds its own process number to the list in the message.
Eventually, the message gets back to the process that started it all. That process recognizes this event when it receives an incoming message containing its own process number. At that point, the message type is changed to COORDINATOR and circulated once again, this time to inform everyone else who the coordinator is (the list member with the highest number) and who the members of the new ring are. When this message has circulated once, it is removed and everyone goes back to work.
Fig. 3-13. Election algorithm using a ring.
In Fig. 3-13 we see what happens if two processes, 2 and 5, discover simultaneously that the previous coordinator, process 7, has crashed. Each of these builds an ELECTION message and starts circulating it. Eventually, both messages will go all the way around, and both 2 and 5 will convert them into COORDINATOR messages, with exactly the same members and in the same order. When both have gone around again, both will be removed. It does no harm to have extra messages circulating; at most it wastes a little bandwidth.
- Comparison of Expressions in bash
- Number Comparison
- 3.6. SUMMARY
- 3.2.3. A Token Ring Algorithm
- 3.2.4. A Comparison of the Three Algorithms
- 6.2. WHAT IS SHARED MEMORY?
- 6.4.7. Page Replacement
- 6.7. COMPARISON
- 9.6.5. Implementation of COOL
- 4.4.2 Multitasking
- 15.2 Synchronization
- 15.6 Common Practical Design Patterns