2

У меня двойная загрузка Linux и Windows XP на моем ноутбуке. Я добавил следующий ключ реестра в XP для поддержки Universal Time из BIOS:

HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\RealTimeIsUniversal

Когда я запускаю XP, часы установлены правильно, но если машина выходит из спящего режима, часы выключаются на пару часов.

Есть ли способ, чтобы XP правильно использовал настройку универсального времени во время пробуждения? Если нет, могу ли я помешать XP установить часы на возобновление?

3 ответа3

5

Я предполагаю, что Windows как-то плохо себя ведет после пробуждения из-за системного времени. Согласно статье в Википедии, раздел реестра, на который вы ссылаетесь, работает не полностью, даже в последних версиях Windows:

Windows ожидает, что часы реального времени компьютера будут работать по местному времени. Поскольку в Windows NT была запись реестра RealTimeIsUniversal = 1, но эта функция еще не поддерживается или не полностью реализована (включая Vista), поэтому невозможно запускать часы реального времени в формате универсального координированного времени.

Я думаю, что вам лучше всего сказать Linux, что системные часы работают по местному времени, и два раза в год кусать пулю с помощью летнего времени.

ETA: в этой статье немного подробнее описывается проблема, а также намеки на тот факт, что проблемы с этим разделом реестра устранены в Vista SP2 и Windows 7:

2001-07-09: Я получил ответ от кого-то из Microsoft Base Kernel Team, который заинтересовался RealTimeIsUniversal, и они рассмотрели соответствующие части исходного кода ядра NT. Флаг RealTimeIsUniversal присутствует (остаток со времен, когда NT все еще работал на RISC-машинах с UTC RTC), но его реализация сейчас кажется неполной, и в настоящее время он не охватывается документацией Microsoft и набором регрессионных тестов, поэтому его использование не рекомендуется в этот раз. За последние несколько дней было выявлено несколько потенциальных ошибок RealTimeIsUniversal, возможно, их будет больше. Например, отладчик ядра предполагает, что время CMOS является местным, и ошибочно получит время, когда RealTimeIsUniversal = 1. Может быть аналогичная проблема в коде, который возобновляет обработку после приостановки ЦП, или в коде, который рассчитывает время изменения DST.

2008-10-31: Ура! Кто-то из Отдела основных операционных систем Microsoft намекнул мне по электронной почте, что как Vista SP2, так и Windows 7 исправят проблемы с поддержкой RealTimeIsUniversal = 1, из-за которой запуск часов CMOS в UTC пока не практичен для Windows (т. Е. Время был не прав после возобновления приостановки / гибернации Windows). Тем не менее, он предупреждает, что эта улучшенная поддержка UTC в часах CMOS может быть не сразу широко задокументирована, и детали могут измениться в будущем.

Итак, в заключение я думаю, что у вас есть два варианта:

  1. Обновите операционную систему до последней версии.
  2. Переключите Linux на местное время.

PS: В отличие от других постеров, это не может быть батарея CMOS. Часы реального времени не питаются от батареи, пока система работает. Это включает в себя режим сна (очевидно). Если батарея CMOS разрядилась, часы реального времени вернутся к своим заводским настройкам, которые обычно 1 января несколько лет назад. Смещение пары часов просто не происходит, поскольку нет никакого "состояния" часов, которое переживало бы полную потерю мощности. Это не родственные настенные часы с отслаивающейся батареей, которые сохраняют свое время, даже когда батарея разряжена.

2

Если при загрузке установлено правильное время (потому что оно синхронизируется), и оно корректно, пока Windows его поддерживает, но не работает, когда Windows спит, то, скорее всего, вам следует проверить батарею CMOS.

2

Он не похож на батарею CMOS, поскольку обычно сбрасывает время на фиксированную дату, а не "выключается на пару часов".

Другое временное решение - установить что-то вроде Atomic Clock Sync и установить для него значение "Auto Synchronize Daily". Это вернет часы в соответствие.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .