Рассмотрим пример: пусть на нескольких компьютерах (клиентах) располагаются директории с файлами – списки товаров, на сервере – сводная директория, которая периодически обновляется. Приложение, расположенное на сервере, просматривает директории других компьютеров со списками товаров и, если
tсервера > tпоследнего обновления клиента > tпоследнего обновления сервера
то приложение переписывает этот файл в сводную директорию.
На первый взгляд достаточно простая задача может быть выполнена некорректно. Это может произойти из-за рассинхронизации физических часов компьютеров, участвующих в работе.
Почти все компьютеры имеют таймеры, которые и определяют время компьютера. Но не все таймеры работают с одинаковой частотой. Разница в работе таймеров приводит к тому, что у каждого компьютеры часы будут указывать на своё время. Произойдет рассинхронизация.
Вследствие этого приложение, описание работы которого приведено выше, будет работать некорректно. Действительно, пусть на одном из компьютеров процессное время имеет отметку 234 и в этот момент времени произошло обновление файла (tпоследнего обновления клиента). Сервер начинает работу по обновлению своего списка, но отметка времени при этим tсервера = 232- Таким образом, уже обновленный файл на клиенте сервером не будет замечен (приведенное выше условие) не выполняется. Следовательно, приложение будет работать некорректно.
Для синхронизации физического времени существуют различные алгоритмы, в том числе, алгоритмы Кристиана, Беркли, усредняющие алгоритмы.
Если в алгоритме Кристиана сервер времени пассивен (другие компьютеры периодически запрашивают у него время), он только лишь отвечает на запросы. В операционной системе UNIX разработки университета Беркли (Berkeley) принят прямо противоположный подход. Здесь сервер времени активен, он опрашивает каждую из машин. На основании ответов он вычисляет среднее время и предлагает всем машинам установить их часы на новое время или замедлить часы, пока не будет достигнуто необходимое уменьшение значения времени на сильно ушедших вперед часах. Этот метод применим для систем, не имеющих машин с приемником WWV. Время демона может периодически выставляться вручную оператором.