Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 72
Текст из файла (страница 72)
Эта разница в показаниях часов называется рассигисронизацией часов {clockskew). В результате рассинхронизации часов программы, которые ожидают, чтовремя, ассоциируюпдееся с файлом, объектом или сообщением, корректно и независит от машины, на которой оно определялось (то есть часы которой использовались), могут работать неправильно. Мы продемонстрировали это чуть вышена примере программы make.В некоторых системах (это так называемые системы реального времени) точность часов необходима. Для таких систем нужно использовать внешние физические часы, причем для эффективности и защищенности желательно иметьнесколько физических часов.
Это вызывает две проблемы. Во-первых, как синхронизировать их с часами реального мира? Во-вторых, как синхронизироватьэти часы друг с другом?Перед тем как ответить на эти вопросы, давайте немного отступим от нашейтемы, чтобы понять, как на самом деле измеряют время. Это вовсе не так просто,как можно было бы подумать. С тех пор как в XVH веке были изобретены механические часы, время стало определяться по астрономическим наблюдениям. Каждыйдень солнце встает на востоке, поднимается на максимальную высоту и заходитна западе. Момент подъема солнца на максимально возможную высоту называется солнечным переходом (transit of sun). Это событие происходит около полудня.
Интервал между двумя последовательными солнечными переходами называется солнечным днем {solar day). День делится на 24 часа, каждый из которыхсодержит 3600 с. Солнечная секунда {solar second) определяется как 1/86 400 солнечного дня. Геометрические построения, необходимые для расчета солнечногодня, приведены на рис. 5.2.В сороковых годах двадцатого веки было установлено, что период обращенияземли непостоянен.
Земля замедляется из-за приливного трения и вязкости атмосферы. На основе изучения колец роста древних кораллов геологи полагают,что 300 миллионов лет назад в году было около 400 дней. Продолжительностьгода (время одного оборота вокруг солнца) при этом не изменилась, сутки просто стали длиннее. Вдобавок к этому медленному изменению существуют краткие вариации продолжительности суток, связанные, вероятно, с завихрениями278Глава 5. Синхронизацияглубоко в земном ядре, состоящем из расплавленного железа. Эти открытия потребовали от астрономов расчета ситуации для множества дней с усреднениемрезультатов перед делением их на 86 400.
Получившееся значение было названосредней солнечной секундой {mean solar second).Орбита ЗемлиСолнечный переходотмечается в моментпрохода Солнцемнаивысшейза день точкиВ момент солнечногоперехода через п днейЗемля повернется менеечем на 360°Земля в день Опри солнечном переходеНаправлениена удаленную галактикуЗемля в день 1при солнечном переходеНаправлениена удаленную галактикуРис. 5.2. Расчет среднего солнечного дняПосле изобретения в 1948 году атомных часов появилась возможность ещеболее точного измерения времени, независимо от вращения и колебаний земли,путем подсчета переходов атома цезия-133. Физики переняли работу по хранению времени у астрономов и определили секунду как время, за которое атом цезия-133 совершит ровно 9 192 631 770 переходов.
Выбор числа 9 192 631 770 сделалатомную секунду равной средней солнечной секунде в год ее расчета. В настоящее время около 50 лабораторий по всему миру имеют часы на цезии-133. Периодически каждая лаборатория сообщает в международное бюро мер и весовв Париже, сколько времени на их часах. Международное бюро усредняет их результаты и выдает глобальное время по атомным часам {International Atomic Time,TAI). TAI — это среднее время тиков часов на цезии-133, прошедшее с полуночи1 января 1958 года (начала времен) и деленное на 9 192 631 770.Хотя время ТА! весьма стабильно и доступно каждому, кто в состоянии преодолеть проблемы, связанные с покупкой цезиевых часов, имеется серьезная проблема: 86 400 с TAI в настоящее время приблизительно на 3 мс меньше среднегосолнечного дня (потому что средний солнечный день все время удлиняется).
Используя TAI для хранения времени, надо понимать, что постепенно полдень будет наступать все раньше и раньше, пока, наконец, от утра почти ничего не останется. Это станет заметно населению, и мы столкнемся с ситуацией вроде той,что была в 1582 году, когда Папа Григорий ХП1 объявил, что 10 дней календаряпропускаются. Это событие привело к уличным бунтам, поскольку домовладельцы требовали у работников плату, а банкиры — процент за полный месяц, в то5.1. Синхронизация часов279время как работодатели отказывались платить работникам за те 10 дней, что онине работали. Но это были лишь небольшие столкновения. Протестантские страны принципиально отвергали любые папские декреты, не переходя на григорианский календарь еще 170 лет.Международное бюро решило эту проблему, используя потерянные секунды{leap seconds) всякий раз, когда разница между временем TAI и солнечным временем возрастает до 800 мс (рис.
5.3). Эта коррекция позволила перейти к системе,основанной на постоянных секундах TAI, в которой, однако, соблюдается соответствие с периодичностью очевидно видимого движения солнца. Она называется универсальным согласованным временем {Universal Coordinated Time, UTC).UTC — это основа всей системы хранения времени в наши дни. Оно, по существу,заменило старый стандарт — среднее время по Гринвичу {Greenwich mean time),которое основывалось на астрономических наблюдениях и расчетах.О 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25^^^^f^^^ I—I—\—I—1—1—I—I—ЬЧ—I I I I I I I I I I—\—I—I—\—I—ITAIСолнечные О 1 2 3 4 5I—\1 Н\секунды617 8 911 12 1314 15 161 \—bed•-ed1—h-HH1—H—I117 18 19 2122 23 24 251 \—1^1\—hyH I I—I1Потерянные секунды,введенные во время UTCдля его синхронизации со временем ТА!Рис.
5.3. Секунды TAI в отличие от солнечных секунд имеют постоянную длительность,поэтому для синхронизации времени UTC и времени TAIиспользуют потерянные секундыБольшинство электрических компаний положили в основу измерения временидля своих 60-герцевых или 50-герцевых часов систему UTC, а когда международное бюро объявляет потерянную секунду, компании, производящие электроэнергию, меняют частоту на 61 или 51 Гц для 60 или 50 с, чтобы чуть подвестичасы в той зоне, где они работают. Поскольку для компьютера 1 с — это заметный интервал, операционная система, которой нужно знать точное время за несколько лет, может обрабатывать объявленные потерянные секунды с помощьюспециального программного обеспечения (если только она не использует для определения времени линию питания, что обычно слишком неточно).
Общее числопотерянных секунд, введенных во время UTC, к настоящему времени составляетпримерно 30.Для предоставления времени UTC тем, кому необходимо точное время, национальный институт стандартного времени (National Institute of Standard Time,NIST) имеет коротковолновую радиостанцию с позывными WWV из форта Коллинз (Fort Collins), штат Колорадо. Радиостанция WWV широковещательнорассылает короткий импульс в начале каждой секунды UTC.
Точность самой радиостанции WWV составляет около ±1 мс, но из-за различных атмосферныхфлуктуации длина сигнала может меняться, так что на практике точностьсоставляет не более ±10 мс. В Англии станция MSF, работающая из Регби(Rugby), район Варвикшир (Warwickshire), предоставляет похожую службу. Существуют также станции и в некоторых других странах.280Глава 5. СинхронизацияНекоторые спутники Земли также предоставляют службы UTC. Рабочийспутник геостационарного окружения (Geostationary Environment Operational Satellite) может предоставлять время UTC с точностью до 0,5 мс, а некоторые другие — и с более высокой точностью.Использование как коротковолновых радиосигналов, так и спутниковыхслужб требует точных сведений об относительном положении отправителя и получателя с целью компенсации задержки распространения сигнала.
Радиоприемники для WWV, GEOS и других источников UTC имеются в продаже.5.1.2. Алгоритмы синхронизации часовЕсли одна машина имеет приемник WWV, нашей задачей является поддержаниесинхронизации с ней всех остальных машин. Если приемников WWV нет ни наодной из машин, то каждая из них отсчитывает свое собственное время, и нашейзадачей будет по возможности синхронизировать их между собой. Для проведения синхронизации было предложено множество алгоритмов [ИЗ, 129, 240]. Ихобзор имеется в [370].Все алгоритмы имеют одну базовую модель системы, которую мы сейчас рассмотрим. Считается, что каждая машина имеет таймер, который инициирует прерывание Н раз в секунду. Когда этот таймер срабатывает, обработчик прерыванийдобавляет единицу к программным часам, которые сохраняют число тиков (прерываний), начиная с какого-либо момента в прошлом, о котором была предварительная договоренность.
Будем считать, что мы можем вызвать значение этих часов С. Конкретнее, когда время UTC равно t, значение часов машины р — Cp(t).В идеальном мире мы можем считать, что Cp(t) = t для всех р и всех t. Другимисловами, dC/dt — точно единица.Реальные таймеры не генерируют прерывания точно Н раз в секунду. Теоретически таймер с Я = 60 должен генерировать 216 000 тиков в час. На практикеотносительная ошибка, допустимая в современных микросхемах таймеров, составляет порядка 10"^.