Bueno, en los sistemas operativos modernos hay algo llamado "programador de tareas". Se ejecuta periódicamente (muy rápido) y selecciona (de una lista) la siguiente tarea a ejecutar. Las tareas pueden estar en muchos estados, como seleccionar, bloquear, dormir, etc.
Si todas las tareas están en modo de selección (esperando algo del sistema operativo) y no se pueden atender, o algunas están inactivas, etc., por lo que no se está haciendo un uso intensivo del procesador, el programador de tareas invocará una tarea especial llamada "inactivo" ".
Si el controlador de la CPU comprueba la tabla del planificador de tareas y verifica que la tarea inactiva se está ejecutando la mayor parte del tiempo de la CPU, simplemente enviará un comando al circuito PLL de generación de reloj de la CPU para reducir su reloj. Por el contrario, si la tarea inactiva requiere cada vez menos tiempo de CPU (lo que significa que la CPU se está utilizando mucho), el controlador de la CPU aumentará la velocidad de la CPU.
No es muy difícil, pero hay un límite inferior en el que la CPU no puede reducirse más porque no todas las CPU son completamente estáticas (por lo que necesitan ciclos de actualización). El cpus completamente estático puede ir tan bajo como 0 (cero) MHz porque no hay ningún estado que perder si el reloj se detiene.