Las CPU comunes que se usan en teléfonos inteligentes, computadoras portátiles e incluso PC de escritorio tienen una frecuencia de reloj variable. Cuando el planificador detecta que tiene tiempo de inactividad, puede reducir la velocidad del reloj y aumentarla nuevamente si hay más procesos que compiten por el tiempo de CPU.
Las CPU optimizadas para dispositivos alimentados por batería tienden a estar compuestas de muchos componentes funcionales que tienen cada uno su propio reloj (ejemplo: ARM Cortex A8 ). Cuando un componente está inactivo, el sistema operativo puede apagarlo (o reducir su reloj), lo que ahorra energía. Por ejemplo, en muchas CPU multinúcleo (como las de los dispositivos móviles de gama alta), cada núcleo se puede encender o apagar por separado. ARM es particularmente bueno en este juego, que es una de las razones por las cuales la mayoría de los teléfonos inteligentes tienen CPU ARM.
Variar la frecuencia del reloj o apagar el reloj de los componentes electrónicos se conoce como administración de energía . Tiende a ser una parte compleja de la escritura y la optimización de un sistema operativo para un dispositivo alimentado por batería, con muchas dependencias del modelo de hardware exacto.
Lo que se aplica a la CPU también se aplica a los periféricos. La pantalla retroiluminada es un gran consumidor de energía en un teléfono inteligente, por ejemplo, seguido de la radio. El sistema operativo de la CPU puede desempeñar un papel en la administración de energía de los periféricos; los chips secundarios también ejecutan su propio firmware que también realiza la administración de energía.
Las aplicaciones tienen su papel en mantener el consumo de energía bajo: deben permitir que el sistema operativo haga lo suyo. Lo peor que puede hacer una aplicación es sondear: ejecutar un ciclo como while (not_ready()) {}
. Incluso la introducción de un pequeño retraso while (not_ready()) {usleep(100);}
no ayuda, ya que no permite suficiente tiempo para que el procesador entre en modo de bajo consumo de energía, o si lo hace, cada despertador infructuoso significa energía desperdiciada. Por lo tanto, las API del sistema operativo deben estar diseñadas para que las aplicaciones nunca necesiten sondear, sino que pueden suscribirse a algún tipo de mecanismo de evento y permanecer inactivas hasta que se les notifique un evento relevante. Las aplicaciones a su vez deben aprovechar dichos mecanismos, por lo que el diseño de toda la pila de software tiene un impacto en el consumo de energía.
Puede obtener información sobre los responsables del consumo de energía de su PC con la utilidad Intel Powertop . Los teléfonos inteligentes generalmente tienen una manera de ver cuánta energía han consumido las aplicaciones también. Es difícil tener en cuenta el consumo de energía por aplicación con precisión: si un componente se activa para dos aplicaciones, el tiempo de activación puede contabilizarse a una de ellas de manera arbitraria o a ninguna; El consumo de energía de los periféricos tampoco siempre se puede rastrear fácilmente a la aplicación responsable.
Un chip RAM no sabe cuál de sus bits almacena datos de un proceso activo, por lo que no se puede apagar selectivamente de esta manera. El consumo de energía de un proceso no está relacionado con la cantidad de memoria que usa (excepto en la medida en que los accesos de RAM consumen energía, pero volver a usar la misma memoria o usar diferentes áreas de RAM no hace ninguna diferencia con respecto al consumo de energía).