mjt
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Вот, у меня тоже из виртуалки - ставил я её изначально как раз в виртуальной машине... И там она как раз работает корректно - в виртуальном CMOSе часы переводит, после перезагрузки часы остаются переведённые (там, понятно, что после "выключения" ничего не сохраняется, т.к. собственно ни CMOSа, ни таймера реального нет, но это так и должно быть). Но похоже таки дело именно в виртуалке - я тут поэкспериментировал, нормально поставленная на железо винда работает корректно, её можно склонировать на виртуалку - там она тоже работает, и склонировать на другое железо - тоже всё в порядке (после доустановки дров конечно). А вот если изначально поставить в виртуалку, не работает на физической машине. Похоже там в виртуалке что-то не в порядке с эмуляцией как раз CMOS-таймера. Пошел ковырять исходники... Для интересующихся - всегда (более двух лет) использую KVM на линуксе для виртуализации, т.к. основная платформа которой пользуюсь - это linux, более того, являюсь "сопровождающим" (maintainer) пакета qemu-kvm в Debian linux (и, соответственно, разработчиком Debian). Это - первая проблема, связанная с - похоже - некорректной эмуляцией... Пока, похоже, тему можно считать закрытой. Спасибо за идеи! Добавлено: Цитата: чушь какая то, в винде отдельно времени нету, у него каждый раз что ли винда время сбрасывает при выключении или включении. | В винде как раз есть отдельно время, у них свои часы. По простому, не вдаваясь в подробности. В системе есть таймер, работающий от батарейки если питание выключено, который просто считает цифры с определённой частотой, у него просто некое число, типа 873103504, - т.е. абстрактное значение, которое с каждым тиком увеличивается. Для простоты пусть это будет происходить каждую секунду, т.е. это есть количество секунд с какого-то абстрактного момента (например, с момента установки батарейки в системную плату - т.е. когда таймер запустился). Далее, в cmos есть некое значение времени - грубо говоря, там записано, когда была установлена батарейка. Т.е. CMOS сохраняет точку отсчёта таймера. Когда первый раз это всё запускаем, там стоит 0, т.к. биос не знает текущее время. Ну или какое-то другое значение, например 1 января 1980 года. Это число можно менять. Это делается - опять же, грубо говоря - путём сообщения биосу сколько сейчас времени - он от этого значения отнимает количество секунд, которое насчитал таймер, и результат записывает в ту самую память, в которой хранятся все остальные его настройки. Которая (память) питается той же батареей что и таймер. Таким образом получаем первые часы - таймер (сравним с внутренним механизмом часов, который просто "вращает" ось с постоянной частотой), и точка отсчёта, к которой нужно прибавить число, отсчитанное таймером, чтобы получить текущее время. Эти часы не знают что такое временные зоны, зимнее/летнее время и т.д. - как поставил точку отсчёта, так и считают дальше, также как и механические часы. Далее, в винде есть своё смещение. При загрузке системы винда читает текущее время из биоса (который выдаёт ответ в соответствии с его точкой отсчёта и тек. значением натикавших секунд), и в соответствии со своими настройками запускает свои собственные часы, пользуясь возможно уже другим механизмом - в работающей системе есть несколько устройств, которые могут "тикать" с постоянной частотой, это не только тот системный таймер который упомянут выше и который в нашем примере тикает раз в секунду. Т.е. винда берёт только начальное значение из биоса, и потом считает время сама, пользуясь другими "тиками". И у неё получается то же самое, та же конструкция что и в биосе - некий тикающий таймер, и некая точка отсчёта, которые в совокупности составляют свои часы. Так вот, никто не мешает менять значение времени в этой точке отсчёта - при этом будет, естественно, меняться системное - "виндовое" - время (но не его ход). Т.е. получаем, что двое часов - биосные и виндовые - вообще говоря, независимы. Только дело в том, что в нормальных условиях при смене своей точки отсчёта винда сразу сообщает об этом биосу, чтобы тот тоже свою точку отсчёта поменял соответствующим образом. И получается внешне, что там как бы одни часы. В моём случае винда почему-то вот эту вторую часть процедуры смены времени не делала. Вот бы понять почему, какие её механизмы там были нарушены... Что касается временных зон и переходов. Здесь всё зависит от настроек и может быть выставлено по разному. Я упоминал что биос не понимает что такое временные зоны, поэтому можно считать что биос работает по UTC (Universal Coordinated Time - это правильное название, хотя по факту оно совпадает с временем по Гринвичу, но там тоже могут быть свои политические изменения и переходы на летнее/зимнее) или по местному времени с переходами. Т.е., в операционной системе мы просто полагаем что биосные часы идут по такому-то принципу, и всё, сам биос об этом не знает. Нужно нам это только для вычисления начальной точки отсчёта в наших виндовых системных часах (ну и для того чтобы сообщить биосу об изменениях времени, - обратный перевод из виндового в биосный). Обычно винда считает что биос идёт в соответствии с местным временем - чтобы в биосе показывалось то же время что и в винде. При этом, хотя она знает все правила перевода с летнего на зимнее и обратно, и могла бы после перехода просто по-другому считать смещение, ей приходится менять точку отсчёта в биосе, и запоминать этот факт, чтобы не менять её ещё раз после следующей перезагрузки. Но она делает это только в том случае если с момента перехода летнее/зимнее прошло не много времени. Именно поэтому если делать образ и много позже его разворачивать, переход в нём с летнего на зимнее не происходит автоматически. Точно также винда может считать что биосные часы работают по UTC - в этом случае ничего переводить не нужно в биосе при смене летнее/зимнее, нужно скорректировать только виндовое смещение. В этом случае когда бы не был развёрнут сохранённый образ, с переходами будет всё в порядке - предполагая что за это время не поменялись правила перехода, и сохранённая винда о них ничего не знает - как это произошло у нас этой осенью. Но в любом случае временные зоны и летнее/зимнее время не имеют никакого отношения к моей проблеме. Это просто небольшое отступление - я вижу человек пытается помочь, и я это ценю, и пытаюсь помочь встречно - разобраться... Спасибо! | Всего записей: 15 | Зарегистр. 24-06-2009 | Отправлено: 12:51 04-11-2011 | Исправлено: mjt, 12:52 04-11-2011 |
|