Les processeurs courants qui vont dans les smartphones, les ordinateurs portables et même les ordinateurs de bureau ont une fréquence d'horloge variable. Lorsque le planificateur détecte qu'il a un temps d'inactivité, il peut réduire la fréquence d'horloge et l'augmenter à nouveau s'il y a plus de processus en compétition pour le temps CPU.
Les processeurs optimisés pour les appareils alimentés par batterie ont tendance à être composés de nombreux composants fonctionnels qui ont chacun leur propre horloge (exemple: ARM Cortex A8 ). Lorsqu'un composant est inactif, le système d'exploitation peut le désactiver (ou réduire son horloge), ce qui économise de l'énergie. Par exemple, sur de nombreux processeurs multicœurs (tels que ceux des appareils mobiles haut de gamme), chaque cœur peut être activé ou désactivé séparément. ARM est particulièrement bon dans ce jeu, ce qui est l'une des raisons pour lesquelles la plupart des smartphones ont des processeurs ARM.
La variation de la fréquence d'horloge ou la désactivation de l'horloge des composants électroniques est appelée gestion de l'alimentation . Il s'agit généralement d'une partie complexe de l'écriture et de l'optimisation d'un système d'exploitation pour un appareil alimenté par batterie, avec de nombreuses dépendances sur le modèle matériel exact.
Ce qui vaut pour le CPU vaut aussi pour les périphériques. L'écran rétro-éclairé est un grand consommateur d'énergie sur un smartphone, par exemple, suivi par la radio. Le système d'exploitation du processeur peut jouer un rôle dans la gestion de l'alimentation des périphériques; les puces secondaires exécutent également leur propre firmware qui gère également l'alimentation.
Les applications ont leur rôle à jouer pour réduire la consommation d'énergie: elles doivent permettre au système d'exploitation de faire ce qu'il veut. La pire chose qu'une application puisse faire est d'interroger - exécuter une boucle comme while (not_ready()) {}
. Même l'introduction d'un petit retard comme dans while (not_ready()) {usleep(100);}
n'aide pas car cela ne laisse pas assez de temps au processeur pour passer en mode basse consommation, ou si c'est le cas, chaque réveil infructueux signifie un gaspillage d'énergie. Ainsi, les API du système d'exploitation doivent être conçues de sorte que les applications n'aient jamais besoin d'interroger, mais peuvent à la place s'abonner à une sorte de mécanisme d'événement et rester inactives jusqu'à ce qu'elles soient informées d'un événement pertinent. Les applications doivent à leur tour tirer parti de ces mécanismes, de sorte que la conception de l'ensemble de la pile logicielle a un impact sur la consommation d'énergie.
Vous pouvez obtenir des informations sur ce qui est responsable de la consommation d'énergie de votre PC avec l' utilitaire Intel Powertop . Les smartphones ont généralement un moyen de voir combien les applications d'alimentation ont également consommé. La prise en compte précise de la consommation d'énergie par application est difficile: si un composant se réveille pour deux applications, le temps de réveil peut être imputé à l'une d'entre elles de façon quelque peu arbitraire ou à aucune; la consommation d'énergie des périphériques n'est pas toujours facilement retracée à l'application responsable.
Une puce RAM ne sait pas lequel de ses bits stocke les données d'un processus actif, elle ne peut donc pas être désactivée de cette manière de manière sélective. La consommation d'énergie d'un processus n'est pas liée à la quantité de mémoire qu'il utilise (sauf dans la mesure où les accès RAM consomment de l'énergie, mais réutiliser la même mémoire ou utiliser différentes zones RAM ne fait aucune différence en ce qui concerne la consommation d'énergie).