El algoritmo Naimi-Tréhel asegura la exclusión mutua en sistemas distribuidos . Este algoritmo reduce el número medio de mensajes introduciendo una estructura de árbol lógica y un token. El algoritmo inicial fue presentado por Naimi y Tréhel.
El problema con la exclusión mutua es asegurarse de que como máximo un sitio, en cualquier momento, pueda acceder a un recurso, generalmente denominado sección crítica. El planteamiento del problema fue dado por Dijkstra en 1965 en un sistema centralizado. Nos situamos en el contexto de una red distribuida, lo que significa que los procesos en cada sitio interactúan solo enviándose mensajes entre sí. Los algoritmos buscan reducir la cantidad de mensajes entre sitios. Para Lamport, si n es el número de sitios, el número de mensajes llega a 3 (n-1) En 1985, Maekawa define un algoritmo para el cual el número de mensajes es del orden de 2 * raíz (n). Este algoritmo reduce el número medio de mensajes a .
Cada proceso tiene memoria local y puede enviar mensajes a cualquier otro utilizando un identificador único como dirección. Se supone que la comunicación entre los procesos es perfecta (sin pérdidas, duplicaciones o modificaciones de mensajes).
El algoritmo que presentamos aquí se basa en el hecho de que un proceso envía su solicitud solo a otro proceso y espera su permiso. Sería un algoritmo centralizado si el proceso de recepción fuera siempre el mismo, pero cambiará en función de la evolución de las solicitudes
El permiso para ingresar a la sección crítica se materializa mediante un token; Uno y solo un proceso tiene el token. El proceso que posee este token puede ingresar a una sección crítica. Hay dos estructuras de datos:
Cada proceso conoce el siguiente proceso en la cola, excepto cuando no hay un siguiente. La cabeza es el proceso al que pertenece el token. La cola es el último proceso que solicitó la cola (a menos que solo haya un proceso en esa cola). Una ruta está organizada de modo que cuando un proceso solicita la sección crítica, su solicitud se pasa a la cola. Cuando llega allí, hay dos casos:
- Cuando el proceso que encabeza la cola sale de la sección crítica, le da el token al siguiente, si es que hay otro.
Además, si el proceso solicitante no es la raíz, la estructura del árbol se transforma: el proceso solicitante se convierte en la nueva raíz y los procesos ubicados entre el solicitante y la raíz tendrán la nueva raíz como padre.
La estructura del árbol se modifica de la siguiente manera: el solicitante transmite la solicitud a su padre y se considera la nueva raíz. Por tanto, la estructura del árbol se divide en dos: una asociada a la raíz antigua y la otra asociada a la nueva. De manera más general, si hay varias solicitudes en tránsito al mismo tiempo, hay varios árboles. Cuando han llegado todos estos mensajes en tránsito, estos árboles se agrupan para formar uno solo. La transformación del árbol tiene esta consecuencia: si la solicitud de i se envía en la dirección de la raíz j y si la solicitud de k llega antes de la solicitud de i, la solicitud de i se transmitirá a k.
padre: = 1 siguiente: = nulo pregunta: = falso si padre = i entonces empieza token-presente: = verdadero; padre: = nulo final en caso contrario token-presente: = falso finsi
solicitud: = verdadero si padre = nulo, entonces ingrese en la sección crítica; de lo contrario, comience a enviar Req (i) al padre; padre: = nil fin finsi
preguntar: = falso; si el siguiente no es = nulo, comience a enviar el token al siguiente; token-presente: = falso; siguiente: = nil fin finsi
si padre = nulo, entonces si solicitud, luego siguiente: = k de lo contrario, inicie token-present: = false; envíe el token a k end finsi; de lo contrario, envíe req (k) al padre finsi; padre: = k
token-presente: = verdadero
1) Tolerancia a fallos Se han realizado varios trabajos para hacer que el algoritmo sea tolerante a fallos. Primero, hubo un trabajo realizado por los autores del algoritmo. http://lifc.univ-fcomte.fr/lifc/presentation/
Citemos también la contribución de Julien Sopena, Luciana Arantes, Pierre Sens Un algoritmo justo de exclusión mutua tolerando fallas Lip6, Universidad de París 6 http://www.lip6.fr/recherche/index.php
2) Solicitud por teleconferencia Mohammed OUZZIF - ENSIAS, Marruecos http://www.ensias.ma/ Prof. Mohammed Erradi - ENSIAS, Marruecos Prof. Jean-Pierre Courtiat - LAAS, Francia http://www.laas.fr/ Gestion Dinámica de grupo en un entorno de control de videoconferencia