Aktuelles
  • Herzlich Willkommen im Balkanforum
    Sind Sie neu hier? Dann werden Sie Mitglied in unserer Community.
    Bitte hier registrieren

Jahr-2038-Problem

Besa Besë

Gesperrt
im jahr 2038 werde ich als informatiker ne menge geld verdienen :toothy4:


Jahr-2038-Problem

aus Wikipedia, der freien Enzyklopädie

(Weitergeleitet von 2038)
Wechseln zu: Navigation, Suche

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 vorzeichenbehaftete 32-Bit-Binärzahl definieren.
POSIX zählt die seit dem 1. Januar 1970 abgelaufene Zeit in Sekunden. Am 19. Januar 2038 um 03:14:08 Uhr UTC wird die Anzahl der vergangenen Sekunden die Kapazität einer 31-Bit-Zahl (maximal 2147483647) überschreiten. 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 2147483647 (binär 01111111111111111111111111111111) in den negativen Bereich springt (z. B. -2147483648 binär 10000000000000000000000000000000). Dies führt bei einer ungenügend implementierten Konvertierung von Unixtime zu Datum und Uhrzeit ungewollt zu einem Wert vor Epoche (1. Januar 1970). Dieses Problem wird in der Softwareentwicklung als Zählerüberlauf (Counterwrap) bezeichnet.
Im Vergleich zum Jahr-2000-Problem, welches im Wesentlichen beim Datumsstempel von Dateien auftrat, führt das Jahr-2038-Problem zu Fehlern bei elektronischen Transaktionen, die die Unixzeit als Zeitstempel verwenden. 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 [Bearbeiten]

Schon deutlich vor dem Jahr 2038 wird der Unixzeit-Zähler in den Systemen voraussichtlich als 64-Bit-Zähler implementiert. Dies hängt damit zusammen, dass die unixtypische C-Definition auf den Basistyp „long“ verweist. Es hat sich bereits heute im Unixumfeld durchgesetzt, dass beim Übergang von 32-Bit- zu 64-Bit-Architekturen eben dieser 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.
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, insbesondere in eingebetteten Systemen mit Echzeitanforderungen 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 zugrundeliegende 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.
Von „http://de.wikipedia.org/wiki/Jahr-2038-Problem
 
mich intressiert das wirklich sehr, nur hab ich das nicht ganz verstanden durch diesen ganzen wirr warr.
kannst du oder jemand anders, bitte, mir das in 2-3 sätzen klipp und klar erläutern?
danke im voraus :)
 
mich intressiert das wirklich sehr, nur hab ich das nicht ganz verstanden durch diesen ganzen wirr warr.
kannst du oder jemand anders, bitte, mir das in 2-3 sätzen klipp und klar erläutern?
danke im voraus :)

soweit ich verstanden habe werden zahlen in bit gespeichert.
Bisher ist das grösste "Speichermedium" 32 Bit
Die Maximale Zahl die in ein 32 bit passen wird 2038 überschritten, udn somit fängt entweder das zählen von vorne an oder geht in den minusbereich man weiß es nicht.Es kann also mitunter geschehen das du beim Online Banking aufienma das Datum 1970 drauf stehen hast
 
mich intressiert das wirklich sehr, nur hab ich das nicht ganz verstanden durch diesen ganzen wirr warr.
kannst du oder jemand anders, bitte, mir das in 2-3 sätzen klipp und klar erläutern?
danke im voraus :)

der systemzeitzähler zählt seit 1901 die zeit im binären zahlensystem, also nicht in dezimalzahlen 000000001, 00000002, 00000003, 000000004
sondern im binären system 000000001, 000000010, 000000011, 000000100, 000000101, 000000111, 000001000, 000001001
naja um genau zu sein sind es 32 bit das heißt der speicher hat mehr stellen jeder block hat 8 bit: 00000000 00000000 00000000 00000001

im jahr 2038 wird es irgendwann so aussehen 01111111 11111111 11111111 11111111, wenn dann eine weitere sekunde vergeht passiert das 11111111 11111111 11111111 11111111 und wird nicht mehr weiterlaufen oder die zeit wird wieder auf 000000001 gesetzt
unzählige programme werden nicht weiterzählen können es gibt dann sozusagen kein jahr 2039 es wird ein dominoeffekt geben und einen riesenschaden verursachen

die zeit wird wenns soweit ist auf einen freitag den 13 gesetzt
das passt sehr gut
 
@ adrian

hab dein eröffnungspost nicht gründlich gelesen. aber 64 bit scheint ja die lösung zu sein. jetzt ne frage, glaubst du ernsthaft es stehen noch irgendwelche computer mit 32 bit im jahre 2038 rum ??

so wie sich die IT-Technik entwickelt wird es da vermutlich 128 bit geben oder mehr...
 
Zurück
Oben