* Thomas Hertweck wrote on Sun, Dec 11, 2005 at 11:27 +0000: [...]
Und der Überlauf passiert in /proc/uptime, sprich, der kernel macht es definitiv falsch? Man glaubt's ja kaum und hofft auf ein Bug in der uptime Zeit-Konvertierung...
Was heisst der Kernel macht es falsch? Variablen haben einen gewissen Wertebereich, und wenn dieser nicht mehr ausreicht, kommt es zu einem Overflow - Du kannst natuerlich entsprechende Massnahmen ergreifen, um das zu erkennen und entsprechend zu handeln, aber nur mit gewissem Overhead. Man haette natuerlich statt eines "unsigned long int" den Counter als "unsigned long long int" definieren koennen, aber das gibt es IIRC erst seit C99...
Linux 2.4 gibt es noch nichtmal so lange, und neben long long gibt es sicherlich noch weitere Möglichkeiten, eine uptime korrekt auszurechnen. Man könnte sich z.B. den Bootzeitstempel speichern, läuft dann ein selbst bei Sekunden since epoch erst bissel später über, aber dann darf man seine Uhr nicht mehr stellen - obwohl der Kernel das natürlich "mitbekommt" (sprich: macht) und es daher korrigieren könnte. Obwohl uptime vermutlich eh nicht mehr funktioniert, wenn man die Zählfrequenz ändert (da war doch was mit "desktop Parameter"?). Man könnte auch den Überlauf schon nach 365 Tagen forcieren und die Überläufe mitzählen. Die nennt man dann "kernel-Jahre" oder so, ist deutlich genauer als ein einfacher Overflow. Falls man überhaupt einen 10ms genaue uptime braucht (bei einem Jahr Laufzeit :))... Na ja, ist ja auch egal :) oki, Steffen -- Dieses Schreiben wurde maschinell erstellt, es trägt daher weder Unterschrift noch Siegel.