Fonctionnement RTC
Ce qui manque à RaspberryPi, c'est un RTC (Real Time Clock) alimenté par batterie. C'est un appareil qui peut fonctionner indépendamment de l'ordinateur principal et garder une trace du temps qui passe même lorsqu'il est éteint (c'est pourquoi il a sa propre batterie). Il peut fonctionner de manière très simple - il a un oscillateur de fréquence connu connecté et à chaque impulsion de l'oscillateur, il incrémentera son temporisateur / compteur interne. La fréquence étant connue, il est facile de calculer le temps écoulé en fonction du compteur. L'appareil sera également doté d'une batterie afin qu'il puisse continuer à fonctionner même lorsque l'alimentation externe est coupée.
Certains appareils RTC peuvent être plus sophistiqués. Ils peuvent, par exemple, créer une interruption en fréquence programmable ou en mode alarme (réglée à une certaine heure dans le futur ou à une certaine heure chaque jour, etc.). Il n'est pas pertinent pour conserver l'heure système et est facultatif.
Comment RTC est utilisé
Un ordinateur peut demander à RTC quelle heure il est (ou plus précisément - quelle est sa valeur de compteur) au démarrage et définir sa date / heure interne en fonction de cette valeur. À partir de maintenant, cependant, un ordinateur ne demandera pas de temps à RTC toutes les secondes / millisecondes / microsecondes. Au lieu de cela, il exécutera sa propre horloge (appelée heure système), en utilisant généralement ses propres minuteries / compteurs. Tout comme en RTC, le minuteur / compteur est cadencé avec une fréquence connue, il est donc facile de calculer le temps écoulé.
Vous pouvez forcer votre système à synchroniser son horloge avec le périphérique RTC (dans les deux sens), mais cela ne se produira que sur demande. Certains systèmes sont configurés pour stocker l'heure système dans RTC lors de l'arrêt ou après la synchronisation NTP, par exemple.
Absence de RTC
RaspberryPi, comme de nombreux ordinateurs monocarte bon marché, n'a pas de périphérique RTC externe. Cela signifie qu'il ne peut pas demander l'heure actuelle au démarrage. Mais comme déjà mentionné - ce n'est pas un problème si nous pouvons obtenir la date / heure à partir d'une autre source (comme NTP). Le seul inconvénient est que, contrairement à RTC, vous ne pouvez pas demander NTP au démarrage précoce (car vous avez d'abord besoin d'une connexion réseau).
Donc, pour répondre directement à votre question - peu importe si RaspberryPi (ou tout autre ordinateur) a RTC ou non, il gardera une trace du temps en utilisant un temporisateur / compteur interne qui est disponible dans presque tous les systèmes informatiques et est requis pour exécuter presque tous les types du système d'exploitation.
Temps sous Linux
Les applications de l'espace utilisateur sous Linux peuvent déterminer ce que l'on appelle calendar time
(ce qui est une heure dans le monde réel) en utilisant une gettimeofday()
fonction qui appelle ensuite l'appel clock_gettime()
système. Ce qui se passe maintenant est un peu compliqué en raison des nombreuses fonctionnalités avancées du noyau Linux (comme les espaces de noms, etc.). Mais l'essentiel est que le noyau se base sur son temps jiffies
. C'est en fait juste une variable à l'intérieur du noyau (généralement 64 bits de large) qui compte le nombre de ticks depuis le démarrage du système.
Les ticks sont générés par le temporisateur matériel au moyen de interrupts
. jiffies
la valeur est incrémentée à chaque interruption. Le temporisateur matériel est configuré pour produire de telles interruptions à intervalles réguliers. L'intervalle est configuré au démarrage en fonction d'une valeur du HZ
paramètre de configuration du noyau.
À tout moment, le noyau sait combien de ticks ont été générés à partir du démarrage ( jiffies
variable), il sait combien de tels ticks sont générés chaque seconde ( HZ
option config) afin qu'il puisse facilement calculer le temps écoulé depuis le dernier démarrage.
Donc , pour résumer - noyau demande au RTC
sujet calendar time
(aussi appelé wall clock
) au démarrage pour qu'il sache ce qui était le temps réel lorsque le système a commencé. Il ajoute ensuite de la jiffies/HZ
valeur à chaque fois qu'une application de l'espace utilisateur demande à quelle heure elle utilise l' clock_gettime
appel système.
Minuterie / compteur matériel
Le minuteur / compteur matériel est un appareil très simple. Il a un compteur compteur qui compte ses ticks d'horloge. Les tics d'horloge sont généralement créés par des externes oscillator
(un circuit électronique qui produit un signal répétitif) et sont de fréquence connue (allant généralement de quelques kHz à des centaines de MHz). Cela signifie que nous pouvons facilement calculer le temps écoulé en divisant la valeur du compteur par la fréquence de l'oscillateur.
Le minuteur peut être programmé pour faire diverses choses - il peut compter vers le haut et vers le bas, comparer le registre du compteur à une certaine valeur. Par exemple, il peut créer un signal externe et commencer à compter à partir du début lorsque le registre du compteur est à une certaine valeur. De cette façon, vous pouvez configurer le temporisateur pour créer un tel signal externe à intervalle constant qui est une fréquence beaucoup plus basse que l'oscillateur. Ce signal peut ensuite être utilisé comme événement d'interruption pour une CPU.
Notez que l'oscillateur peut être utilisé directement à la place du temporisateur. Ce qui différencie le temporisateur / compteur de l'oscillateur, c'est qu'il peut être programmé. Vous pouvez donc considérer le temporisateur / compteur comme un oscillateur beaucoup plus sophistiqué.