Auf meinem System erhält es die Betriebszeit von /proc/uptime
:
$ strace -eopen uptime
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/libproc-3.2.8.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/proc/version", O_RDONLY) = 3
open("/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 3
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
open("/proc/uptime", O_RDONLY) = 3
open("/var/run/utmp", O_RDONLY|O_CLOEXEC) = 4
open("/proc/loadavg", O_RDONLY) = 4
10:52:38 up 3 days, 23:38, 4 users, load average: 0.00, 0.02, 0.05
Aus der Proc-Manpage :
/proc/uptime
This file contains two numbers: the uptime of the system
(seconds), and the amount of time spent in idle process
(seconds).
Das proc-Dateisystem enthält eine Reihe von Pseudodateien. Dies sind keine echten Dateien, sie sehen nur aus wie Dateien, enthalten jedoch Werte, die direkt vom Kernel bereitgestellt werden. Jedes Mal, wenn Sie eine Datei lesen, wie z. B. /proc/uptime
, wird der Inhalt sofort neu generiert. Das proc-Dateisystem ist eine Schnittstelle zum Kernel.
Im Linux-Kernel-Quellcode der Datei fs/proc/uptime.c
in Zeile 49 sehen Sie einen Funktionsaufruf:
proc_create("uptime", 0, NULL, &uptime_proc_fops);
Dadurch wird ein Proc-Dateisystemeintrag mit dem Namen uptime
(der Procfs wird normalerweise unter gemountet /proc
) erstellt und ihm eine Funktion zugeordnet, die gültige Dateioperationen für diese Pseudodatei und die ihnen zugeordneten Funktionen definiert. Im Falle einer Betriebszeit ist es gerecht read()
und open()
betriebsbereit. Wenn Sie jedoch die Funktionen zurückverfolgen, gelangen Sie hierher , wo die Betriebszeit berechnet wird.
Intern gibt es einen Timer-Interrupt, der die Systemverfügbarkeit (neben anderen Werten) regelmäßig aktualisiert. Das Intervall, in dem der Timer-Interrupt tickt, wird vom Präprozessor-Makro festgelegt HZ
, dessen genauer Wert in der Kernel- Konfigurationsdatei definiert und zur Kompilierungszeit angewendet wird.
Die Leerlaufzeit und die Anzahl der CPU-Zyklen in Kombination mit der Frequenz HZ
(Zyklen pro Sekunde) können in einer Anzahl (in Sekunden) seit dem letzten Start berechnet werden.
Um Ihre Frage zu beantworten: Wann beginnt die Betriebszeit zu zählen?
Da es sich bei der Betriebszeit um einen kerninternen Wert handelt, der bei jedem Zyklus anhakt, beginnt er zu zählen, wenn der Kernel initialisiert wurde. Das heißt, wenn der erste Zyklus beendet ist. Noch bevor etwas gemountet wird, gibt der Bootloader direkt die Kontrolle über das Kernel-Image.