time(7) Miscellaneous Information Manual time(7)
NOM
time - Survol des fonctions liees au temps et aux temporisateurs
DESCRIPTION
Temps reel et temps processus
Le temps reel est defini comme le temps mesure a partir d'un point
fixe, soit un point standard dans le passe (voir la definition de
l'epoque et du temps calendaire ci-dessous), soit un point (p.ex. le
demarrage) dans la vie d'un processus (temps ecoule).
Le temps processus est defini comme le temps CPU utilise par un
processus. Il est parfois divise entre une partie utilisateur et une
partie systeme. Le temps CPU utilisateur est le temps passe a executer
du code en mode utilisateur. Le temps CPU systeme est le temps passe
par le noyau en mode systeme pour le processus (p.ex. pendant des
appels systeme). La commande time(1) peut etre utilisee pour determiner
le temps CPU utilise pendant l'execution du programme. Un programme
peut determiner le temps CPU qu'il a utilise avec les fonctions
times(2), getrusage(2) et clock(3).
L'horloge materielle
La plupart des ordinateurs ont une horloge materielle (alimentee par
une pile) que le noyau lit au demarrage du systeme pour initialiser
l'horloge logicielle. Pour plus de details, consultez rtc(4) et
hwclock(8).
L'horloge logicielle, HZ, et les Jiffies
La precision de divers appels systeme qui definissent des delais (par
exemple select(2), sigtimedwait(2)) ou qui mesurent le temps processeur
(par exemple getrusage(2)) est limitee par la resolution de l'horloge
logicielle, une horloge entretenue par le noyau qui mesure le temps en
jiffies (NDT : jiffy - tres courte duree). La duree d'un jiffy est
determinee par la valeur de la constante du noyau HZ.
La valeur de HZ varie d'une version du noyau et d'une architecture a
l'autre. Sur i386, la situation est la suivante : pour les noyaux
jusqu'a Linux 2.4.x inclus, HZ vaut 100, ce qui donne une valeur de
jiffy de 10 millisecondes ; a partir de Linux 2.6.0, HZ a ete augmente
a 1000, ainsi un jiffy etait equivalent a 1 milliseconde. Depuis
Linux 2.6.13, la valeur de HZ est un parametre de configuration du
noyau, et peut valoir 100, 250 (la valeur par defaut) ou 1000, donnant
des valeurs de 10, 4 et 1 millisecondes, respectivement, pour un jiffy.
Depuis Linux 2.6.20, il est aussi possible d'utiliser 300 ; cette
valeur est un multiple exact de la frequence des formats videos les
plus courants (PAL, 25 Hz ; NTSC, 30 Hz).
L'appel systeme times(2) est un cas particulier. Il renvoie le temps
avec une granularite definie par la constante du noyau USER_HZ. Les
applications utilisateur peuvent obtenir la valeur de cette constante
avec sysconf(_SC_CLK_TCK).
Horloges du systeme et des processus ; espaces de noms de temps
Le noyau gere une serie d'horloges qui mesurent differentes sortes de
temps ecoules et virtuels (c'est-a-dire, consommes par le CPU). Ces
horloges sont decrites dans clock_gettime(2). Quelques unes de ces
horloges sont reglables en utilisant clock_settime(2). Les valeurs de
certaines horloges sont virtualisees par les espaces de noms temps.
Consulter time_namespaces(7).
Temporisations haute resolution
Avant Linux 2.6.21, la precision des appels systeme de temporisateur et
de mise en sommeil (voir plus loin) etait limitee par la taille d'un
jiffy.
Depuis Linux 2.6.21, Linux gere les temporisateurs haute resolution
(HRT : high-resolution timers) de maniere optionnelle en configurant
CONFIG_HIGH_RES_TIMERS. Sur les systemes gerant les temporisateurs
haute resolution, la precision des mises en sommeil et des appels
systeme des temporisateurs n'est plus limitee par le jiffy et peut etre
aussi fine que le systeme le permet (une precision d'une microseconde
est typique sur les materiels actuels). Vous pouvez savoir si les
temporisateurs haute resolution sont geres en verifiant la precision
renvoyee par un appel a clock_getres(2) ou en regardant les entrees
<< resolution >> du fichier /proc/timer_list.
Les temporisateurs haute resolution ne sont pas geres par toutes les
architectures materielles. Cette gestion est disponible sur x86, ARM et
PowerPC, entre autres.
L'Epoque (Epoch)
Les systemes UNIX representent le temps depuis l'Epoque, qui est le
1er janvier 1970 a 00:00:00 (UTC).
Un programme peut determiner le temps calendaire avec l'horloge
CLOCK_REALTIME de clock_gettime(2), qui renvoie le temps (en secondes
et nanosecondes) ecoule depuis l'Epoque ; time(2) fournit une
information similaire, mais avec une precision a la seconde la plus
proche. Le temps systeme peut etre modifie avec clock_settime(2).
Temps decompose
Certaines fonctions de bibliotheque utilisent une structure de type tm
pour representer le temps decompose, qui stocke le temps decompose en
composantes distinctes (annee, mois, jour, heure, minute,
seconde, etc.). Cette structure est decrite dans tm(3type), qui decrit
egalement les fonctions qui font la conversion entre temps calendaire
et temps decompose. Les fonctions permettant les conversions entre
temps decompose et representation sous forme de chaine de caracteres
sont decrites dans ctime(3), strftime(3) et strptime(3).
Dormir et placer des temporisateurs
Divers appels systeme et fonctions permettent a un programme de
s'endormir (suspendre son execution) pour une duree specifiee.
Consultez nanosleep(2), clock_nanosleep(2) et sleep(3).
Divers appels systeme permettent a un processus de placer un
temporisateur qui expirera a un point donne dans le futur, et
eventuellement a des intervalles repetes. Consultez alarm(2),
getitimer(2), timerfd_create(2) et timer_create(2).
Marge de temporisateur
Depuis Linux 2.6.28, la valeur de cette << marge de temporisateur >>
(timer slack) peut etre controlee pour un thread. Cette marge de
temporisation est l'intervalle de temps pendant lequel le noyau
pourrait differer le reveil de certains appels qui bloquent avec un
delai d'expiration. L'activation de ce delai permet au noyau de
fusionner les evenements de reveil, reduisant donc ainsieventuellement
le nombre de reveils systeme et la consommation d'energie. Veuillez
consulter la description de PR_SET_TIMERSLACK dans prctl(2) pour
obtenir plus de precisions.
VOIR AUSSI
date(1), time(1), timeout(1), adjtimex(2), alarm(2), clock_gettime(2),
clock_nanosleep(2), getitimer(2), getrlimit(2), getrusage(2),
gettimeofday(2), nanosleep(2), stat(2), time(2), timer_create(2),
timerfd_create(2), times(2), utime(2), adjtime(3), clock(3),
clock_getcpuclockid(3), ctime(3), ntp_adjtime(3), ntp_gettime(3),
pthread_getcpuclockid(3), sleep(3), strftime(3), strptime(3),
timeradd(3), usleep(3), rtc(4), time_namespaces(7), hwclock(8)
TRADUCTION
La traduction francaise de cette page de manuel a ete creee par
Christophe Blaess , Stephan Rafin
, Thierry Vignaud ,
Francois Micaux, Alain Portal , Jean-Philippe
Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas
Huriaux , Nicolas Francois
, Florentin Duneau
, Simon Paillard , Denis Barbier , David Prevot
et Jean-Paul Guillonneau
Cette traduction est une documentation libre ; veuillez vous reporter a
la GNU General Public License version 3
concernant les conditions
de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE.
Si vous decouvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message a .
Pages du manuel de Linux 6.8 2 mai 2024 time(7)