![]() |
Eine Initiative des |
|
|
Das Jahr-2000-Problem und der Amiga
Quelle Originalartikel:
http://www.amiga.com/092098-y2k.html
Um es kurz zu machen: Der Amiga im Allgemeinen leidet nicht unter dem Jahr-2000-Problem wie es die PC-Welt betrifft. Der Amiga sieht sich jedoch 3 deutlichen Datumsproblemen und einem einzelnen, speziellen Jahr-2000-Problem in begrenztem Umfang gegenüber, auf das weiter unten eingegangen werden wird.
1. Umfang dieses Dokuments
Der folgende Text bezieht sich auf die Amiga Desktopcomputer, wie sie zwischen 1986 und 1997 gebaut wurden, und deckt nur Hardwarekonfigurationen ab, die von Commodore-Amiga Inc. entwickelt und hergestellt wurden. Das nimmt insbesondere Produkte von Drittherstellern wie z.B. das Microbotics "StarBoard", das unter anderem eine batteriegepufferte Echtzeituhr hatte, aus, schließt aber die Amiga-Computer, die von Amiga Technologies GmbH und Amiga Inc. gebaut wurden, ein.
2. Wie der Amiga Datum und Uhrzeit behandelt
Das Amiga-Betriebssystem folgte schon immer dem Unix-Modell, bei dem zur Messung
der Zeit die Anzahl der seit einem bestimmten Fixpunkt vergangenen Sekunden
herangezogen wird. Unter AmigaOS ist dieser Fixpunkt der Uhrzeit (auch als
"Epoche" bekannt) der 1. Januar 1978, 00:00:00 Uhr (Unix verwendet den 1. Januar
1970, 00:00:00 Uhr). Das Betriebssystem behandelt die Uhrzeit und das Datum
mittels einer zentralen Komponente, die timer.device genannt wird.
Dies Komponente liest und speichtert Datum und Uhrzeit in einer Datenstruktur,
die timeval heißt und die in C-Code folgendermaßen aussieht:
struct timeval
{
ULONG tv_secs;
ULONG tv_micro;
};
In diesem Zusammenhang bezeiht sich ULONG auf eine
vorzeichenlose 32-Bit-Zahl. Die Variable tv_secs enthält die Anzahl
der Sekunden, die seit der AmigaOS-Epoche vergangen sind und
tv_micro bezeichnet die Anzahl der Mikrosekunden (den
10-9ten Teil einer Sekunde) die vergangen sind, seit die letzte
Sekunde vorbei ist.
Bis das AmigaOS 2.0 im Jahr 1989/90 eingeführt wurde, lieferte das Betriebssystem lediglich die Methoden zum Zeitmessen, bot jedoch keinerlei Möglichkeiten an, die Anzahl der Sekunden, die seit der AmigaOS-Epoche vergangen waren, in ein von Menschen lesbares Format zu wandeln. Das überließ man den Anwendungssoftwareentwicklern, die verschiedenste Umwandlungsalgorithmen mit unterschiedlichem Erfolg implementierten.
2.1 Die Zeitbehandlung von AmigaOS ist etwas anders
"AmigaDOS" und "AmigaOS" sind nicht einfach zwei Namen für
dasselbe. Genau das Gegenteil ist der Fall: AmigaDOS ist (in einer Nußschale)
der Name der AmigaOS-Schicht, die Filesysteme und ihr Verhalten einbindet, das
CLI bildet und das Ausführen und Umlegen von ausführbaren Programmen behandelt.
AmigaDOS ist mehr oder weniger eine Umsetzung des TRIPOS 32-Bit-Kernels der
Universität von Cambridge. Es besitzt seine eigene, sehr eigentümliche
Datenstruktur einschließlich einer eigenen Version der timeval
Struktur, die oben beschrieben wurde. Die AmigaDOS-Version heißt
DateStamp und sieht folgendermaßen aus:
struct DateStamp
{
LONG ds_Days;
LONG ds_Minute;
LONG ds_Tick;
};
In diesem Zusammenhang bezieht sich LONG auf eine
vorzeichenbehaftete 32-Bit-Zahl. Die Variable ds_Days enthält die
Anzahl der Tage (jeder Tag hat genau 24 Stunden), die seit der AmigaOS-Epoche
vergangen sind. Die ds_Minute Variable bezeichnet die Anzahl der
Minuten die seit Mitternacht (00:00:00 Uhr) des bezeichneten Tages vergangen
sind und ds_Tick enthält die Anzahl der "ticks" die seit
der letzten Minute vergangen sind. Eine Minute besteht aus 3000
"ticks", d.h. eine Sekunde hat 50 "ticks".
AmigaDOS verwendet DateStampS um das Erstellungsdatum von Dateien
und Laufwerken zu beschreiben und alle Shellkommandos folgen demselben Modell,
d.h. wenn die Systemzeit mit dem Shellkommando Date gesetzt wird,
wird das System Datum und Uhrzeit im DateStamp-Format berechnen.
2.2 Ortszeit im Gegensatz zu GMT
Das Amiga-Betriebssystem kannte nie das Konzept von Orts- und Weltzeit. Während das Update auf AmigaOS 2.1 (1992) einen Einsteller für den Ort einführte, der es erlaubte, die Zeitzone zu wählen, machte das Betriebsystem selbst nie Gebrauch von dieser Eigenschaft oder ermutigte Anwendungssoftwareentwickler gar dazu, sie zu benutzen. Man könnte nun argumentieren, daß das AmigaOS vor diesem Hintergrund immer auf Ortszeit getrimmt war.
2.3 Wie der Amiga seine Systemzeit aufrechterhält
Die frühen Modelle der Amiga-Computer unterstützten keine batteriegepufferte Echtzeituhr, die selbst nach dem Ausschalten des Geräts weiterticken und die Ortszeit aufrechterhalten würde. Zum Beispiel bot der allererste Amiga (der später Amiga 1000 getauft wurde) keine batteriegepufferte Uhr. Beim Amiga 500 war die batteriegepufferte Uhr eine Zusatzhardware, die man extra zusammen mit einer Speichererweiterung kaufen mußte. Der Amiga 2000 und (mit Ausnahme des Amiga 600 und des Amiga 500+) alle folgenden Modelle hatten eine eingebaute batteriegepufferte Uhr.
Auf Maschinen ohne batteriegepufferter Uhr setzt der Amiga seine Systemzeit nach dem Änderungsdatum des Bootlaufwerkes. Anders ausgedrückt heißt das, daß der Zeitpunkt, zu dem die letzte Datei auf einem Datenträger geändert oder erzeugt wurde, die Systemzeit bestimmt. Weil das in keiner Weise genau war, wurde seitens des AmigaOS beim Booten vorgeschlagen und dazu aufgefordert, das Systemdatum einzustellen, sobald das System hochgefahren war.
Auf Geräten, die eine batteriegepufferte Uhr besaßen, wurde die Systemzeit
während des Bootvorgangs gelesen. Bei den Versionen 1.2 und 1.3 des AmigaOS war
ein spezielles Programm names SetClock für das Lesen und Setzen der
Systemzeit entsprechend der momentanen Einstellung der Uhr verantwortlich. Mit
AmigaOS 2.0 wurde diese Funktion in das Betriebssystem-ROM integriert, was den
SetClock Befehl zumindest teilweise überflüssig machte.
Falls das System beim Hochfahren die Systemzeit nicht einstellen kann, wird die Voreinstellung 1. Januar 1978, 00:00:00 Uhr angenommen.
3. Einstellen und Einlesen der Uhrzeit
Der Amiga bietet einen Befehlszeileninterpreter und eine grafische Benutzerschnittstelle. Beide erfuhren über die Jahre zahlreiche Veränderungen, wie unten beschrieben.
3.1 Der Befehlszeileninterpreter
Es gibt zwei Shell-Kommandos, die die Systemzeit beeinflussen:
SetClock und Date. Das Date Kommando
dient dem Einlesen und Setzen der momentanen Systemzeit wohingegen der
SetClock Befehl für die batteriegepufferte Uhr zuständig ist; er
liest und speichert die aktuelle Systemzeit von bzw. in ihr. Der Befehl
Date ist wegen des von Menschen lesbaren Datenformats, das er
verwendet, von besonderem Interesse. Wenn sie heute den Befehl Date
ausführten, erhielten sie vielleicht folgende Ausgabe:
19-Sep-98
Wie sie sehen ist die Jahreszahl auf zwei Stellen beschränkt. Selbst wenn man eine andere Lokalisation (z.B. Französisch) verwendet, wird die Jahreszahl immer nur mit den letzten zwei Dezimalstellen angezeigt werden. Glücklicherweise ist diese Zählweise mit der folgenden Regel vereinbar:
Um die Systemzeit auf ein beliebiges Jahr nach 1999 einzustellen, dreht man die Regel einfach um, d.h. die Eingabe von date 01-jan-01 wird das Datum auf den 1. Januar 2001 setzen.
Alle Versionen des Date Befehls (Version 1.1 bis 37.1) zeigen und
interpretieren das Datenformat auf dieselbe Weise. Sie verhalten sich gleich und
vorhersehbar über alle Amiga-Betriebssystemrevisionen hinweg.
3.2 Die grafische Benutzerschnittstelle
Die Systemzeit wird mittels des Voreinstellers gesetzt, der in den AmigaOS-Versionen 1.0 bis 1.3 ein einzelnes gigantisches Programm war:
Die Knöpfe zum Einstellen der System befinden sich in der oberen linken Ecke des
Fensters. Sie erlauben es, die letzten zwei Stellen der Jahreszahl einzustellen;
das Modell folgt dem AmigaDOS Befehl Date, bei dem eine Jahreszahl
kleiner als 78 ein Jahr zwischen 2000 und 2077 bezeichnet und sich alle anderen
Einstellungen auf eine Jahreszahl zwischen 1978 und 1999 beziehen.
Mit der Einführung von AmigaOS 2.0 wurde der Zeitvoreinsteller zu einem
einzelnen Programm namens Time gemacht:
In diesem Einsteller kann das Jahr als eine vierstellige Zahl eingegeben werden. Der Bereich ist jedoch auf die Jahre 1978 bis 2113 beschränkt.
Mit der Veröffentlichung des Updates auf AmigaOS 2.1 wurder der Vorereinsteller geändert, wie man unten sehen kann:
Genau wie bei seinem Vorgänger kann das Jahr als eine vierstellige Zahl eingegeben werden. In diesem Fall ist der Bereich auf die Jahre 1991 bis 2099 beschränkt.
4. Die Probleme
Soweit man heute weiß, kennt der Amiga 4 Datumsprobleme. Zwei davon sind konstruktionsbedingt durch Zahhlenüberlauf, eines wird durch Hardwarebeschränkungen hervorgerufen und eines ist ein echter Bug, der im Jahre 2000 zuschlagen wird.
4.1 Negative Zeit
Wie oben ausgeführt mißt der Amiga Zeit in Sekunden. Wie sich herausstellt,
wird die Zahl der Sekunden, die bis zum 19. Januar 2046 um 03:14:07 Uhr vergehen,
den größten Wert bilden, den eine vorzeichenbehaftete Integerzahl aufnehmen kann.
Das ist kein Problem für das die Zeit behandelnde Modul
(timer.device), aber Anwendungssoftware und andere
Betriebssystemkomponenten die die Zahl an Sekunden als einen
vorzeichenbehafteten Wert betrachten, werden eine Sekunde später in Bedrängnis
geraten: Die Anzahl der Sekunden wird auf 2.147.483.648 steigen, was im
Zweierkomplement die negative Zahl -2.147.483.648 repräsentiert. AmigaDOS, das
Zeit immer als eine vorzeichenbehaftete Zahl behandelt, wird dieses Datum für
ungültig halten, weil es negativ ist. Schlimmer noch, die
ROM-Datumsumwandlungsroutinen offenbaren einen Fehler, der alle dem 19. Januar
2046, 03:14:07 Uhr folgenden Datumsoperationen falsch werden läßt.
Dieses Verhalten ist gleich über alle Versionen des AmigaOS hinweg. Eine
Korrekturmöglichkeit ist noch nicht erhältlich, aber es wird daran gearbeitet,
herauszufinden, ob der Fehler durch ein Update mehrerer AmigaDOS-Module
(locale.library, dos.library) behoben werden kann.
Schließlich ist dieser Bug "nur" ein Nebeneffekt der Behandlung einer
vorzeichenlosen Zahl als eine vorzeichenbehaftete.
4.2 Wenn die Zeit zurückspringt
Eine vorzeichenlose 32-bit Intergerzahl kann höchstens einen Wert von 4.294.967.295 annehmen. Wenn der Amiga soviele Sekunden aufaddiert hat, wird der 7. Februar 2114 um 06:28:15 Uhr sein. Eine Sekunde später wird der Zähler zurückspringen und wieder bei Null anfangen. In anderen Worten heißt das, daß der Amga am 7. Februar 2114 um 06:26:16 Uhr glauben wird, es sei Mitternacht am 1. Januar 1978.
Für dieses Problem gibt es noch keine Lösung.
4.3 Die batteriegepufferte Uhr kann nur bis 99 zählen
Amiga-Computer, die eine batteriegepufferte Echtzeituhr haben, verwenden eines von zwei verschiedenen Hardwaredesigns: entweder den Oki MSM6242RS (im A500 und A2000) oder den Ricoh RP5C01 (im A3000, A1200 und A4000) Uhrenchip. Wie für Uhrenchips dieses Typs üblich, ist der Jahreszähler als ein zweistelliger BCD-Zähler implementiert. Hat er einmal das Jahr 99 erreicht, springt der Zähler zurück und wird wieder bei 00 anfangen.
Seit der Amiga Betriebssystemversion 2.0 liest der Bootvorgang die Zeit der
batteriegepufferten Uhr und setzt die Systemzeit entsprechend. Das passiert
jedesmal, wenn der Amiga zurückgesetzt wird. Weil die Jahreszahl nur 2 Stellen
abdeckt wird derselbe Algorithmus wie beim AmigaDOS-Befehl Date
verwendet. Die Folge ist, daß das Amiga-Systemdatum, das beim Systemstart
gesetzt wird, immer zwischen 1978 und 2077 liegen wird. Weil aber die Systemuhr
über den 31. Dezember 2077 hinaus weiterläuft, wird ein Reset des Systems die
Uhrzeit auf den 1. Januar 1978 zurücksetzen.
Für dieses Problem gibt es noch keine Lösung.
4.4 SetClock hört 2000 auf zu arbeiten
Das Programm SetClock, das mit den Amiga Workbench-Disketten der
Revisionen 1.2 und 1.3 ausgeliefert wurde, enthält einen Fehler, der es die
Uhrzeit der batteriegepufferten Uhr ab dem Jahr 2000 falsch berechnen läßt. Er
funktioniert nur für die Jahre 1978 bis 1999. Wenn der Zähler zur 00
zurückspringt, wird SetClock bis zum Jahr 2079 glauben, es sei
1978; dann wird es glauben, es sei 1979 -- was auch nicht unbedingt ein
Fortschritt ist.
Bitte bedenken Sie, daß nur der SetClock-Befehl
auf den Workbenchdisketten der Versionen 1.2 und 1.3 an diesem Problem leidet.
Mehrere Versionen dieses Programms wurden veröffentlicht, wovon jedes zwischen
4000 und 7000 Bytes groß ist. Um unterscheiden zu können, ob Sie eine Version
haben, die funktioniert oder nicht, überprüfen Sie bitte die Größe des Files;
wenn es kleiner als 1000 Bytes ist, haben sie wahrscheinlich die richtig
funktionierende Version. Ist es größer als 4000 Bytes, haben Sie wahrscheinlich
die fehlerhafte Version.
Eine Lösung für dieses Problem ist in diesem Archiv
enthalten. Laden Sie es und entpacken Sie es.
Lesen Sie auch das beigefügte SetClock_ReadMe.
Geschrieben von Olaf Barthel © Copyright 1998 Amiga, Inc.
Übersetzer dieses Artikels: Rüdiger Engel 23.09.1998