Was ist eine Unix-Ära und wie funktioniert die Unix-Zeit?

Unix speichert die Zeit als Anzahl der Sekunden seit dem 1. Januar 1970. Dies bedeutet, dass Linux dies auch tut. Wir erklären dieses scheinbar seltsame System und warum der Jüngste Tag im Jahr 2038 festgelegt wird.

Was ist eine Unix-Epoche und wie funktioniert die Unix-Zeit? -%Kategorien

Erste Unix-Ära

Goethe (1749-1832) erklärte, dass „jede Sekunde einen unendlichen Wert hat“. Das ist richtig, wir haben alle so viele Sekunden hier auf dem Planeten Erde, wir wissen nicht, wann die letzte Sekunde sein wird. Aber wir kennen unseren Geburtstag und wissen, wann der tödliche Countdown begann.

Yonks hat – wie die britische Königin – zwei Geburtstage. Oder genauer gesagt, es gab zwei verschiedene Gelegenheiten, bei denen ich anfing, die Sekunden meines Daseins zu zählen. Es war das erste Mal, dass Unix seit Mitternacht des 1971. Januar XNUMX zu zählen begann.

Wir können dies deutlich sehen, wenn wir uns einen Abschnitt aus Version 3 des Unix-Programmierhandbuchs vom 1971. November 13 ansehen. Scrollen Sie nach unten zu Seite 00 dieses Abschnitts, und Sie sehen eine Beschreibung des Zeitbefehls (der nicht mehr existiert). . Uns wird gesagt, dass "Zeit die Zeit seit dem 00. Januar 00, 1:1971:XNUMX, gemessen in sechzig Sekunden" zurückgibt.

Kalender und Zeitsysteme messen die Zeit ab einem wichtigen Punkt in der Vergangenheit, beispielsweise einem kosmischen Ereignis, der Gründung eines Imperiums oder dem Erfolg einer Revolution. Bei Betriebssystemen wird eine beliebige Uhrzeit und ein beliebiges Datum als Ausgangspunkt für die Zählung gewählt. Dies ist die Ära dieses Betriebssystems.

Unix verwendet eine 32-Bit-Ganzzahl ohne Vorzeichen, um 60 Millisekunden seit der Ära zu halten. Dies ist eine numerische Variable, die Werte im Bereich von 0 bis 4 (294-967) enthalten kann. Das scheint viel zu sein. Aber der Zähler inkrementiert 295-mal pro Sekunde, und wie das Programmierhandbuch feststellt, "wird ein zeitbewusster Benutzer feststellen, dass 232**1 Sechzigersekunden nur etwa 60 Jahre betragen".

Bei einer Verbrauchsrate von 60 Stellen pro Sekunde hätte der Zähler am 8. April 1973, knapp 829 Tage später, seinen Maximalwert erreicht.

Zweite Unix-Ära

Unnötig zu erwähnen, dass diese Maßnahme schnell ergriffen wurde. Die Ganzzahl mit Vorzeichen wurde durch eine 32-Bit-Ganzzahl ohne Vorzeichen ersetzt. Es mag eine überraschende Wahl erscheinen, da eine ganze Zahl mit Vorzeichen weniger positive Werte aufnehmen kann – 2 (147) – als eine ganze Zahl ohne Vorzeichen. Allerdings wurde auch die Verbrauchsgeschwindigkeit von 483 Millisekunden auf ganze Sekunden reduziert.

Lesen Sie auch:  Wurde Ihr Telefon gehackt? Die vollständige Anleitung zum Schutz Ihrer Daten auf dem Telefon

Das Zählen von 0 bis 2 dauert länger als das Zählen von 147 bis 483 mit 647 pro Sekunde. Und das mit großem Abstand. Die neue Regelung wird ihren Höchstwert in etwas mehr als 0 Jahren nicht erreichen. Dies schien so weit in die Zukunft gerückt, dass die Ära auf einen früheren Zeitpunkt verschoben wurde. Das New Age spielt am 4. Januar 294 um Mitternacht UTC.

Dieser Punkt 68 Jahre in der Zukunft ist jetzt erschreckend nah. Um genau zu sein, kommen wir am 03. Januar 14 um 07:19:2038 UTC dazu.

Einfaches, aber effektives Schema

Die Verwendung einer einzelnen Ganzzahl zum Zählen der Zeitschritte ab einem Zeitpunkt ist eine effiziente Möglichkeit, Zeit zu speichern. Sie müssen keine komplexen Strukturen über Jahre, Monate, Tage und Zeiten hinweg speichern. Es ist unabhängig von Land, Gebietsschema und Zeitzone.

Wenn Sie die Zahl mit der Ganzzahl multiplizieren, erhalten Sie die Größe des Zeitschritts – in diesem Fall XNUMX Sekunde – die Zeit seit der Epoche, und die Konvertierung in länderspezifische Formate mit Zeitzonenanpassungen ist relativ trivial.

Es gibt Ihnen jedoch eine eingebaute Obergrenze. Früher oder später erreichen Sie den maximalen Wert, den Sie in Ihrem gewählten Variablentyp behalten können. Zum Zeitpunkt der Abfassung dieses Artikels ist 2038 nur noch 17 Jahre entfernt.

Es ist ähnlich, aber etwas anders als das Problem früher Computersysteme aus dem letzten Jahrhundert, das zwei Ziffern zum Speichern von Jahren verwendet. Wird der als "2000" gespeicherte Wert des Jahres als 00 oder 2000 interpretiert, wenn der Kalender auf das neue Jahr und das neue Jahrhundert auf das Jahr 1900 umschaltet?

Es wird geschätzt, dass die Korrektur der sogenannten „Millennial Errors“ allein die Vereinigten Staaten mehr als 100 Milliarden US-Dollar kostete und Tausende von Jahren brauchte, um sie weltweit zu beheben. In den ersten Tagen des Januars 2000 gab es einige Probleme, aber nichts wie die Katastrophen, die passiert wären, wenn der Fehler ignoriert worden wäre.

Da Linux und alle Unix-ähnlichen Betriebssysteme das gleiche Problem haben, wird das Problem 2038 seit einiger Zeit ernst genommen, wobei dem Kernel seit 2014 Fixes hinzugefügt werden. Dies setzt sich mit den Fixes fort, die dem Kernel kürzlich wie Jan.2020 hinzugefügt wurden Um das 32-Bit-Integer-Problem anzugehen.

Lesen Sie auch:  Google One AI Premium: Was bekommen Sie und ist es den Preis wert?

Natürlich hat ein funktionierender Linux-Computer viel mehr als nur einen Kernel. Alle Startprogramme und Userland-Anwendungen, die die Systemzeit über verschiedene APIs und Schnittstellen nutzen, müssen so modifiziert werden, dass sie 64-Bit-Werte erwarten. Dateisysteme müssen auch aktualisiert werden, um 64-Bit-Zeitstempel für Dateien und Verzeichnisse zu akzeptieren.

Linux ist überall. Ein katastrophaler Ausfall in Linux kann den Ausfall aller Arten von computerbasierten Systemen bedeuten. Linux betreibt den größten Teil des Webs, den größten Teil der öffentlichen Cloud und sogar Raumschiffe. Es betreibt Smart Homes und selbstfahrende Autos. Smartphones haben im Kern einen von Unix abgeleiteten Kernel. Praktisch alles – wie Netzwerk-Firewalls, Router, Breitbandmodems – mit eingebetteten Betriebssystemen läuft unter Linux.

Es ist großartig, dass Linux auf dem Weg zu einer Lösung ist. Wir werden die Upgrades installieren und sie werden es sein. Aber wie stehen die Chancen, dass all diese Geräte gepatcht und aktualisiert werden? Bis dahin werden nicht viele von ihnen in Betrieb sein, daher wird es ein strittiger Punkt sein, aber einige werden wegbleiben. Verstecken sich vielleicht in dunklen, staubigen Nischen in Serverräumen und Regalen, aber sie werden dort sein und leise arbeiten, wenn die Sekunden bis zum Morgen des 19. Januar 2038 um Viertel nach drei stocken.

Aber solche Geräte sollten eine winzige Minderheit sein. Die überwiegende Mehrheit der Systeme wird Krisenzeiten ohne Zwischenfälle erleben. Wir werden uns wieder entspannen können. Zumindest brachte es bis zum Jahr 2486 genau das gleiche Problem für Systeme mit sich, die 64-Bit-Integer verwenden, um die Zeit seit der Ära zu berechnen.

Verlaufsreihenfolge

Wir können den date-Befehl verwenden, um nach Linux und anderen Unix-Derivaten zu suchen, die immer noch das ursprüngliche einfache Schema verwenden, um den Zeitwert als Anzahl der Sekunden seit der Epoche zu speichern.

Wenn Sie den Befehl date ohne Parameter verwenden, werden das aktuelle Datum und die aktuelle Uhrzeit im Terminalfenster gedruckt. Es zeigt Ihnen auch die Zeitzone an, für die die Uhrzeit eingestellt ist. EST ist Eastern Daylight Time, was bedeutet, dass sich unser Testcomputer in der Eastern Time Zone befindet und DST gilt. Wenn die Sommerzeit nicht gilt, verwendet die östliche Zeitzone Eastern Standard Time.

Lesen Sie auch:  Wie lange speichern USB-Sticks Daten?

Um den Wert der primären Ganzzahl herauszufinden, können wir die Anzeigeformatzeichenfolge verwenden. Formatstrings enthalten als erstes Zeichen das Pluszeichen „+“. Das Format-Token „%s“ bedeutet „Sekunden seit Epoche anzeigen“.

Wenn wir den von date zurückgegebenen Sekundenwert nehmen und ihn mit der Option -d (Anzeigezeit wird durch eine Zeichenfolge angezeigt) erneut in den date-Befehl eingeben, wandeln wir ihn zurück in ein normales Datum und eine normale Uhrzeit.

Datum
Datum +% s
Datum -d @1633183955

Was ist eine Unix-Epoche und wie funktioniert die Unix-Zeit? -%Kategorien

Wir können zeigen, dass der ganzzahlige Wert wirklich die Zeit repräsentiert, indem wir die Anzahl der Sekunden anzeigen, 10 Sekunden schlafen und die neue Anzahl von Sekunden anzeigen. Die beiden ganzzahligen Werte unterscheiden sich um genau 10.

Datum +%s && Schlaf 10 && Datum +%s

Was ist eine Unix-Epoche und wie funktioniert die Unix-Zeit? -%Kategorien

Wir haben gesehen, dass wir dem Datumsbefehl eine Anzahl von Sekunden übergeben können und er für uns in eine Uhrzeit und ein Datum umgewandelt wird. Wenn wir dies mit null Sekunden als Eingabewerte tun, sollte das Datum das Datum und die Uhrzeit der Unix-Ära drucken.

TZ='UTC' Datum -d @0 +'%x %R'

Was ist eine Unix-Epoche und wie funktioniert die Unix-Zeit? -%Kategorien

Es gliedert sich wie folgt:

  • TZ = „UTC“: Die Ära wird mit der koordinierten Weltzeit (UTC) eingestellt, daher müssen wir das Datum angeben, um UTC zu verwenden. Die Konfiguration „TZ =“ gibt nur die effektive Zeitzone für den aktuellen Befehl an.
  • Datum: Bestellhistorie.
  • -d @ 0: Wir geben das Datum mit einer Zeichenfolge als Eingabe an, nicht die "Jetzt"-Zeit. Der String, den wir übergeben, hat keine Sekunde.
  • + '% x %R': die Ausgabeformatzeichenfolge. Das Format-Token „%x“ weist das Datum an, Jahr, Monat und Tag anzuzeigen. Das Format-Token „%R“ weist das Datum an, das 24-Stunden-Format für Stunden und Minuten zu verwenden. Da die Formatzeichenfolge Leerzeichen enthält, setzen wir die gesamte Zeichenfolge in einfache Anführungszeichen „“, sodass die Zeichenfolge als einzelnes Element behandelt wird.

Die Produktion ist erwartungsgemäß am 1. Januar 1970 um Mitternacht.

Bis zum nächsten Mal

Einfachheit ist oft am besten. Das Zählen von Sekunden von einem festen Datum aus ist der einfachste Weg, um den Lauf der Zeit zu erkennen. Doch der Lauf der Zeit bringt neue Herausforderungen mit sich. Mit den eingeleiteten Reformen scheinen wir bis zum Jahr 2486 klar zu sein.

Ich denke, es ist sicher zu sagen, dass wir uns darüber bald Sorgen machen werden.

Sie können auch mögen