GNU/Linux >> Znalost Linux >  >> Linux

Od kdy se v Linuxu začíná počítat doba provozuschopnosti?

V mém systému získává dostupnost od /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

Z manuálové stránky proc:

   /proc/uptime
          This file contains two numbers: the uptime of the system
          (seconds), and the amount of time spent in idle process
          (seconds).

Souborový systém proc obsahuje sadu pseudo souborů. Nejsou to skutečné soubory, jen vypadají jako soubory, ale obsahují hodnoty, které poskytuje přímo jádro. Při každém čtení souboru, například /proc/uptime , jeho obsah se regeneruje za pochodu. Souborový systém proc je rozhraním k jádru.

Ve zdrojovém kódu linuxového jádra souboru fs/proc/uptime.c na řádku 49 vidíte volání funkce:

proc_create("uptime", 0, NULL, &uptime_proc_fops);

Tím se vytvoří záznam systému souborů proc s názvem uptime (procfs je obvykle připojen pod /proc ) a přidruží k němu funkci, která definuje platné operace se soubory s tímto pseudosouborem a funkcemi s nimi spojenými. V případě provozuschopnosti je to jen read() a open() operace. Pokud však zpětně vysledujete funkce, skončíte zde, kde se počítá doba provozu.

Interně existuje časovač-přerušení, které periodicky aktualizuje dobu provozu systému (kromě jiných hodnot). Interval, ve kterém tiká přerušení časovače, je definován makrem preprocesoru HZ , jehož přesná hodnota je definována v konfiguračním souboru jádra a použita při kompilaci.

Doba nečinnosti a počet cyklů CPU v kombinaci s frekvencí HZ (cyklů za sekundu) lze vypočítat v počtu (sekundách) od posledního spuštění.

Odpověď na vaši otázku:Od kdy se doba provozuschopnosti začíná počítat?

Vzhledem k tomu, že doba provozuschopnosti je interní hodnotou jádra, která se zvyšuje v každém cyklu, začne se počítat, když se jádro inicializuje. Tedy až skončí první cyklus. Ještě předtím, než je cokoli připojeno, přímo poté, co zavaděč předá kontrolu obrazu jádra.


Pokud vím, uptime používá /proc/uptime pro výpočet doby provozu systému. Jasněji to můžete vidět ve zdrojovém kódu uptime.c

  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);
    }

Na standardním systému UNIX (na základě původních zdrojů *), uptime čte /var/adm/utmpx a zkontroluje poslední čas restartu.

Jinými slovy:toto je načtení data, které také získáte pomocí who -b a poté vypočítá čas od té doby.

*) uptime je odkaz na w program a byl představen BSD kolem roku 1980.


Linux
  1. Linux – Jak spustit oddíl Windows z příkazového řádku Grub?

  2. Linux – Záchrana dat z náhodného formátu na oddílu Ext4?

  3. Je možné při vývoji simulovat žádný externí přístup z počítače se systémem Linux?

  1. Jak se PulseAudio spouští?

  2. Nainstalujte Linux z Linuxu

  3. Jak Linux rozlišuje vlákna od podřízených procesů?

  1. Jak urychlit proces kompilace při instalaci balíčků z AUR

  2. Jsou nástroje Linuxu chytré při spouštění příkazů Piped?

  3. Linux – Jak zjistím, kdy byl proces spuštěn?