GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ab wann wird die Betriebszeit unter Linux gezählt?

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. Das sind keine echten Dateien, sie sehen nur wie Dateien aus, aber sie enthalten Werte, die direkt vom Kernel bereitgestellt werden. Jedes Mal, wenn Sie eine Datei lesen, z. B. /proc/uptime , wird sein Inhalt im laufenden Betrieb regeneriert. 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 namens uptime erstellt (Das procfs wird normalerweise unter /proc gemountet ) und ordnet ihr eine Funktion zu, die gültige Dateioperationen für diese Pseudodatei und die damit verbundenen Funktionen definiert. Im Falle einer Betriebszeit sind es nur read() und open() Operationen. Wenn Sie jedoch die Funktionen zurückverfolgen, landen Sie hier, wo die Betriebszeit berechnet wird.

Intern gibt es einen Timer-Interrupt, der regelmäßig die Betriebszeit des Systems (neben anderen Werten) aktualisiert. Das Intervall, in dem der Timer-Interrupt tickt, wird durch das Präprozessor-Makro HZ definiert , dessen genauer Wert in der Kernel-Konfigurationsdatei definiert ist und zur Kompilierzeit angewendet wird.

Die Leerlaufzeit und die Anzahl der CPU-Zyklen, kombiniert mit der Häufigkeit HZ (Zyklen pro Sekunde) kann in einer Anzahl (Sekunden) seit dem letzten Start berechnet werden.

Um Ihre Frage zu beantworten:Ab wann wird die Betriebszeit gezählt?

Da die Betriebszeit ein Kernel-interner Wert ist, der jeden Zyklus ansteigt, beginnt sie zu zählen, wenn der Kernel initialisiert wurde. Das heißt, wenn der erste Zyklus beendet ist. Noch bevor irgendetwas gemountet wird, direkt nachdem der Bootloader die Kontrolle an das Kernel-Image übergeben hat.


Soweit ich weiß, uptime verwendet /proc/uptime um die Systemverfügbarkeit zu berechnen. Sie können es deutlicher im Quellcode uptime.c

sehen
  FILE *fp;

  fp = fopen ("/proc/uptime", "r");
  if (fp != NULL)
    {
      char buf[BUFSIZ];
      char *b = fgets (buf, BUFSIZ, fp);
      if (b == buf)
        {
          char *end_ptr;
          double upsecs = c_strtod (buf, &end_ptr);
          if (buf != end_ptr)
            uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
                      ? upsecs : -1);
        }

      fclose (fp);
    }

Auf einem Standard-UNIX-System (basierend auf den Originalquellen *), uptime lautet /var/adm/utmpx und sucht nach dem letzten Zeitpunkt des Neustarteintrags.

Mit anderen Worten:Dies ist das Abrufen des Datums, das Sie auch mit who -b erhalten und berechnet dann die Zeit seitdem.

*) uptime ist ein Link zum w Programm und wurde um 1980 von BSD eingeführt.


Linux
  1. Linux – Automatische Ja-Abfrage beim Installieren des Pakets unter Alpine Linux?

  2. Linux – Arch Linux:Pacman funktioniert beim Chrooten nicht?

  3. Linux – Wie führe ich einen Bootloader von Linux aus?

  4. Ist es möglich, bei der Entwicklung keinen externen Zugriff von einer Linux-Maschine zu simulieren?

  5. Linux - Wie sehe ich, wann ein Prozess gestartet wurde?

Uptime-Befehl in Linux

Umstieg von Windows auf Linux

Dokumentieren der Systemverfügbarkeit in Linux

Beispiele für Linux-Verfügbarkeitsbefehle

Installieren Sie Linux von Linux

Wie unterscheidet Linux Threads von untergeordneten Prozessen?