2015-03-20 4 views
10

Ich habe diese Antwort irgendwo gelesen, aber ich es nicht genau verstehen:Wie funktioniert die Uhr in Windows 7?

Ich verstehe Windows die Uhr erhöht all curTimeIncrement (156001 100 ns) mit dem Wert von curTimeAdjustment (156001 + - N). Aber wenn die Uhr mit GetSystemTime gelesen wird, interpoliert die Routine innerhalb des 156001 Nanosekunden * 100 Intervalls zu die angegebene Genauigkeit?

Kann jemand versuchen, es mir zu erklären?

Was ist curTimeIncrement, curTimeAdjustment und wie kann Windows dies tun?

Wie wirkt sich dies auf die genaue Uhrzeit aus?

Ist das nur für Windows 7 oder auch andere OS Win8, Linux, usw. wahr?

Antwort

27

Es bezieht sich auf die von GetSystemTimeAdjustment() unter Windows zurückgegebenen Werte. Es zeigt Ihnen, wie die Uhr angepasst wird, um die Echtzeit anzupassen oder zu verlangsamen. "Real" ist die Zeit, die von einer Institution wie dem NIST in den USA gehalten wird, sie haben eine Atomuhr, deren Genauigkeit weit höher ist als die in Ihrer Maschine eingebaute Uhr.

Die Echtzeituhr (RTC) in Ihrer Maschine hat eine begrenzte Genauigkeit, ein Nebeneffekt, die Hardware erschwinglich zu halten, sie neigt dazu, jeden Monat um ein paar Sekunden abgeschaltet zu werden. Das Betriebssystem kontaktiert also regelmäßig einen Zeitserver über das Internet, time.windows.com ist die übliche Auswahl unter Windows. Das sagt ihm die aktuelle Echtzeit nach dem Atomuhr-Orakel.

Die Ungenauigkeit der RTC ist nicht die einzige Quelle für Drift, manchmal wird die Echtzeit absichtlich geändert. Hinzufügen einer Schaltsekunde, um die Uhren mit der wahren Rotation der Erde neu zu synchronisieren. Der aktuelle Tag (24 x 60 x 60 Sekunden) ist ein bisschen zu kurz, die Erdumdrehung verlangsamt sich jedes Jahr um ~ 1,5 msec und ist im Allgemeinen unregelmäßig aufgrund von großen Stürmen und Erdbeben. Die eingebaute Schaltsekunde macht das wett. Der letzte wurde am 30. Juni dieses Jahres um 23:59:60 UTC hinzugefügt. 60 ist kein Tippfehler :)

Der vorherige war am 30. Juni 2012. Ein bisschen berüchtigt, die Einführung der Schaltsekunde stürzte viele Linux-Server. Google "Linux leap second bug", um mehr darüber zu erfahren.

Was ist im Allgemeinen was die Maschine unter GetSystemTimeAdjustment() zu vermeiden versucht, die Zeit mit dem Wert aus dem Zeitserver sofort ändern ist sehr gefährlich. Software hat oft eine harte Annahme, dass die Zeit stetig fortschreitet und sich schlecht verhält, wenn dies nicht der Fall ist. Zum Beispiel zweimal die gleiche Zeit zu beobachten, wenn die Uhr zurückgestellt wird. Oder eine falsche Zeit wie 23:59:60 UTC wegen der Schaltsekundeneinfügung beobachten.

So ist es nicht, die Uhr wird aktualisiert 64 Mal pro Sekunde, bei der Uhr Tick Interrupt. Oder mit anderen Worten 1/64 = 0.015625 zwischen Ticks, 156250 in Nanosekunden * 100 Einheiten. Wenn eine Uhreinstellung vorgenommen werden muss, wird nicht nur 156250 sondern etwas mehr oder weniger hinzugefügt. Dadurch wird die Uhr langsam auf die tatsächliche Zeit neu synchronisiert und es wird vermieden, Software zu stören.

Dies hat natürlich eine unangenehme Nebenwirkung auf Software, die eine Uhr malt. Ein naheliegender Weg ist es, einen Sekunden-Timer zu verwenden. Aber manchmal ist das keine Sekunde, es wird nicht sein, wenn eine Zeitanpassung stattfindet.Dann kommt Nyquists Abtasttheorem ins Spiel, manchmal aktualisiert ein Timer-Tick die Uhr überhaupt nicht oder es überspringt eine Sekunde. Bemerkenswert ist, dass dies nicht die nur Grund ist, warum es schwierig ist, eine gemalte Uhr genau zu halten, die Timer-Benachrichtigung selbst wird immer auch verzögert. Ein Nebeneffekt von Software nicht sofort ausführen. Dies ist in der Tat die viel wahrscheinliche Quelle von Ärger, die Uhr Anpassung ist nur Sahnehäubchen auf dem Kuchen, die leichter zu verstehen ist.

Umständliches Problem, Herr Nyquist hat uns gelehrt, dass Sie häufiger Proben nehmen müssen, um unerwünschte Aliasing-Effekte zu eliminieren. Eine Problemumgehung besteht also darin, den Zeitgeber nur in einem kurzen Intervall (z. B. 15 oder 31 Millisekunden) festzulegen, damit der Benutzer das fehlende Update nicht mehr beobachten kann.

+0

Hmmm. Dies bedeutet, dass, wenn die Software Musik verarbeitet, Sie sich nicht auf die Systemuhr verlassen können (ein Profi würde eine Änderung des Tempos hören). Vermutlich ist Musik nicht die einzige Domäne, die für eine Änderung der Rate empfindlich ist, aber nicht empfindlich für einen Fehler pro Sekunde pro Monat. – 18446744073709551615

+1

Sicher, deshalb wird es in Hardware gemacht. Ihre Audiokarte (Chip heutzutage) kümmert sich mit ihrer eigenen Uhr darum. Es ist nicht justiert, es muss nur stabil sein, nicht genau. –