Sur mon système, la disponibilité de /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
De la page de manuel proc :
/proc/uptime
This file contains two numbers: the uptime of the system
(seconds), and the amount of time spent in idle process
(seconds).
Le système de fichiers proc contient un ensemble de pseudo-fichiers. Ce ne sont pas de vrais fichiers, ils ressemblent à des fichiers, mais ils contiennent des valeurs fournies directement par le noyau. Chaque fois que vous lisez un fichier, tel que /proc/uptime
, son contenu est régénéré à la volée. Le système de fichiers proc est une interface avec le noyau.
Dans le code source du fichier du noyau linux fs/proc/uptime.c
à la ligne 49 , vous voyez un appel de fonction:
proc_create("uptime", 0, NULL, &uptime_proc_fops);
Cela crée une entrée de système de fichiers proc appelée uptime
(le fichier procfs est généralement monté sous /proc
) et y associe une fonction qui définit les opérations de fichier valides sur ce pseudo-fichier et les fonctions qui leur sont associées. En cas de disponibilité, c'est juste read()
et open()
opérationnel. Cependant, si vous suivez les fonctions, vous vous retrouverez ici , où le temps de disponibilité est calculé.
En interne, il y a une interruption-timer qui met à jour périodiquement le temps de disponibilité du système (en plus des autres valeurs). L'intervalle, dans lequel les ticks d'interruption de minuterie, est défini par la macro préprocesseur HZ
, dont la valeur exacte est définie dans le fichier de configuration du noyau et appliquée au moment de la compilation.
Le temps d'inactivité et le nombre de cycles de la CPU, associés à la fréquence HZ
(cycles par seconde), peuvent être calculés en nombre (en secondes) depuis le dernier démarrage.
Pour répondre à votre question: à partir de quel moment le temps de disponibilité commence-t-il à compter?
Étant donné que la disponibilité est une valeur interne du noyau, qui se répète à chaque cycle, elle commence à compter dès que le noyau est initialisé. C'est-à-dire quand le premier cycle est terminé. Même avant que quoi que ce soit ne soit monté, juste après le chargeur de démarrage donne le contrôle à l'image du noyau.