Sincronización en los ss.dd
En un sistema con un procesador, la sincronización entre procesos usa herramientas como semáforos, monitores, etc.
esas facilidades suponen de manera implícita la existencia de memoria compartida
En los ss.dd. no contamos con esa memoria compartida, hemos de buscar otras técnicas
Incluso el simple hecho de determinar si el evento A ocurrió antes que el evento B requerirá reflexión cuidadosa
Sincronización de relojes
En un sistema centralizado, el tiempo no tiene ambigüedades
Si el proceso A pide la hora, y un poco después el proceso B también la pide, el valor obtenido por B es siempre mayor o igual que el obtenido por A
En un s.d. no es tan sencillo. ¿qué implica el carecer de un reloj global?
Sincronización de relojes
Pensemos en el programa make en un entorno distribuido de dos máquinas
La sincronización de relojes es muy importante!
máquina que
ejecuta el compilador
máquina que
ejecuta el editor
tiempo del
reloj local
tiempo del
reloj local
2144
2145
2146
2147
2142
2143
2144
2145
output.o creado
output.c creado
Sincronización de relojes
¿se pueden sincronizar los relojes en un sistema distribuido?
Lamport demostró que sí: lo que importa no es una sincronización del tiempo absoluto, sino que el orden de los eventos sea el mismo en todas las máquinas
En el ejemplo del make lo que importa no es la hora en que se crean output.o y ouput.c, sino el orden en que fueron creados
Por otro lado, si dos procesos no interactuan, no es necesario que sus relojes estén sincronizados
Sincronización de relojes
Tipos de relojes:
relojes lógicos: las máquinas tienen el mismo valor de reloj, aunque marquen una hora distinta de la real
relojes físicos: las máquinas tienen el mismo valor de reloj, y éste no debe desvíarse de la hora real más alla de cierta magnitud
Sincronización de relojes lógicos
Lamport definió la relación “ocurre antes de”
La expresión a->b se lee “a ocurre antes de b” e indica que todos los procesos coinciden en que primero ocurre a y después b
se cumple:
Si a y b son dos eventos en el mismo proceso y a ocurre antes que b, entonces a->b es verdadero
Si a es el evento del envío de un mensaje por un proceso y b es el evento de la recepción del mensaje por otro proceso, entonces a->b es verdadero
Sincronización de relojes lógicos
¿de qué forma podemos sincronizar relojes lógicos?
Necesitamos una forma de asociar a cada evento a un valor de tiempo C(a) en el que todos los procesos estén de acuerdo
Los valores de tiempo deben tener la propiedad de que si a->b entonces C(a)