¿Cómo puede una CPU cambiar dinámicamente su frecuencia de reloj?

Mi CPU Intel cambia la velocidad del reloj según el uso, pero ¿cómo decide a qué velocidad de reloj se ejecuta? ¿La velocidad del reloj está determinada por el software del sistema operativo mediante un algoritmo o está basada en hardware? ¿Depende del número de interrupciones? ¿La rotación de caché? ¿La propia CPU configura su propio reloj? ¿O lo configura un controlador separado? ¿O software?

¿Qué CPU es? Los sistemas integrados no suelen funcionar así.
¿ Quizás algo más para SuperUser ?
Algunas familias de procesadores integrados, como, por ejemplo, PIC24F, tienen frecuencias de reloj programables, y esto se puede usar para ahorrar energía. Se puede usar un oscilador externo para que el reloj de los periféricos sensibles al tiempo permanezca estable.

Respuestas (2)

El reloj central de la CPU no se recibe directamente de la placa base. Ese reloj suele ser mucho más lento (a menudo por un factor de 10 o más) que la frecuencia interna de la CPU. En su lugar, la señal de reloj de la placa base se utiliza como frecuencia de referencia para un oscilador controlado por bucle de bloqueo de fase de mayor frecuencia dentro de la CPU. El reloj generado se ejecuta en algún múltiplo del reloj de referencia, y ese múltiplo se puede cambiar configurando ciertos registros en la CPU. La generación real del reloj se realiza puramente en hardware.

Para reducir aún más la energía, la CPU también envía una señal al regulador de voltaje que suministra su voltaje central para que funcione en un punto de ajuste más bajo. A frecuencias más bajas, la CPU puede funcionar a un voltaje más bajo sin fallar y, dado que el consumo de energía es proporcional al cuadrado del voltaje, incluso una pequeña reducción en el voltaje puede ahorrar una gran cantidad de energía.

El escalado de voltaje y frecuencia lo realiza el hardware, pero la decisión de ejecutar en un modo de bajo consumo la toma el software (el sistema operativo). La forma en que el sistema operativo determina el modo óptimo para ejecutarse es un problema separado y más complicado, pero es probable que se reduzca principalmente al porcentaje de tiempo que el sistema ha estado inactivo últimamente. Mayormente inactivo, baje la frecuencia. Mayormente ocupado, aumente la frecuencia. Una vez que el sistema operativo decide la frecuencia a la que se ejecutará, solo es cuestión de establecer un registro.

Referencia: " Tecnología Intel SpeedStep mejorada para el procesador Intel Pentium M "

Características como Turbo Boost de Intel no requieren la intervención del software para explotar el margen térmico aumentando la frecuencia del reloj. Obviamente, el hardware también podría realizar un seguimiento de los cuellos de botella del rendimiento no informático (p. ej., contando los ciclos de bloqueo debido a los accesos a la memoria) y reducir la frecuencia cuando el rendimiento informático no es el cuello de botella principal.
Por cierto, los ahorros con respecto a la frecuencia de conmutación son casi lineales y no tanto debido a la conducción, que serían relaciones promedio ^ 2

Bueno, en los sistemas operativos modernos hay algo llamado "programador de tareas". Se ejecuta periódicamente (muy rápido) y selecciona (de una lista) qué próxima tarea 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 ejecutar, 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 denominada "inactiva". ".

Si el controlador de la CPU comprueba la tabla del programador de tareas y verifica que la tarea inactiva se ejecuta 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 acelerarse más porque no todas las CPU son completamente estáticas (por lo que necesitan ciclos de actualización). La CPU completamente estática puede bajar hasta 0 (cero) MHz porque no hay estado que perder si se detiene el reloj.