3 votes

Comment fonctionnent les minuteries et les alarmes lorsque l'appareil est en veille ?

Je tiens à préciser en préambule qu'il ne s'agit pas d'une question de développeur, mais plutôt d'un intérêt pour savoir comment cet aspect particulier d'Android fonctionne par rapport au matériel que l'on trouve aujourd'hui dans les smartphones.

D'après ce que j'ai compris, lorsqu'un téléphone est en sommeil, tous les cœurs de l'unité centrale (pour un appareil multicœur) sont dans un état de très faible puissance, nécessaire à la batterie. Cependant, lorsqu'une minuterie ou une alarme est réglée sur un point arbitraire dans le futur, je suppose que le matériel doit essentiellement surveiller chaque seconde qui passe et décider s'il faut déclencher l'alarme ou attendre.

Cela signifie-t-il que le processeur fait le travail (ce dont je doute), ou existe-t-il un matériel dédié à faible consommation ?

Merci !

8voto

Andy Brudtkuhl Points 1714

Tous les ordinateurs ont une pièce de matériel spéciale appelée le horloge (de manière plus complète, le horloge en temps réel ou RTC). L'horloge est reliée à l'unité centrale, mais elle fonctionne même lorsque l'ordinateur est complètement éteint. Sur un ordinateur de bureau, une batterie située sur la carte mère permet à l'horloge de fonctionner même lorsque l'ordinateur est débranché du secteur. Les appareils mobiles ont tendance à avoir une grande condensateur (qui est un peu comme une batterie rechargeable), donc même si vous retirez la batterie principale, l'horloge peut continuer à donner l'heure pendant quelques heures.

À intervalles réguliers, l'horloge envoie un signal à l'unité centrale appelé un interruption . Il demande à l'unité centrale d'interrompre ce qu'elle est en train de faire pour traiter ce signal. Il s'agit du même mécanisme utilisé par d'autres parties de l'ordinateur (comme l'écran tactile) pour envoyer des données à l'unité centrale. Le rythme des signaux peut être contrôlé par le noyau : il peut être aussi lent qu'une fois par seconde, ou aussi rapide que mille fois par seconde. Cela semble beaucoup de signaux, mais n'oubliez pas que les ordinateurs d'aujourd'hui ont besoin d'une fraction de nanoseconde pour effectuer une seule opération, de sorte que même une horloge de 1 kHz ne s'interrompt que tous les quelques millions d'opérations.

Ne confondez pas l'horloge en temps réel avec la Horloge du CPU et le CPU fréquence d'horloge qui sont généralement de l'ordre de quelques GHz. L'horloge de l'unité centrale n'est pas un dispositif de chronométrage : elle détermine le nombre d'opérations par seconde que l'unité centrale peut effectuer, et constitue un facteur important de la puissance consommée par l'unité centrale.

Sur la plupart des processeurs, le noyau peut diminuer la fréquence d'horloge du processeur, désactiver certains cœurs du processeur et peut-être même désactiver certains caches, tout cela pour réduire la consommation d'énergie. C'est ce qui se passe lorsque votre appareil Android passe en mode dormir mais les changements exacts sont différents d'un téléphone à l'autre. L'unité centrale fonctionne toujours, mais plus lentement, et consomme moins d'énergie. Comme le souligne Izzy, si le téléphone utilise le système big.LITTLE d'ARM, il se peut même que ce soit un cœur de CPU complètement différent qui fonctionne en mode veille : un cœur plus lent, réglé pour une faible consommation d'énergie.

Considérez donc que le RTC fonctionne toujours en mode veille, et que le CPU reçoit et traite toujours les interruptions d'horloge. Cela est toujours nécessaire pour que l'unité centrale garde la trace des différents processus et répartisse le temps entre eux de manière équitable. L'un de ces processus est le gestionnaire d'alarmes du système. Il possède une liste triée de toutes les applications du système qui ont enregistré une alarme. Le gestionnaire d'alarmes ne fonctionne pas en permanence : il indique plutôt au noyau la date de la première alarme, et l'unité centrale de traitement (UCT) se met en route. gestionnaire d'interruptions pour les interruptions de l'horloge est chargé de vérifier l'heure et de réveiller le gestionnaire d'alarme le cas échéant.

De cette façon, l'unité centrale n'a besoin que de quelques instructions par horloge pour comparer l'heure actuelle avec l'heure du prochain réveil.

En outre, le gestionnaire d'alarmes dispose de ses propres optimisations pour garder l'appareil endormi autant que possible. Lorsque plusieurs applications veulent s'exécuter à intervalles (par exemple, pour vérifier les e-mails toutes les 15 minutes), le gestionnaire d'alarmes ne les exécutera pas individuellement aux heures exactes demandées, ce qui réveillerait l'appareil plusieurs fois au cours de cette fenêtre de 15 minutes. Au lieu de cela, il les exécute toutes en même temps, de sorte que l'appareil ne doit se réveiller qu'une seule fois.

En outre, de nombreuses alarmes ne fonctionnent pas du tout si l'appareil est endormi. Par exemple, si une application veut s'exécuter toutes les heures pour modifier l'arrière-plan de votre écran d'accueil, il est inutile de le faire lorsque l'appareil est endormi, car vous ne pouvez pas le voir. Elle indiquera au gestionnaire d'alarmes qu'elle n'a pas besoin de réveiller le périphérique pour s'exécuter, de sorte que le gestionnaire d'alarmes ignorera cette alarme lorsqu'il indiquera au noyau quand il doit s'exécuter. De cette façon, si le périphérique est endormi le moment venu, l'alarme ne se produira qu'au prochain réveil du périphérique.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X