Las computadoras tienen todas un circuito electrónico de reloj, que funciona más como un cronómetro el cual se basa en un oscilador de cristal de cuarzo y se puede identificar en la computadora porque tiene una pequeña pila del tamaño de una moneda. Al aplicarle un voltaje al cristal, oscila con cierta frecuencia que depende del tamaño del cristal, el tipo de corte, la magnitud del voltaje y la temperatura. Es sumamente difícil garantizar que todas estas variables son iguales en todas las computadoras por lo cual cada reloj oscilará a su frecuencia particular. Al reloj se le asocian dos registros: Un contador y un registro mantenedor. Al comienzo del algoritmo del reloj, se carga el contenido del registro mantenedor en el contador, luego, cada vez que el cristal oscila, se disminuye en 1 el valor del contador. Cuando el contador llega a cero, se genera una interrupción denominada marca de reloj, se carga de nuevo el contador con el valor del registro mantenedor y se repite el ciclo. Así podemos programar el reloj para que genere la cantidad de marcas de reloj por segundo deseada.
Cuando el sistema inicia por primera vez, se pide al operador la fecha y la hora, entonces esta información se convierte a número de marcas de reloj ocurridas a partir de cierta fecha que es el inicio del tiempo. Cada vez que ocurre una marca de reloj, la rutina de interrupción suma 1 al valor del tiempo para mantener actualizado el reloj de software.
Cuando se trata de un sistema monoprocesador, no importa que este reloj se desfase un poco del tiempo real, lo que interesa es que la hora que solicitan todos los procesos proviene de una misma fuente. Así se garantiza que los eventos se mantienen ordenados en el tiempo, manteniendo las relaciones causa efecto de tal manera que las causas tienen horas inferiores a sus efectos.
Cuando consideramos un sistema distribuído, compuesto por muchas computadoras, surgen problemas que no teníamos antes, como el hecho de que cada reloj de computadora marcará una hora diferente, marchará a una velocidad diferente de los otros y entonces hay que tener mucho cuidado con la información del tiempo que manejan los diversos procesos del sistema. Las diferencias en tiempo de los relojes se llama distorsión del reloj y como consecuencia de ella podrían fallar programas que dependan del tiempo percibido por los procesos, como la orden MAKE.
Un brillante investigador en este campo es LAMPORT, quien concluyó que a pesar de que no se pueda garantizar que todos los relojes marquen el mismo tiempo, sí es posible sincronizarlos para que se cumpla el principio de causalidad, es decir, que las causas sean anteriores a sus efectos. Publicó un primer artículo en 1978 y otro en 1990.
Lamport indica que si dos procesos no interactúan, no interesa el valor que marque el reloj de sus computadoras, porque no habría nada que dependiera de la distorsión de reloj, y lo que importa verdaderamente es que todos los procesos perciban la misma secuencia de eventos en el tiempo. En el ejemplo de MAKE, lo que importaba era percibir que la edición de un programa fuente era posterior a la última compilación del programa.
Generalmente no es necesario que la hora de las computadoras coincida con la hora real, nuestro interés en este punto es que los diferentes relojes de un sistema distribuído estén sincronizados entre sí. Esto es lo que se denomina relojes lógicos. Cuando existe una exigencia de que los relojes de las computadoras no se alejen de la hora real más de cierta cantidad, entonces hablamos de relojes físicos.
EL ALGORITMO DE LAMPORT
Si dos procesos no intercambian mensajes, ni siquiera por medio de terceros, entonces a → b no es verdadero ni tampoco lo es b → a. Se dice que estos procesos son CONCURRENTES y no se puede decir nada acerca de cual evento ocurre primero.
Teniendo en cuenta que en una computadora el tiempo es un contador de marcas de reloj, se define la función C(a) como aquella que entrega el tiempo en que ocurre el evento a. Así, tenemos que si a → b entonces C(a) <>
Cuando se trata de un sistema monoprocesador, no importa que este reloj se desfase un poco del tiempo real, lo que interesa es que la hora que solicitan todos los procesos proviene de una misma fuente. Así se garantiza que los eventos se mantienen ordenados en el tiempo, manteniendo las relaciones causa efecto de tal manera que las causas tienen horas inferiores a sus efectos.
Cuando consideramos un sistema distribuído, compuesto por muchas computadoras, surgen problemas que no teníamos antes, como el hecho de que cada reloj de computadora marcará una hora diferente, marchará a una velocidad diferente de los otros y entonces hay que tener mucho cuidado con la información del tiempo que manejan los diversos procesos del sistema. Las diferencias en tiempo de los relojes se llama distorsión del reloj y como consecuencia de ella podrían fallar programas que dependan del tiempo percibido por los procesos, como la orden MAKE.
Un brillante investigador en este campo es LAMPORT, quien concluyó que a pesar de que no se pueda garantizar que todos los relojes marquen el mismo tiempo, sí es posible sincronizarlos para que se cumpla el principio de causalidad, es decir, que las causas sean anteriores a sus efectos. Publicó un primer artículo en 1978 y otro en 1990.
Lamport indica que si dos procesos no interactúan, no interesa el valor que marque el reloj de sus computadoras, porque no habría nada que dependiera de la distorsión de reloj, y lo que importa verdaderamente es que todos los procesos perciban la misma secuencia de eventos en el tiempo. En el ejemplo de MAKE, lo que importaba era percibir que la edición de un programa fuente era posterior a la última compilación del programa.
Generalmente no es necesario que la hora de las computadoras coincida con la hora real, nuestro interés en este punto es que los diferentes relojes de un sistema distribuído estén sincronizados entre sí. Esto es lo que se denomina relojes lógicos. Cuando existe una exigencia de que los relojes de las computadoras no se alejen de la hora real más de cierta cantidad, entonces hablamos de relojes físicos.
EL ALGORITMO DE LAMPORT
Permite sincronizar un conjunto de relojes lógicos. Lampor definió la siguiente relación:
a → b que significa a ocurre antes que b e indica que para todos los procesos, el evento a ocurre antes del evento b. Esta relación se puede observar en dos casos:
- Si a y b son eventos del mismo proceso y a ocurre antes que b, entonces a → b es verdadero.
- Si a es el evento de enviar un mensaje y b es el evento de recibir ése mensaje, entonces a → b es verdadero por causalidad.
Si dos procesos no intercambian mensajes, ni siquiera por medio de terceros, entonces a → b no es verdadero ni tampoco lo es b → a. Se dice que estos procesos son CONCURRENTES y no se puede decir nada acerca de cual evento ocurre primero.
Teniendo en cuenta que en una computadora el tiempo es un contador de marcas de reloj, se define la función C(a) como aquella que entrega el tiempo en que ocurre el evento a. Así, tenemos que si a → b entonces C(a) <>
