Diese Uhren-Chips stellen die Zeit als Jahr, Monat, Tag, Stunde, Minute und Sekunde dar und werden auch als Real-Time-Clock (RTC) bezeichnet.
Sie erhalten eine von einem Quarz erzeugte Taktfrequenz, die sie durch Teilerstufen schicken, um den Sekundentakt zu generieren, mit dem die Uhr die Sekunden zählt. Beim MC146818 z.B. beträgt die externe Taktfrequenz 4.194304 MHz, die in einer Teilerstufe mit dem Teiler 4 und dann in 4 weiteren Teilerstufen durch jeweils 32 geteilt wird (4 * 324 = 4194304). Der DS12887 hat den Quarz schon im Chip eingebaut.
Diese Hardware-Uhr besitzt aber einige Eigenschaften, die sie als Systemzeit für den Rechner unbrauchbar werden lassen:
Oft wird die Hardware-Uhr auf die "lokale Zeit" gestellt, was aber nicht unbedingt die beste Lösung darstellt:
Auch das automatische Umstellen der Hardware-Uhr durch das Betriebssystem funktioniert nicht einwandfrei, zumindest nicht, wenn man mehrere Betriebssysteme parallel auf seinem Rechner hat (z.B. Linux, FreeBSD und GNU Hurd. Oder gibt's noch andere, die in Frage kommen? :-)
Dabei würde man nämlich so vorgehen, daß sich das Betriebssystem in einer Konfigurationsdatei merkt, wie die Hardware-Uhr eingestellt ist. Wenn es beim Booten feststellt, daß die augenblickliche Zeit laut der lokalen Regeln Sommerzeit sein muß und die Konfigurationsdatei sagt, daß die Hardware-Uhr noch auf Winterzeit steht, wird sie umgestellt und dies in der Konfigurationsdatei vermerkt. Dieses Verfahren geht aber daneben, wenn jedes Betriebssytem beim ersten Booten nach dem Wechsel auf Sommerzeit die Hardware-Uhr um eine Stunde vorstellt.
Das einzig Wahre ist also, die Hardware-Uhr auf eine Zeitzone ohne solche Wechsel zu stellen, also auf die weltweit einheitliche Zeit, die z.B. auch in der internationalen Fliegerei und Schiffahrt benutzt wird: UTC.
Damit kommen zwar die Betriebssysteme von M$ nicht gut klar, but, hey, who needs M$ Windows anyway? Schließlich hat Billy es uns selbst gesagt:
"Nobody will ever need more than 640k RAM!" (Bill Gates)
"Windows 95 needs at least 8 MB RAM." (Bill Gates)
Logische Schlußfolgerung: Niemand braucht M$ Windows.
Weitere Fähigkeiten, die die Hardware-Uhr bietet, sind z.B. Einstellen von Alarmzeiten, zu denen ein Interrupt ausgelöst wird, oder das periodische Generieren von Interrupts mit Frequenzen von 2 Hz bis 8192 Hz.
Unter Linux kann man mit einem device driver auch auf die
Hardware-Uhr zugreifen, und zwar auf /dev/rtc
und mit den
in rtc
(4) beschriebenen ioctl
(2)s, sobald
die man page existiert :-) Bis dahin guckt man einfach in
/usr/src/linux/include/linux/mc146818rtc.h
oder
/usr/src/linux/Documentation/rtc.txt
nach.
Außerdem gibt ein tool aus dem util-linux-2.9-Paket, das
diesen device driver nutzt, um die Hardware-Uhr auszulesen und zu
setzen. Dieses Programm heißt hwclock
und ist in
der entsprechenden man page beschrieben. hwclock
ersetzt
das ältere Programm clock
aus util-linux, das die
gleiche Funktionalität hatte.