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).
Comme vous le savez sans doute, le système d'exploitation gère une variété de listes. Deux de ces listes sont la liste prête et la liste de minuterie. La liste prête identifie les tâches / threads prêts à être exécutés. La liste des minuteurs identifie les tâches / threads qui sont dans un état bloqué avec un délai d'expiration.
Imaginez que le système d'exploitation ait une liste prête vide. Autrement dit, il n'a plus de tâches prêtes à être exécutées (il est à l'état inactif). Certains processeurs (tels que le x86) ont une instruction d'arrêt que le système d'exploitation peut invoquer pour provoquer l'arrêt du processeur jusqu'à ce qu'il soit réveillé par une interruption externe (telle qu'une interruption par tick). Pendant cette période, il consomme moins d'énergie. Cette technique peut être encore améliorée en jetant un œil à la liste des minuteurs. Si vous êtes inactif et que vous savez que le plus tôt possible une tâche peut se réveiller à partir d'un tick de minuterie à 100 ticks, le taux de tick peut être temporairement modifié pour être dit 100 fois plus lent. De cette façon, le processeur peut dépenser encore moins d'énergie pendant une période plus longue car il n'aura pas à traiter jusqu'à 100 interruptions de tick.
Une fois l'interruption externe arrivée, le taux de tick devra être recalculé. Si l'interruption externe a rendu une tâche prête, le taux de tick revient à la normale. Sinon, le nombre de tiques à dormir doit être recalculé avec le nouveau taux de tiques (ralenti).
J'espère que cela t'aides.
la source
Pour ajouter aux autres réponses:
Votre question considère iOS et Android comme des systèmes d'exploitation, mais le «système d'exploitation» n'en est qu'une partie.
Android et iOS sont des cadres et incluent de nombreuses parties qui ne sont pas considérées comme faisant partie du système d'exploitation réel, mais qui sont actives pour réduire la consommation d'énergie.
Par exemple, Android de par sa conception permet aux développeurs d'applications d'enregistrer leur état lorsqu'ils sont masqués, de sorte que les processus peuvent être interrompus lorsqu'ils ne sont pas activement utilisés et ainsi réduire la quantité de threads prêts et permettre l'arrêt du cœur et la réduction de la fréquence d'horloge.
Il y a des fonctionnalités dans le «système d'exploitation» qui définissent la luminosité adaptative, l'état de veille Wi-Fi, les threads de nettoyage, la mise en commun du calendrier, les indicateurs LED, le comportement de veille cellulaire et d'autres aspects qui affectent considérablement la consommation d'énergie.
De plus, certaines plates-formes mobiles ont travaillé dur pour optimiser leur ratio d'utilisation CPU / GPU, car le GPU est plus adapté au niveau graphique et c'est un ajout relativement nouveau au paysage mobile, de plus en plus de parties graphiques du système d'exploitation se déplacent vers le GPU, qui efface le travail du CPU et permet d'utiliser les optimisations de puissance du CPU (et dans de nombreux cas, d'accélérer également le système dans son ensemble).
la source