Délais, alarmes et timers sous Unix
© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 04/08/2000 -
Dernière mise à jour : 24/09/2001

Sommaire
Les délais sous Unix
Les délais des timers sous Unix
Les timers sous Unix
Sommaire
Les délais sous Unix
Pour stocker un délai, la bibliothèque des fonctions système Unix (écrite en C) offre dans le fichier <sys/time.h> la déclaration suivante :
struct timeval
{
long tv_sec; /* en secondes
*/
long tv_usec; /* en micro-secondes */
}; |
Cette structure est particulièrement incommode à utiliser pour de nombreuses raisons parmi lesquelles :
-
deux délais peuvent avoir la même valeur et être stockées différemment (si le champ tv_usec d'un des deux délais dépasse 1 000 000 : stockage non normalisé),
-
l'arithmétique des délais (ajouter ou retrancher une valeur à un délai, comparer deux délais, etc...) n'existe pas et est donc laissée sous la responsabilité de l'utilisateur, ce qui représente une source potentielle d'erreurs,
Sommaire
Les délais des timers sous Unix
Unix met à la disposition de l'utilisateur différents timers,
sabliers logiques cycliques
qui, par émission de signaux, informent les processus de l'écoulement de délais fixés à l'avance. Un timer est chargé avec deux indications de temps (figure 1):
le délai initial Delta1, avant le premier signal, it_value,
le délai Delta2 entre deux signaux consécutifs, it_interval.
figure 1
Pour stocker ces informations, la bibliothèque des fonctions système Unix (écrite en C) offre dans le fichier <sys/time.h> la déclaration suivante :
struct itimerval
{
struct timeval it_interval; /* intervalle
entre deux signaux */
struct timeval it_value;
/* delai initial
*/
}; |
le champ it_value correspond au délai initial Delta1.
le champ it_interval correspond au délai Delta2.
Sommaire
Les timers sous Unix
Le signal délivré par le timer dépend de la nature du temps mesuré. Trois possibilités sont offertes :
-
temps réel, décrémenté en fonction de "tics" d'horloge,
-
temps virtuel, décrémenté seulement quand le processus est actif en mode utilisateur (user),
-
temps virtuel total, (en mode utilisateur et en mode noyau : kernel). Dans ce cas, tous les appels système sont comptabilisés. Ce dernier est surtout utilisé pour faire des statistiques sur l'utilisation de la machine.
Les signaux délivrés correspondant à ces trois temps sont SIGALRM, SIGVTALRM et SIGPROF. Le signal SIGPROF pouvant, par définition, intervenir pendant un appel système, il faut prévoir de pouvoir relancer cet appel.
Un timer est dit "armé" lorsque Delta1 > 0. A expiration de Delta1, le signal approprié est lancé et la valeur de Delta2 est chargée dans Delta1.
Les fonctions système permettant de manipuler les timers sont :
getitimer() et
setitimer().
Sommaire

© D. Mathieu
mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique