sincronizacion de relojes


SINCRONIZACIÓN  DE RELOJES

 trata de solucionar los problemas surgidos por la necesidad de comunicar distintos computadores que trabajan en una tarea conjunta.
Estos problemas ocurren debido a que cada computador posee relojes independientes cuya arquitectura, por muy precisa que sea, hace imposible que tenga tiempos idénticos.
Dicha sincronización se ha logrado mediante el estudio de diversas técnicas y métodos (Algoritmo de Cristian, Algoritmo de Berkeley, etcétera)
La sincronización de relojes en un sistema distribuido se utiliza para forzar un orden parcial o total en la ejecución de procesos y eventos del sistema.
Los computadores poseen dos tipos de relojes, hardware y software: el primero es capaz de generar una señal periódica, el segundo simula el comportamiento de un reloj normal a partir del de hardware.
Surge la necesidad de sincronizar estos relojes debido a lo que se conoce como sesgo y deriva del reloj, que provocan que dos relojes en un mismo momento tengan tiempos distintos.

TIPOS DE RELOJES

Reloj hardware
Toda computadora ha de tener un reloj hardware.
Existen dos tipos comunes:
Relojes enlazados con energía
Están enlazados a una línea de 110 o 220 voltios y producen una interrupción en cada ciclo de voltaje. Son los que tienen una arquitectura y funcionamiento más simple, antiguamente eran los que dominaban el mercado, no obstante, ahora se han visto relegados por los relojes programables, los cuales son más precisos.
Relojes programables o RTCs (Reloj en tiempo real)
Es más preciso y seguro ya que  suele ser alimentado por una batería, la cual asegura el funcionamiento del reloj, aunque la computadora no tenga suministro eléctrico durante meses e incluso años.
Consta de estos elementos:
Oscilador de cristal: Una pieza de cristal de cuarzo bien cortada y montada bajo tensión, la cual oscila generando una señal periódica de mucha precisión.
Registro Contador: El contador se alimenta cada vez que oscila la señal de cuarzo, ésto provoca que el contador cuente de forma descendente hasta 0, generando en dicho momento una interrupción de CPU.
Registro constante o contenedor: Se usa para cargar el registro contador.

TIENE DOS MODOS DE OPERACIÓN:

Una instancia (un disparo) : Cuando el reloj se inicia liza el registro contador copia el valor del registro contenedor. Se decremento el registro contador en cada oscilación del cristal de cuarzo hasta que llega a cero, en ese momento, genera una interrupción y se detiene hasta que el software lo inicial ice de nuevo.
Onda cuadrada: Comienza igual que el modo anterior, no obstante, después de llegar a cero y generar la correspondiente interrupción, el registro contenedor se copia de manera automática en el registro contador. Es decir, el programa se repite en bucle.
Reloj software
Simula el funcionamiento de un reloj normal a partir del reloj hardware del computador.
El reloj hardware realmente lo único que hace es generar interrupciones a intervalos conocidos y bien marcados de tiempo, todo lo demás que se relacione con el tiempo en el computador debe ser realizado por el reloj software.
Podemos resumir de una forma muy general las funciones principales del reloj software:
Contener la hora y fecha actuales, coordinada con el huso horario que indiquemos.
Controla el tiempo de ejecución de los procesos.
Mantiene un registro de uso de la CPU, se tiene noción de cuándo se inicia un proceso y cuando se detiene, cuánto tiempo pasa detenido, si se reanuda, etcétera.
Proporciona cronómetros o temporizadores guardianes al sistema, también llamados watchdogs (Perro guardián (electrónica)) .
Maneja y supervisa estadísticas, gracias a los registros mencionados previamente.
El reloj software establece una fecha de origen (En el caso de Linux esa fecha es el 1 de enero de 1970 a las 00:00), toma la fecha y hora actual y calcula el número de ticks desde dicha fecha origen hasta la fecha actual, con cada tick incrementa el número de éstos y se recalcula la fecha actual a partir de la de origen.

En Linux, durante el inicio el kernel, obtiene la fecha y hora actual a partir del reloj hardware, una vez hace ésto, el kernel mantiene su fecha y hora independiente del reloj hardware.

SESGO Y TASAS DE DERIVAS DE RELOJ

La deriva de reloj o drift (Deriva de reloj) representa el tiempo que un reloj se desvía respecto a la hora real, es decir, aunque un reloj marque exactamente la hora real en un momento determinado, es imposible que marque infinitamente dicho tiempo de manera perfecta, siempre se desvía (en mayor o menor medida).
Cada tipo de reloj tiene una tasa de deriva, por ejemplo, un reloj normal se desvía como media, aproximadamente un segundo cada 12 días, un reloj de precisión se desvía sobre un segundo cada cuatro meses o tres años y un reloj atómico se desvía en torno a 1 segundo cada miles de millones de años.
Dentro de un mismo tipo, cada reloj tiene una tasa de deriva propia.Supongamos que una misma marca crea dos relojes aparentemente iguales, los pone a funcionar ahora mismo y ambos marcan la misma hora. Pasado un tiempo dichos relojes (debido a que es prácticamente imposible crear dos relojes exactamente iguales) tendrán cada uno un tiempo diferente para un instante determinado, esta diferencia de tiempo se llama sesgo de reloj (skew) (Sesgo de reloj).
Por tanto, decimos que el sesgo de reloj da como consecuencia que una misma señal de reloj de origen llega a los distintos componentes en diferentes momentos, es decir, se crea una diferencia entre la lectura de los dos relojes en un instante concreto.
En un sistema distribuido lo ideal sería que el clock skew sea cero. No obstante, hay varios factores que causan diferencias en las distintas señales de reloj.
Podemos diferenciar dos tipos de sesgo de reloj según como se rija el reloj de referencia:
El sesgo positivo ocurre cuando el registro emisor recibe el tic del reloj antes que el registro receptor.
El sesgo negativo es el caso contrario, el registro de recepción obtiene la marca del reloj antes que el registro emisor.
Éste es el principal problema que nos lleva a la necesidad de tener que sincronizar los relojes de las distintas computadoras.
Por ejemplo imaginemos que el computador uno marca un día a las 21:11:11 (h:m:s) y el computador dos marca las 21:11:10 (Lo normal es que el sesgo sea bastante inferior a los nano segundos, pero se usa este ejemplo para explicarlo de una forma más entendible).

C1 enviaría un mensaje a C2, por ejemplo, a las 21:11:11 según R1 (reloj de C1), el mensaje tarda en enviarse solo medio segundo, este mensaje llegaría a C2 según R2 (reloj de C2) medio segundo antes de que se enviara según R1. Ésto llevado a supuestos más complejos puede dar lugar a grandes problemas.
SINCRONIZACIÓN DE RELOJES

Ambos tipos de relojes tienen una importancia fundamental en la tarea de sincronización distribuida debido a que al contrario que los sistemas centralizados (Computación centralizada) que tienen un reloj único accesible para todas computadoras, en los sistemas distribuidos el orden en que transcurren los eventos se logra mediante diversos mecanismos que usan los relojes de cada computadora, siempre respetando el orden cronológico de los sucesos.
Cabe mencionar que para el correcto funcionamiento del sistema son necesarios algoritmos de exclusión mutua(Exclusión mutua en sistemas distribuidos), que aseguran el acceso a una sección crítica(Sección crítica) para respetar la integridad de los archivos. Algunos de dichos algoritmos necesitan del uso de relojes lógicos.

DIFERENCIAREMOS ENTRE:

Sincronización externa: Todos los relojes se sincronizan con una referencia única mediante un servidor de UTC (Tiempo Universal Coordinado).
Sincronización interna: Sincronización entre varios relojes sin importar la hora correcta.
Algoritmos de sincronización
Para lograr la sincronización de relojes en sistemas distribuidos existen varios algoritmos y protocolos.
Cristian(Algoritmo de Cristian): Usa sincronización externa e interna. Es un algoritmo centralizado en un servidor de tiempo UTC, que manda el tiempo a un receptor de nuestro sistema que se denominará receptor de UTC, el resto de clientes se sincronizarán con dicho equipo.
Los clientes mandarán peticiones periódicas al receptor UTC pidiéndole el tiempo UTC, y éste le responderá lo más rápido posible. Obviamente, el cliente sólo sincroniza si el tiempo UTC de respuesta es mayor que el de la petición.
Problemas:Si el servidor falla. Una solución sería tener más servidores.
No existe control sobre fraudes o mal funcionamiento por parte del servidor.
Escalabilidad.
Berkeley: Sincronización interna, no dispone de señal UTC. Es un algoritmo centralizado en un servidor maestro elegido por todas las computadoras conectadas. El servidor periódicamente muestrea el tiempo de las computadoras y con esa información estima un tiempo que es comunicado al resto de las máquinas para su sincronización.

PROBLEMAS:

Si el servidor falla. Una solución sería elegir a un nuevo maestro.
Escalabilidad.
Algoritmo de tiempos lógicos de Lamport (Tiempos lógicos de Lamport): Sincronización interna, no dispone de la señal UTC. Este algoritmo recibe su nombre del matemático y científico Leslie Lamport. Se basa en la siguiente metáfora (Algoritmo de la panadería de Lamport) :En una panadería los clientes van entrando y cogen un número único que referencia al número de llegada para que los dependientes los atiendan. Lo fundamental es que el dependiente solo atiende a una persona al mismo tiempo.
Pone énfasis en la relación “sucede antes que”, si dos eventos han ocurrido en el mismo proceso, el proceso sabe cual ha sido su orden,  aparte es fundamental la idea de que el envío de un mensaje ocurre antes que su recepción. Asocian una marca de tiempo para su funcionamiento
Protocolos de sincronización
Protocolo NTP (Network Time Protocol): Sincronización externa, uso de la señal UTC. Es un protocolo de Internet que usando UDP (Protocolo de datagramas de usuario) en su capa de transporte sincroniza los relojes de las diferentes máquinas. Se basa en una jerarquía de servidores divididos por estratos en los que el nodo raíz recibe la señal UTC  y los nodos hoja son las estaciones de usuario. Consigue su sincronización mediante el envío de marcas de tiempo entre los servidores. El objetivo de NTP es proporcionar un sistema fiable.

Comentarios

Entradas populares