← Planificación de la CPU Bloque 4 · Primero el trabajo más corto · Tema 15 de 44

Tema 15

Predecir la próxima ráfaga

SJF y SRTF necesitan conocer la duración de las ráfagas antes de ejecutarlas, pero en la práctica las ráfagas no se conocen de antemano: un proceso no sabe cuánto va a durar su próxima ráfaga de CPU. La solución es predecirla. En este tema verás los métodos de predicción, desde los más simples hasta el promedio exponencial, que es el que usan los sistemas operativos reales, y un simulador para experimentar con el parámetro alpha.

1. Por qué hay que predecir

SJF y SRTF son los algoritmos que minimizan el tiempo de espera promedio, pero tienen un requisito imposible: necesitan conocer la duración de las ráfagas de CPU antes de ejecutarlas. En la práctica, un proceso no sabe cuánto va a durar su próxima ráfaga. Un compilador no sabe si va a tardar 0,1 s o 10 s en compilar el siguiente archivo; un servidor web no sabe si la siguiente petición va a ser un archivo pequeño o uno enorme.

La única información disponible es el historial: las duraciones de las ráfagas anteriores. A partir de ese historial, el sistema puede estimar la duración de la próxima ráfaga. Esa estimación es la que usa SJF (o SRTF) para elegir el siguiente proceso.

La predicción no es perfecta: el sistema se equivocará a veces. Pero un SJF con predicción razonable sigue siendo mejor que FCFS, que no usa ninguna información.

Predicción, no adivinación

El sistema no adivina la duración de la próxima ráfaga; la estima a partir del historial. La calidad de la estimación depende del método y del parámetro alpha. Un buen método sigue las tendencias sin sobre-reaccionar a los cambios.

2. El problema de la predicción

El problema de la predicción tiene estas características:

Un buen método de predicción debe:

3. Métodos simples

Antes de ver el promedio exponencial, veamos dos métodos simples que sirven de referencia:

MétodoFórmulaVentajasDesventajas
Última ráfagaTn+1 = tnTrivial, O(1).Muy sensible a cambios. Una ráfaga anormal distorsiona la predicción.
Promedio simpleTn+1 = (Σ ti) / nSuaviza las fluctuaciones.Memoria O(n). Las ráfagas antiguas pesan igual que las recientes.

El método de la última ráfaga asume que la próxima ráfaga será igual a la anterior. Funciona bien si las ráfagas son estables, pero falla si hay cambios.

El promedio simple suaviza, pero tiene dos problemas: necesita guardar todas las ráfagas (memoria O(n)) y da el mismo peso a ráfagas antiguas y recientes, lo que hace que reaccione lentamente a los cambios.

El promedio exponencial resuelve ambos problemas.

4. El promedio exponencial

El promedio exponencial (exponential averaging) es un método de predicción que combina la última ráfaga observada con la predicción anterior, ponderando cada una con un factor α (alpha). Las ráfagas antiguas contribuyen cada vez menos, de forma exponencial.

La idea es simple: la predicción para la próxima ráfaga es una mezcla de lo que ocurrió la última vez y de lo que se predijo antes. Si α es grande, se confía más en la última ráfaga (reacción rápida). Si α es pequeño, se confía más en la predicción anterior (suavizado).

El promedio exponencial tiene estas ventajas:

5. La fórmula

La fórmula del promedio exponencial es:

Tn+1 = α · tn + (1 − α) · Tn

Donde:

Si expandimos la fórmula, se ve la ponderación exponencial:

Tn+1 = α·tn + α(1−α)·tn−1 + α(1−α)2·tn−2 + … + (1−α)n+1·T0

Cada ráfaga anterior contribuye con un peso que decrece exponencialmente: tn pesa α, tn−1 pesa α(1−α), tn−2 pesa α(1−α)2, y así sucesivamente. Las ráfagas muy antiguas contribuyen casi nada.

La predicción inicial T0 puede ser un valor arbitrario (por ejemplo, 10) o el promedio de las primeras ráfagas. Su influencia desaparece rápidamente gracias al factor (1−α)n.

6. El parámetro alpha

El parámetro α controla el equilibrio entre reacción y suavizado:

Valor de αComportamientoCuándo usarlo
α = 0La predicción nunca cambia: Tn+1 = Tn. Ignora la última ráfaga.Nunca. Es inútil.
α = 0,1Suavizado fuerte. Reacciona lentamente a los cambios.Ráfagas muy variables, donde se quiere evitar sobre-reaccionar.
α = 0,5Equilibrio entre reacción y suavizado.Caso general. Valor típico.
α = 0,9Reacción rápida. Sigue de cerca la última ráfaga.Ráfagas estables, donde se quiere reaccionar rápido.
α = 1La predicción es la última ráfaga: Tn+1 = tn. Equivale al método de la última ráfaga.Cuando se confía totalmente en la última observación.

El valor típico en los sistemas operativos es α = 0,5, aunque varía según el sistema y el tipo de carga de trabajo. En Linux, el parámetro no se usa directamente (Linux no predice ráfagas para planificar), pero el concepto es fundamental para entender SJF y SRTF.

α es un compromiso

Un α alto reacciona rápido a los cambios pero es sensible al ruido. Un α bajo suaviza pero reacciona lento. No hay un valor óptimo universal: depende de la variabilidad de las ráfagas.

7. Un ejemplo desarrollado

Un proceso tiene estas ráfagas de CPU (en unidades de tiempo): 6, 4, 6, 4, 13, 13, 13. La predicción inicial es T0 = 10. Calculemos la predicción con α = 0,5:

Ráfaga real (tn)Predicción anterior (Tn)Predicción siguiente (Tn+1 = 0,5·tn + 0,5·Tn)
— (inicial)—10,00
610,000,5·6 + 0,5·10 = 8,00
48,000,5·4 + 0,5·8 = 6,00
66,000,5·6 + 0,5·6 = 6,00
46,000,5·4 + 0,5·6 = 5,00
135,000,5·13 + 0,5·5 = 9,00
139,000,5·13 + 0,5·9 = 11,00
1311,000,5·13 + 0,5·11 = 12,00

Observa cómo la predicción sigue la tendencia: cuando las ráfagas son 6, 4, 6, 4, la predicción oscila entre 5 y 8. Cuando de repente aparece una ráfaga de 13, la predicción sube gradualmente: 9, 11, 12. No salta de 5 a 13 de golpe, sino que se adapta en unos pocos pasos.

Con α = 0,9, la predicción reaccionaría más rápido: después de la primera ráfaga de 13, saltaría a 0,9·13 + 0,1·5 = 12,2. Con α = 0,1, reaccionaría más lento: 0,1·13 + 0,9·5 = 5,8.

8. Propiedades del promedio exponencial

El tiempo de reacción a un cambio súbito es aproximadamente 1/α ráfagas. Con α = 0,5, la predicción tarda unas 2 ráfagas en adaptarse. Con α = 0,1, tarda unas 10.

9. Limitaciones

A pesar de estas limitaciones, el promedio exponencial es el método más usado en la práctica para predecir ráfagas, porque es simple, rápido y razonablemente bueno.

10. Cómo lo usa Linux

Linux no usa el promedio exponencial para planificar la CPU. El planificador de Linux (CFS/EEVDF) no predice ráfagas: usa un sistema de créditos (vruntime) que se acumula a medida que el proceso se ejecuta. La predicción de ráfagas se usa en otros contextos:

Sin embargo, el concepto del promedio exponencial es fundamental para entender SJF y SRTF, y aparece en muchos otros contextos de sistemas operativos y redes (TCP usa un promedio exponencial para estimar el RTT).

11. Simulador interactivo

Este simulador calcula el promedio exponencial para una secuencia de ráfagas. Cambia α y la secuencia para ver cómo afecta la predicción:

Simulador · promedio exponencial

PasoRáfaga realPredicción anteriorPredicción siguiente

12. Resumen

13. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Por qué SJF necesita predecir las ráfagas?

Porque en la práctica las ráfagas no se conocen de antemano. SJF necesita saber cuál es el proceso más corto antes de ejecutarlo.

2. ¿Cuál es la fórmula del promedio exponencial?

Tn+1 = α·tn + (1 − α)·Tn, donde tn es la última ráfaga y Tn la predicción anterior.

3. ¿Qué efecto tiene aumentar alpha?

La predicción reacciona más rápido a los cambios, pero es más sensible al ruido.

4. ¿Cuánta memoria necesita el promedio exponencial?

O(1): solo necesita la predicción anterior y la última ráfaga.

5. ¿Qué ocurre cuando alpha = 1?

La predicción es igual a la última ráfaga observada. Equivale al método de la última ráfaga.

6. ¿Qué ocurre cuando alpha = 0?

La predicción nunca cambia. Ignora completamente la última ráfaga.

7. ¿Cuántas ráfagas tarda la predicción en adaptarse a un cambio?

Aproximadamente 1/α ráfagas. Con α = 0,5, unas 2 ráfagas.

8. ¿Por qué las ráfagas antiguas contribuyen cada vez menos?

Porque cada ráfaga anterior se multiplica por (1−α) una vez más, lo que reduce su peso exponencialmente.

9. ¿Usa Linux el promedio exponencial para planificar la CPU?

No. Linux no predice ráfagas para planificar. El concepto aparece en otros contextos (E/S, prefetching, TCP).

10. ¿Cuál es la principal limitación del promedio exponencial?

No predice cambios abruptos bien: tarda varias ráfagas en adaptarse a un cambio súbito.

Para practicar

  1. Calcula la predicción con α = 0,3 para la secuencia 5, 5, 5, 20, 20, 20 (predicción inicial 5).
  2. Compara la predicción con α = 0,2 y α = 0,8 para la misma secuencia.
  3. Implementa el promedio exponencial en C y pruébalo con ráfagas reales de un programa.
  4. Explica por qué un α muy alto es sensible al ruido.
  5. Demuestra que la suma de los pesos de todas las ráfagas anteriores es 1.
  6. Investiga cómo TCP usa el promedio exponencial para estimar el RTT.