19 votos

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

Mi CPU Intel cambia de velocidad de reloj en función del uso, pero ¿cómo decide a qué velocidad de reloj funcionar? ¿La velocidad de reloj la determina el software del sistema operativo mediante un algoritmo o se basa en el hardware? ¿Depende del número de interrupciones? ¿De la rotación de la caché? ¿Es la propia CPU la que fija su reloj? ¿O lo ajusta un controlador independiente? ¿O por software?

22voto

Herms Puntos 13069

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 enganche de fase de mayor frecuencia dentro de la CPU. El reloj generado funciona a un múltiplo del reloj de referencia, y ese múltiplo puede cambiarse configurando ciertos registros en la CPU. La generación real del reloj se hace puramente en hardware.

Para reducir aún más la potencia, la CPU también envía señales al regulador de tensión que suministra su tensión al núcleo para que funcione a un valor de consigna más bajo. A frecuencias más bajas, la CPU puede funcionar a un voltaje más bajo sin funcionar mal, y como el consumo de energía es proporcional al cuadrado del voltaje, incluso una pequeña reducción del voltaje puede ahorrar una gran cantidad de energía.

El escalado de voltaje y frecuencia lo hace el hardware, pero la decisión de funcionar en modo de bajo consumo la toma el software (el SO). La forma en que el sistema operativo determina el modo óptimo de funcionamiento es un problema aparte, más complicado, pero probablemente se reduce principalmente al % de tiempo que el sistema ha estado inactivo últimamente. Mayormente inactivo, baja la frecuencia. Mayormente ocupado, aumenta la frecuencia. Una vez que el sistema operativo decide la frecuencia de ejecución, es sólo una cuestión de establecer un registro.

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

3voto

user3112401 Puntos 78

Pues bien, en los sistemas operativos modernos existe algo llamado "programador de tareas". Se ejecuta periódicamente (muy rápido) y selecciona (de una lista) cuál es la siguiente tarea a ejecutar. Las tareas pueden estar en muchos estados, como seleccionadas, bloqueadas, durmiendo, etc.

Si todas las tareas están en modo de selección (esperando algo del sistema operativo) y no pueden ser servidas, o algunas están durmiendo, etc., por lo que no se está haciendo un uso intensivo del procesador, el programador de tareas invocará una tarea especial llamada "inactiva".

Si el controlador de la CPU comprueba la tabla del programador de tareas y verifica que la tarea inactiva está funcionando la mayor parte del tiempo de la CPU, simplemente enviará una orden al circuito PLL de generación de reloj de la CPU para que reduzca 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 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 ser estrangulada porque no todas las CPUs son completamente estáticas (por lo que necesitan ciclos de refresco). Las CPUs totalmente estáticas pueden bajar hasta 0 (cero) MHz porque no se pierde ningún estado si se para el reloj.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X