90 likes | 300 Views
Sincronización de Relojes. Es importante para sincronizar eventos en sistemas distribuidos (transacciones) Consistencia en datos replicados El reloj de un sistema se peude representar por Ci(t) = a*Hi(t) + b en que Hi(t) es una medida de tiempo dada por un hardware.
E N D
Sincronización de Relojes • Es importante para sincronizar eventos en sistemas distribuidos (transacciones) • Consistencia en datos replicados • El reloj de un sistema se peude representar por Ci(t) = a*Hi(t) + b en que Hi(t) es una medida de tiempo dada por un hardware
El método de sincronización de Christian • Se basa en la observación que en un período corto de tiempo, los mensajes de ida en internet se demoran casi lo mismo que los de vuelta mr mt cliente Servidor de tiempo
El método de sincronización de Christian • Si se llama T(mr) al tiempo en que fue mandado el mensaje y T(mt) al del recibido, y que t es el tiempo que se recibió en mt, se puede estimar que el timestamp se debe poner en t + (T(mt)-T(mr))/2 • Esto se puede comparar con lo siguiente si se conoce el tiempo mínimo que puede tardar una viaje en redondo en la red T(rd) min min T(mr) t T(mt)
Tiempos lógicos • Se trata de lograr sincronización interna, es decir relativa entre los procesos • Se basan en dos principios: • Si dos eventos ocurrieron en un mismo proceso pi (i = 1..N) entonces el proceso pi puede determinar con exactitud cual ocurrió antes y cual despues • Cuando un mensaje es enviado entre procesos entonces el evento de mandarlo ocurrió necesariamente antes que el de recibirlo
Algoritmo de Lamport • Un reloj lógico es un contador monotónicamente creciente, cuyo valor absoluto no es importante • Cada proceso pi tiene su propio reloj lógico Li que usa para ponerle el timestamp a los eventos • Llamemos el timestamp del evento e en pi Li(e) y llamamos L(e) si no nos importa qué proceso le dio el valor
Algoritmo de Lamport • Cada proceso pi incrementa en uno su reloj Li cada vez que ocurre un evento • Cuando un proceso manda un evento, le incluye el valor t = Li en el mensaje (m,t) • Cuando un proceso pj recibe un mensaje ajusta su reloj con el valor Lj = max(Lj, t) y luego suma 1 para reflejar el evento de recibo de mensaje • Con esto se puede ordenar relativamente bien las cadenas de eventos 1 2 p1 4 3 p2 1 5 p3
Ordenamiento total lógico • Se puede dar que pares distintos de eventos tengan el mismo timestamp si fueron generados en procesos distintos. Esto se puede corregir incluyendo la identificación del proceso en el timestamp • Si e1 ocurrió en el proceso pi en el instante Ti (lógico) y e2 ocurrió en pj en el instante Tj entonces los timestamps serán (Ti,i) y (Tj,j) respectivamente • Se define (Ti,i) < (Tj,j) si Ti < Tj o i < j • Esto no tiene ningún significado físico
Relojes Vector • Un reloj vector para un sistema de N procesos es un arreglo (o vector) de N enteros. Cada proceso pi guarda un vector propio Vi con valores Vi[j], j= 1,2,3...N • Cada vez que el proceso pi produce un evento actualiza Vi[i]++ • Cada vez que manda un mensaje envía un “timestamp” que consiste en todo el vector Vi • Cuando un proceso j recibe un mensaje de pi actualiza su vector Vj[k] = max(Vi[k],Vj[k]) para k= 1...N
Relojes Vector • Se puede definir un orden entre los vectores de la siguiente forma: • V = V’ ssi V[j] = V’[j] para j = 1...N • V <= V’ ssi V[j] <= V’[j] para j = 1...N • V < V’ ssi V[j] <= V’[j] y hay al menos un k para el cual V[k] < V’[k] • Problema: el tráfico es proporcional a N (1,0,0) (2,0,0) p1 (2,2,0) (2,1,0) p2 (1,0,0) (2,2,2) p3