Jahr-2038-Problem

Jahr-2038-Problem
Exemplarische Darstellung des Jahr-2038-Problems

Das Jahr-2038-Problem von EDV-Systemen könnte zu Softwareausfällen im Jahr 2038 führen. Dieses Problem ist auf EDV-Systeme beschränkt, die den POSIX-Zeitstandard benutzen und time_t als vorzeichenbehaftete 32-Bit-Ganzzahl definieren.

Hintergrund

POSIX zählt die seit dem 1. Januar 1970 abgelaufene Zeit in Sekunden (Unixzeit).[1] Am 19. Januar 2038 um 03:14:08 Uhr UTC wird die Anzahl der vergangenen Sekunden die Kapazität einer vorzeichenbehafteten 32-Bit-Ganzzahl (maximal 2.147.483.647) überschreiten.[2] Das signifikanteste Bit (MSB) wird laut Konvention dazu verwendet, positive und negative Zahlen zu unterscheiden (Vorzeichen im Zweierkomplement), so dass die Zählung bei einer Überschreitung des Wertes 2.147.483.647 (binär 01111111111111111111111111111111) in den negativen Bereich springt (z. B. -2.147.483.648 binär 10000000000000000000000000000000). Das führt bei einer ungenügend implementierten Konvertierung von Unixtime zu Datum und Uhrzeit ungewollt zu einem Wert, der vor Beginn der POSIX-Epoche (1. Januar 1970) liegt. Dieses Problem wird in der Softwareentwicklung als Zählerüberlauf bezeichnet.

Ohne Gegenmaßnahmen könnten die wirtschaftlichen Auswirkungen verheerend sein, zumal im Banken- und Versicherungsumfeld Unix-Systeme neben Mainframes zur Standardausstattung gehören. Neben den Unix-Servern arbeiten viele Embedded Systeme mit unix-artigen Betriebssystemen, deren Einsatzzeit oft ein Vielfaches von Desktop- und Serversystemen beträgt (z.B. Router und elektronische Messgeräte).

Ein Beispiel für typische Jahr-2038-Fehler sind Transaktionen, deren Gültigkeit vom Zeitstempel des Ergebnisfeldes abgeleitet wird. Ist das Ergebnis nicht jünger als die Ausgangsdaten, so wird weiterhin auf ein gültiges Ergebnis gewartet oder die Transaktion irgendwann automatisch neu angestoßen. Am Stichtag des Jahr-2038-Problems werden allerdings sämtliche Ergebnisse den vermeintlichen Zeitstempel Dezember 1901 tragen, sind also immer älter als die Eingabedaten. Wartende Programme geraten so leicht in Endlosschleifen, was sich für den Endbenutzer in „abgestürzten“ Anwendungen äußert – z. B. ein Geldautomat, der endlos auf die elektronische Bestätigung der Kontenabbuchung wartet, bevor er Geld ausgibt.

Abhilfe

Schon deutlich vor dem Jahr 2038 wird der Unixzeit-Zähler in den Systemen voraussichtlich als 64-Bit-Zähler implementiert. Das hängt damit zusammen, dass die unixtypische C-Definition auf den Basistyp „long“ verweist.[3][4][5] Es hat sich bereits heute im Unixumfeld durchgesetzt, dass beim Übergang von 32-Bit- zu 64-Bit-Architekturen ebendieser Basistyp auf 64-Bit wechselt (technisch: Umstellung von ILP32 auf LP64-Modell), so dass Zeitstempel zumindest systemseitig als 64-Bit time_t geliefert werden. Durch die 64-Bit-Umstellung kann der POSIX-Zeitstempel 292 Milliarden Jahre zuverlässig arbeiten, ohne dass es zu einem Überlauf kommt. Da das Alter des Universums auf 13,75 Milliarden Jahre geschätzt wird, ist dieser Zeitraum ausreichend, um selbst astronomische Zeiträume hinreichend abzudecken.

Dennoch reicht eine Umstellung auf neue 64-Bit-Prozessorarchitekturen (AMD64/EM64T, Itanium/IA-64, IBM Power 5, UltraSPARC, PA-RISC, MIPS) hier alleine nicht aus: Sie vereinfacht zwar die systemseitige Anpassung, macht jedoch die Durchforstung und Neu-Übersetzung aller Programme mit starrer 32-Bit-Formatierung nicht überflüssig. Nicht alle Programme sind bereits 64-Bit-tauglich, und es ist leicht möglich, dass vom System gelieferte 64-Bit-Zeitstempel fälschlicherweise als 32-Bit weiterverarbeitet werden und somit nur die unteren 32 Bit abgefragt werden, welche dann losgelöst wiederum am 19. Januar 2038 den Wert −231 = 13. Dezember 1901 annehmen.

Eine andere Abhilfe ist die Umstellung der Programme vom Unixzeit-Zähler auf eine neue Zeitbasis; schon verbreitet ist etwa die Zählung von Millisekunden oder Mikrosekunden mit 64-Bit-Zählern (die nicht notwendigerweise eine 64-Bit-Architektur erfordern), insbesondere in eingebetteten Systemen mit Echtzeitanforderungen in dieser Größenordnung. Neuere Zeit-APIs verwenden immer eine größere Genauigkeit und Spannweite als die Unixzeit, beispielsweise Java System.currentTimeMillis (64-Bit Millisekunden seit 1. Januar 1970) und .NET System.DateTime.Now.Ticks (64-Bit 10000stel Millisekunden seit 1. Januar 0001). Die datenbankgestützten Transaktionen verwenden oft TIMESTAMP-Werte, die im Datenbankstandard SQL92 mit einer Genauigkeit in Mikrosekunden definiert sind (auch so zugreifbar in ODBC/JDBC) und deren Repräsentation in Datenbanken meist als Abstand zum Tageszähler (SQL DATE) erfolgt, wobei der Tageszähler auch in 32-Bit eine größere Spannweite besitzt (die zugrunde liegende Epoche des Tageszählers ist jedoch sehr verschieden). Sofern diese Datentypen für Zeitstempel im Programm durchgängig weiterverwendet werden, heben sich die Beschränkungen des Unixzeit-Zählers auf.

Einzelnachweise

  1. Seconds Since The Epoch. Abgerufen am 16. Dezember 2010 (englisch).
  2. http://www.heise.de/ct/artikel/Prozessorgefluester-285204.html
  3. Linux Standard Base Core Specification 4.0. Abgerufen am 16. Dezember 2010 (englisch).
  4. man pages section 3: Library Interfaces and Headers. Abgerufen am 16. Dezember 2010 (englisch).
  5. HP-UX Reference Volume 5 of 5. types(5). Abgerufen am 16. Dezember 2010 (englisch).

Wikimedia Foundation.

Игры ⚽ Поможем сделать НИР

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Jahr-2038-Problem — Jahr 2038 Problem,   Jahr 2000 Problem …   Universal-Lexikon

  • Jahr-2000-Problem —   (Y2k Problem, Millenium Bug), das vor dem Jahreswechsel von 1999 auf 2000 befürchtete Problem, dass die zahlreichen Programme, die Jahreszahlen nur zweistellig darstellen, fehlerhaft arbeiten und weiträumige Systemausfälle und damit erhebliche… …   Universal-Lexikon

  • Jahr-2010-Problem — (auch 2010 Bug) bezeichnet mehrere, in unterschiedlichen Computeranwendungen zur Jahreswende 2009/2010 aufgetretene Softwarefehler. Inhaltsverzeichnis 1 Bekanntgewordene Beispiele 2 Ursachen 2.1 Speicherung von Jahreszahlen im BCD Format …   Deutsch Wikipedia

  • Jahr-2000-Problem — Millennium Bug auf einer Anzeigetafel in Nantes, aufgenommen am 3. Januar 2000 Das Jahr 2000 Problem, auch als „Millennium Bug“ oder „Y2K Bug“ („Year 2 Kilo“ = Jahr 2000) bezeichnet, ist ein Computerproblem, das durch die interne Behandlung von… …   Deutsch Wikipedia

  • 2038-Problem — Exemplarische Darstellung des Jahr 2038 Problems Das Jahr 2038 Problem könnte zu Softwareausfällen im Jahr 2038 führen. Dieses Problem ist auf EDV Systeme beschränkt, die den POSIX Zeitstandard benutzen und time t als 32 Bit Binärzahl definieren …   Deutsch Wikipedia

  • 2038 — Exemplarische Darstellung des Jahr 2038 Problems Das Jahr 2038 Problem könnte zu Softwareausfällen im Jahr 2038 führen. Dieses Problem ist auf EDV Systeme beschränkt, die den POSIX Zeitstandard benutzen und time t als 32 Bit Binärzahl definieren …   Deutsch Wikipedia

  • Unixzeit — Die Unixzeit ist eine einfache Zeitdefinition, die 1969 für das Betriebssystem Unix entwickelt und als POSIX Standard festgelegt wurde. Vor Unix Version 6 zählte die Unix Uhr in Hundertstel Sekunden, daher musste die Epoche jedes Jahr neu… …   Deutsch Wikipedia

  • Unix-Epoche — Die Unixzeit ist eine einfache Zeitdefinition, die 1969 für das Betriebssystem Unix entwickelt und als POSIX Standard festgelegt wurde. In den ersten Tagen von Unix wurde die Definition mehrfach geändert. Seit mehreren Jahrzehnten ist sie jedoch… …   Deutsch Wikipedia

  • Unix-Timestamp — Die Unixzeit ist eine einfache Zeitdefinition, die 1969 für das Betriebssystem Unix entwickelt und als POSIX Standard festgelegt wurde. In den ersten Tagen von Unix wurde die Definition mehrfach geändert. Seit mehreren Jahrzehnten ist sie jedoch… …   Deutsch Wikipedia

  • Unix-Zeit — Die Unixzeit ist eine einfache Zeitdefinition, die 1969 für das Betriebssystem Unix entwickelt und als POSIX Standard festgelegt wurde. In den ersten Tagen von Unix wurde die Definition mehrfach geändert. Seit mehreren Jahrzehnten ist sie jedoch… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”