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

15

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 utilizando un algoritmo o está basada en hardware? ¿Depende del número de interrupciones? El volumen de negocios de caché? ¿La propia CPU establece su propio reloj? ¿O un controlador separado lo configura? ¿O software?

    
pregunta Chloe

2 respuestas

18

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 usa como la frecuencia de referencia para un oscilador controlado por bucle de fase de frecuencia más alta dentro de la CPU. El reloj generado se ejecuta en algunos múltiplos del reloj de referencia, y ese múltiplo se puede cambiar estableciendo ciertos registros en la CPU. La generación real del reloj se realiza únicamente en hardware.

Para reducir aún más la potencia, la CPU también envía señales al regulador de voltaje que suministra su voltaje central para que se ejecute en un punto de ajuste más bajo. En frecuencias más bajas, la CPU puede funcionar con un voltaje más bajo sin que funcione mal, y como 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.

La escala de voltaje y frecuencia la realiza el hardware, pero la decisión de ejecutarse en un modo de baja potencia la toma el software (el SO). La forma en que el sistema operativo determina que el modo óptimo para ejecutarse es un problema separado, más desordenado, pero probablemente se reduce a la mayoría del tiempo que el sistema ha estado inactivo últimamente. Mayormente inactivo, baja la frecuencia. Mayormente ocupado, elevar la frecuencia. Una vez que el sistema operativo decide la frecuencia de ejecución, solo es cuestión de establecer un registro.

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

    
respondido por el Theran
3

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 ser 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 llamado "inactivo".

Si el controlador de la CPU comprueba la tabla del programador de tareas y verifica que la tarea inactiva está ejecutando la mayor parte del tiempo de la CPU, simplemente enviará un comando al circuito PLL de la generación del reloj de la CPU para reducir su reloj. Por el contrario, si la tarea inactiva toma 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 porque no todas las CPU son completamente estáticas (por lo que necesitan ciclos de actualización). Los CPUs completamente estáticos pueden ir tan bajos como 0 (cero) MHz porque no hay estado que perder si se detiene el reloj.

    
respondido por el Jorge Aldo

Lea otras preguntas en las etiquetas