As CPUs comuns usadas em smartphones, laptops e até computadores de mesa têm uma taxa de clock variável. Quando o planejador detecta que possui tempo ocioso, ele pode reduzir a taxa de clock e aumentá-la novamente se houver mais processos competindo pelo tempo da CPU.
As CPUs otimizadas para dispositivos alimentados por bateria tendem a ser compostas por muitos componentes funcionais, cada um com seu próprio relógio (exemplo: ARM Cortex A8 ). Quando um componente está ocioso, o sistema operacional pode desligá-lo (ou reduzir o relógio), o que economiza energia. Por exemplo, em muitas CPUs multicore (como as de dispositivos móveis de última geração), cada núcleo pode ser ativado ou desativado separadamente. O ARM é particularmente bom nesse jogo, que é uma das razões pelas quais a maioria dos smartphones possui CPUs ARM.
A variação da freqüência ou o desligamento do relógio dos componentes eletrônicos é conhecido como gerenciamento de energia . Tende a ser uma parte complexa da escrita e otimização de um sistema operacional para um dispositivo alimentado por bateria, com muitas dependências do modelo de hardware exato.
O que vale para a CPU também vale para periféricos. A tela retroiluminada é um grande consumidor de energia em um smartphone, por exemplo, seguido pelo rádio. O sistema operacional da CPU pode desempenhar um papel no gerenciamento de energia de periféricos; os chips secundários também executam seu próprio firmware, que também executa o gerenciamento de energia.
Os aplicativos têm o seu papel de manter o consumo de energia baixo: eles devem permitir que o sistema operacional faça seu trabalho. A pior coisa que um aplicativo pode fazer é pesquisar - executando um loop como while (not_ready()) {}
. Mesmo introduzir um pequeno atraso como em while (not_ready()) {usleep(100);}
não ajuda, pois não permite tempo suficiente para o processador entrar no modo de baixo consumo de energia ou, se o fizer, cada ativação infrutífera significa desperdício de energia. Portanto, as APIs do sistema operacional devem ser projetadas para que os aplicativos nunca precisem pesquisar, mas podem se inscrever em algum tipo de mecanismo de evento e permanecer inativos até serem notificados de um evento relevante. Os aplicativos, por sua vez, precisam aproveitar esses mecanismos, para que o design de toda a pilha de software tenha impacto no consumo de energia.
Você pode obter algumas informações sobre o que é responsável pelo consumo de energia do seu PC com o utilitário Powertop da Intel . Os smartphones geralmente têm uma maneira de ver quanto aplicativos de energia estão consumindo também. Contabilizar o consumo de energia por aplicação com precisão é difícil: se um componente acorda para duas aplicações, o tempo de ativação pode ser contabilizado de uma maneira arbitrária ou para nenhuma delas; o consumo de energia dos periféricos também nem sempre é facilmente rastreado para o aplicativo responsável.
Um chip de RAM não sabe quais de seus bits armazenam dados de um processo ativo; portanto, não pode ser desativado dessa maneira. O consumo de energia de um processo não está relacionado à quantidade de memória que ele usa (exceto na medida em que a RAM acessa consumir energia, mas reutilizar a mesma memória ou usar diferentes áreas de RAM não faz diferença em relação ao consumo de energia).