Le CPU comuni che vanno su smartphone, laptop e persino PC desktop hanno una frequenza di clock variabile. Quando lo scheduler rileva che ha un tempo di inattività, può ridurre la frequenza di clock e aumentarla di nuovo se ci sono più processi in competizione per il tempo della CPU.
Le CPU ottimizzate per i dispositivi alimentati a batteria tendono ad essere composte da molti componenti funzionali che hanno ciascuno il proprio clock (esempio: ARM Cortex A8 ). Quando un componente è inattivo, il sistema operativo può spegnerlo (o ridurne l'orologio), risparmiando energia. Ad esempio, su molte CPU multicore (come quelle nei dispositivi mobili di fascia alta), ogni core può essere acceso o spento separatamente. ARM è particolarmente bravo in questo gioco, che è uno dei motivi per cui la maggior parte degli smartphone ha CPU ARM.
Variare la frequenza di clock o spegnere l'orologio dei componenti elettronici è noto come gestione dell'alimentazione . Tende ad essere una parte complessa della scrittura e dell'ottimizzazione di un sistema operativo per un dispositivo alimentato a batteria, con molte dipendenze dal modello hardware esatto.
Ciò che vale per la CPU vale anche per le periferiche. Il display retroilluminato è un grande consumatore di energia su uno smartphone, ad esempio seguito dalla radio. Il sistema operativo della CPU può svolgere un ruolo nella gestione dell'alimentazione delle periferiche; i chip secondari eseguono anche un proprio firmware che esegue anche la gestione dell'alimentazione.
Le applicazioni hanno il loro ruolo da svolgere nel contenere i consumi energetici: devono consentire al sistema operativo di fare le sue cose. La cosa peggiore che un'applicazione possa fare è il polling: eseguire un ciclo simile while (not_ready()) {}
. Anche introdurre un piccolo ritardo come in while (not_ready()) {usleep(100);}
non aiuta perché non consente abbastanza tempo per il processore di passare alla modalità a basso consumo, o se lo fa, ogni sveglia infruttuosa significa spreco di energia. Pertanto, le API del sistema operativo devono essere progettate in modo tale che le applicazioni non debbano mai eseguire il polling, ma possano invece sottoscrivere un qualche tipo di meccanismo di evento e rimanere inattive fino a quando non vengono informate di un evento rilevante. Le applicazioni a loro volta devono sfruttare tali meccanismi, quindi la progettazione dell'intero stack software ha un impatto sul consumo energetico.
Puoi ottenere alcune informazioni su ciò che è responsabile del consumo energetico del tuo PC con l' utility Intel Powertop . Gli smartphone in genere hanno un modo per vedere quanta energia consumano anche le applicazioni. La contabilizzazione del consumo energetico per applicazione è precisamente difficile: se un componente si sveglia per due applicazioni, il tempo di sveglia può essere rappresentato in modo arbitrario in una di esse o in nessuna delle due; inoltre, il consumo energetico delle periferiche non è sempre facilmente rintracciabile per l'applicazione responsabile.
Un chip RAM non sa quale dei suoi bit memorizza i dati di un processo attivo, quindi non può essere disattivato selettivamente in questo modo. Il consumo di energia di un processo non è correlato alla quantità di memoria che utilizza (tranne nella misura in cui gli accessi RAM consumano energia, ma riutilizzare la stessa memoria o utilizzare aree RAM diverse non fa differenza rispetto al consumo energetico).