Relógios Logicos
Cada máquina possui um temporizador que gera H interrupções por segundo (tics). Estes tics são utilizados para manter um relógio de software.
Chamemos este relógio de C. Quanto o tempo for t, idealmente teríamos Cp(t) = t para todo p, onde Cp(t) é o tempo na máquina p. Infelizmente cada fabricante define uma constante definida como razão de erro tal que: 1 − ρ ≤ dC/dt ≤ 1 + ρ
Em um ambiente distribuído, cada nó possui seu próprio relógio e existe um tempo não negligenciável de comunicação. E teoricamente impossível obtermos um tempo global físico. Devemos, então, buscar uma aproximação do mesmo.
Relógios lógicos são mecanismos para identificação de relações causais e cronológicas em sistemas distribuídos, uma vez que estes fazem uso de uma classe de algoritmos que têm como base a sincronização de seus eventos e a consistência interna de seus relógios.
Em geral, podemos utilizar a sincronização de relógios físicos para determinar se um evento ocorreu antes de outro a não ser que eles tenham ocorrido muito próximos uns aos outros. Se a imprecisão no sincronismo UTC é alto ou intervalos UTC de eventos se sobrepõem, não é possível determinar a ordem de ocorrências dos eventos.
Para muitas aplicações, os eventos não necessitam ser escalonados ou sincronizados em relação a um relógio real. Muitas vezes, o importante é apenas a ordem da execução de eventos.
Algoritmos que permitem a sincronização de eventos desta forma são chamados de relógios lógicos.
Vale ressaltar que Lamport foi o primeiro a provar que é possível sincronizar todos os relógios de um sistema para