
5.1.
Синхронизация часов 277
Для единственного компьютера и единственных часов маленькая неточность
этих часов не вызовет проблемы. Поскольку все процессы в машине используют
одни и те же часы, они будут внутренне непротиворечивы. Так, например, если
файл input.c имеет отметку времени
2151,
а файл input.o
—
2150, make перекомпи-
лирует этот файл, даже если часы отстают на два деления и истинное время со-
ставляет соответственно 2153 и 2152. Все это, разумеется, относится к относи-
тельному времени.
В том случае, если мы перейдем к рассмотрению нескольких компьютеров,
каждый из которых имеет собственные часы, картина изменится. Несмотря на то
что частота каждого из кристаллов обычно весьма стабильна, невозможно гаран-
тировать, что кристаллы на различных компьютерах будут иметь абсолютно оди-
наковую частоту. На практике, когда в систему входит п компьютеров, все п кри-
сталлов работают с несколько отличаюш;ейся частотой, что ведет к постепенной
потере синхронизации и выдаче часами при обраш^ении к ним различных значе-
ний. Эта разница в показаниях часов называется
рассигисронизацией
часов
{clock
skew).
В результате рассинхронизации часов программы, которые ожидают, что
время, ассоциируюпдееся с файлом, объектом или сообщением, корректно и не
зависит от машины, на которой оно определялось (то есть часы которой исполь-
зовались), могут работать неправильно. Мы продемонстрировали это чуть выше
на примере программы make.
В некоторых системах (это так называемые системы реального времени) точ-
ность часов необходима. Для таких систем нужно использовать внешние фи-
зические часы, причем для эффективности и защищенности желательно иметь
несколько физических часов. Это вызывает две проблемы. Во-первых, как син-
хронизировать их с часами реального мира? Во-вторых, как синхронизировать
эти часы друг с другом?
Перед тем как ответить на эти вопросы, давайте немного отступим от нашей
темы, чтобы понять, как на самом деле измеряют время. Это вовсе не так просто,
как можно было бы подумать. С тех пор как в XVH веке были изобретены механи-
ческие часы, время стало определяться по астрономическим наблюдениям. Каждый
день солнце встает на востоке, поднимается на максимальную высоту и заходит
на западе. Момент подъема солнца на максимально возможную высоту называ-
ется
солнечным переходом
(transit of
sun).
Это событие происходит около полуд-
ня.
Интервал между двумя последовательными солнечными переходами называ-
ется солнечным днем {solar day). День делится на 24 часа, каждый из которых
содержит 3600 с.
Солнечная секунда {solar second)
определяется как 1/86 400 сол-
нечного дня. Геометрические построения, необходимые для расчета солнечного
дня, приведены на рис. 5.2.
В сороковых годах двадцатого веки было установлено, что период обращения
земли непостоянен. Земля замедляется из-за приливного трения и вязкости ат-
мосферы. На основе изучения колец роста древних кораллов геологи полагают,
что 300 миллионов лет назад в году было около 400 дней. Продолжительность
года (время одного оборота вокруг солнца) при этом не изменилась, сутки про-
сто стали длиннее. Вдобавок к этому медленному изменению существуют крат-
кие вариации продолжительности суток, связанные, вероятно, с завихрениями