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).
Como você sem dúvida sabe, o sistema operacional mantém uma variedade de listas. Duas dessas listas são a lista pronta e a lista do cronômetro. A lista de pronto identifica quais tarefas / threads estão prontas para execução. A lista do cronômetro identifica as tarefas / threads que estão em um estado bloqueado com um tempo limite.
Imagine que o sistema operacional tenha uma lista pronta vazia. Ou seja, ficou sem tarefas prontas para execução (está no estado ocioso). Alguns processadores (como o x86) têm uma instrução de parada que o sistema operacional pode chamar para fazer com que o processador pare até que seja despertado por uma interrupção externa (como uma interrupção de tick). Durante esse período, consome menos energia. Essa técnica pode ser melhorada ainda mais, espreitando a lista de cronômetros. Se você estiver ocioso e souber que, assim que uma tarefa puder ser ativada a partir de um tique de timer, esteja a 100 tiques, a taxa de tique-taque poderá ser temporariamente modificada para, digamos, 100 vezes mais lenta. Dessa forma, o processador pode gastar ainda menos energia por um longo período de tempo, porque não precisará atender até 100 interrupções de tick.
Quando a interrupção externa chegar, a taxa de ticks terá que ser recalculada. Se a interrupção externa tiver preparado uma tarefa, a taxa de tick voltará ao normal. Caso contrário, o número de ticks para dormir deve ser recalculado junto com a nova taxa de ticks (lenta).
Espero que isto ajude.
fonte
Para adicionar às outras respostas:
Sua pergunta considera o iOS e o Android como sistemas operacionais, mas o "Sistema operacional" é apenas parte deles.
O Android e o iOS são estruturas e incluem muitas partes que não são consideradas parte do sistema operacional real, mas são ativas na redução do consumo de energia.
Por exemplo, o design do Android permite que os desenvolvedores de aplicativos salvem seu estado quando ocultos, para que os processos possam ser encerrados quando não estiverem ativamente em uso, reduzindo assim a quantidade de encadeamentos prontos e permitindo o desligamento do núcleo e reduções da taxa de clock.
Existem recursos no "SO" que definem brilho adaptativo, estado de suspensão de wi-fi, threads de limpeza, pool de agendamento, indicadores de LED, comportamento de espera de celular e outros aspectos que afetam drasticamente o consumo de energia.
Além disso, algumas plataformas móveis têm trabalhado duro para otimizar sua taxa de uso de CPU / GPU, uma vez que a GPU é mais adaptada aos gráficos e é uma adição relativamente nova ao cenário móvel, mais e mais partes relacionadas ao gráfico do sistema operacional estão migrando para a GPU, que limpa o trabalho da CPU e permite o uso de otimizações de energia da CPU (e em muitos casos, também acelera o sistema como um todo).
fonte