El algoritmo de Raymond es un algoritmo de exclusión mutua basado en bloqueos para sistemas distribuidos . Impone una estructura lógica (un árbol K-ario ) a los recursos distribuidos. Según su definición, cada nodo tiene un único padre, al que se dirigen todas las solicitudes para obtener el token.
Algoritmo
Propiedades nodales
- Cada nodo tiene un único padre al que se reenvían las solicitudes recibidas.
- Cada nodo mantiene una cola FIFO de solicitudes cada vez que detecta el token;
- Si algún nodo está reenviando privilegios a otro nodo y tiene una cola no vacía, entonces reenvía un mensaje de solicitud.
Algoritmo
- Si un nodo i (que no posee el token) desea recibir el token para entrar en su sección crítica , envía una solicitud a su padre, el nodo j .
- Si la cola FIFO del nodo j está vacía, el nodo j desplaza i a su cola FIFO; luego, j emite una solicitud a su padre, k , indicando que desea el token.
- Si la cola FIFO del nodo j no está vacía, simplemente desplaza i a la cola.
- Cuando el nodo k tiene un token y recibe la solicitud de j, envía el token a j y establece a j como su padre.
- Cuando el nodo j recibe el token de k , reenvía el token a i y este se elimina de la cola de j.
- Si la cola de j no está vacía después de reenviar el token a i , j debe enviar una solicitud a i para recuperar el token.
Nota : Si el nodo j desea solicitar un token y su cola no está vacía, se coloca en su propia cola. El nodo j utilizará el token para acceder a su sección crítica si se encuentra al principio de la cola cuando se recibe el token.
Complejidad
El algoritmo de Raymond tiene garantizada una complejidad de O(log n) por entrada de sección crítica si los procesadores están organizados en un árbol K-ario . Además, cada procesador necesita almacenar como máximo O(log n) bits porque debe rastrear O(1) vecinos. [ 1 ]
Referencias
- ↑ R. Chow, T. Johnson; Sistemas operativos y algoritmos distribuidos ; Addison-Wesley, 1997.
Véase también
- Algoritmos de control de concurrencia