Zusammenhang zwischen Hardwareuhr und Systemuhr beim Herunterfahren

366
Dmitriy Kormulev

Ich verwende Centos 7 mit Kernel 3.10 und habe hwclock und chrony installiert und ausgeführt. Es wird geschrieben, dass die Systemuhr von der Hardware-Uhr beim Booten eingestellt wird. (hier http://tldp.org/HOWTO/Clock-2.html )

"Die andere ist die" Systemuhr "(manchmal als" Kernuhr "oder" Software-Uhr "bezeichnet), die ein Softwarezähler ist, der auf dem Timer-Interrupt basiert. Es existiert nicht, wenn das System nicht läuft, und muss daher beim Booten von der RTC (oder einer anderen Zeitquelle) initialisiert werden. “

und dass es durch ein init-Skript (das durch systemd ersetzt wurde) oder durch den Kernel selbst (hier https://wiki.gentoo.org/wiki/System_time ) gesetzt werden kann:

„Normalerweise wird die Hardware-Uhr dazu verwendet, die Systemuhr beim Booten einzustellen. Dies kann vom Kernel selbst oder von einem Boot-Service (Init-Skript) ausgeführt werden. "

Obwohl später erwähnt wird, dass Linux im modernen Kernel (der Artikel scheint etwas veraltet zu sein), sich selbst damit befassen (hier https://wiki.gentoo.org/wiki/System_time ).

"Auf einem ausreichend modernen Kernel (3.9 oder neuer) kann Linux so konfiguriert werden, dass die Einstellung der Systemzeit automatisch erfolgt."

Ich habe die Datei / var / log / dmesg überprüft und dies scheint in meinem Fall der Fall zu sein, dh der Kernel selbst setzt die Systemuhr von RTC beim Booten.

2.596137] rtc_cmos 00:00: Einstellen der Systemuhr auf 2018-05-08 14:49:58 UTC (1525790998)

Obwohl es viele Informationen zur Bootzeit gibt, fand ich nur sehr wenige (und für mich recht umstrittene) Informationen zum Zeitpunkt des Herunterfahrens. Es wird geschrieben (hier https://wiki.gentoo.org/wiki/System_time ), dass die Systemuhr beim Herunterfahren auf RTC zurückgesetzt wird. Da beim Booten die Systemzeit vom Kernel festgelegt wird, nahm ich an, dass der Kernel beim Herunterfahren für die Zurücksetzung der Systemzeit auf RTC verantwortlich ist, aber keine bestimmten Informationen darüber finden konnte.

Meine Fragen lauten also: Ist die Zeit beim Herunterfahren wirklich von der Systemuhr auf RTC eingestellt, oder kann es einige Ausnahmen geben? (Ausnahmen vielleicht wie Kernel-Version oder spezielle Flags) Und wenn ja, wer ist dafür verantwortlich, Kernel oder ein Skript?

Ich lese übrigens die Frage Beziehung zwischen Hardwareuhr und Systemuhr, aber meine Frage ist etwas konkreter und so anders.

// ------------------------------------------------ -------------------------------------------------- -------------- // Meine Frage ist in der Warteschleife, deshalb schreibe ich hier

Gemäß der Bug-Diskussion hier (obwohl etwas alt) ( https://bugzilla.redhat.com/show_bug.cgi?id=753487 ), wird RTC beim Herunterfahren tatsächlich auf die Systemzeit gesetzt und vom Kernel ausgeführt

hwclock --systohc wird bei jedem Herunterfahren aufgerufen, aber das ist nicht mehr der Fall.

Neuzuweisung zum Kernel.

So scheint es, dass die Fragen bezüglich der Einstellung der Systemzeitwerte auf RTC gelöst sind.

1
Es scheint, dass ich die Antwort auf meine Frage gefunden habe. Gemäß der Bug-Diskussion hier (obwohl etwas alt) (https://bugzilla.redhat.com/show_bug.cgi?id=753487) ist RTC tatsächlich auf die Systemzeit eingestellt und wird vom Kernel ausgeführt Dmitriy Kormulev vor 5 Jahren 0
Beachten Sie, dass jede Antwort, die Sie finden, verteilungsspezifisch ist. IOW diese Vorgänge werden im Benutzerraum initiiert und nicht unter der Kontrolle des Linux-Kernels. * "es wird vom Kernel erledigt" * - Natürlich wird I / O * "erledigt" * vom Kernel, aber auf Anforderung vom Userspace. sawdust vor 5 Jahren 0
Sägemehl Danke für Ihre Antwort. Sie haben geschrieben, dass "natürlich I / O vom Kernel" erledigt wird, aber auf Anforderung des Userspaces. ", Meinen Sie, dass ein Spezialflag von einem Benutzer gesetzt werden muss, um diesen Kernel" I / O "zu aktivieren (in unserem Fall RTC zur Systemzeit)? Dmitriy Kormulev vor 5 Jahren 0
Nein, es gibt keine "Sonderflagge". I / O wird vom Userspace angefordert, indem einfach eine read () - oder write () - Anforderung ausgegeben wird, die einen Systemaufruf an den Kernel auslöst. Der RTC ist einfach eine andere Peripherie, und der Kernel ist für die Ausführung von E / A mit allen Peripheriegeräten verantwortlich (mit Ausnahme einiger abnormaler / atypischer Geräte). sawdust vor 5 Jahren 0

0 Antworten auf die Frage