1. El escenario ideal (y poco práctico):conocer el futuro
* En un mundo perfecto, sabrías el tiempo exacto de ráfaga de la CPU que cada proceso necesitará * antes de que se ejecute. Esto permitiría una programación óptima (por ejemplo, el trabajo más corto primero).
* Realidad: ¡Saber el futuro es imposible! Los procesos pueden depender de datos, dependientes de la entrada e influenciados por eventos externos, lo que hace que sus necesidades de CPU sean altamente impredecibles.
2. El enfoque práctico:estimación utilizando promedio exponencial
Como no podemos saber el tiempo de explosión exacto, los sistemas operativos usan los algoritmos de predicción para estimarlo. La técnica más común y efectiva es el promedio exponencial (también conocido como envejecimiento).
* Fórmula:
`τ_ (n + 1) =α * t_n + (1 - α) * τ_n`
Dónde:
* `τ_ (n+1)`:El tiempo de explosión predicho para la ráfaga * de CPU * siguiente *.
* `t_n`:el * real * tiempo de explosión medido de la ráfaga * más reciente * de la CPU.
* `τ_n`:el * anterior * tiempo de ráfaga predicho. Esta es la estimación que hicimos antes de la última explosión.
* `α`:el factor de suavizado (0 ≤ α ≤ 1). Esto determina el peso dado a la explosión más reciente versus la predicción anterior.
* Explicación:
* La fórmula calcula un promedio ponderado de la predicción anterior (`τ_n`) y el tiempo de explosión real más reciente (` t_n`).
* `α` controla la rapidez con que la predicción se adapta a los cambios en el comportamiento del proceso.
* alto α (cerca de 1): Da más peso a la explosión reciente. La predicción responde rápidamente a cambios repentinos en los requisitos de la CPU. Adecuado para procesos con ráfagas cortas y variables.
* bajo α (cerca de 0): Da más peso a la historia pasada. La predicción es más estable y menos afectada por fluctuaciones ocasionales. Adecuado para procesos con requisitos de CPU relativamente consistentes.
* Cuando llega un nuevo proceso, su estimación de tiempo de explosión inicial (`τ_0`) generalmente se establece en un pequeño valor predeterminado (por ejemplo, 0 o el tiempo de explosión promedio de otros procesos).
* Ejemplo:
Digamos:
* `α =0.5`
* `τ_n =10` MS (predicción anterior)
* `t_n =20` MS (tiempo de ráfaga real que se acaba de completar)
Entonces:
`τ_ (n + 1) =0.5 * 20 + (1 - 0.5) * 10 =10 + 5 =15` MS
El tiempo de explosión prevista para la próxima explosión es de 15 ms.
3. Cómo funciona en la práctica (simplificado)
1. Inicialización: Cuando se inicia un proceso, establezca una estimación inicial (`τ_0`).
2. Ejecución: El proceso se ejecuta, y medimos su tiempo real de ráfaga CPU (`T_N`).
3. Estimación: Una vez que se completa la explosión, use la fórmula de promedio exponencial para calcular el nuevo tiempo de explosión predicho (`τ_ (n+1)`).
4. Repetir: El proceso continúa funcionando, y repitemos los pasos 2 y 3 después de cada explosión. La predicción se actualiza continuamente.
4. Consideraciones y desafíos
* Elegir α: Seleccionar el valor `α` derecho es crítico. No hay un solo "mejor" valor. Depende de las características de los procesos que se ejecutan en el sistema. Algunos sistemas operativos podrían ajustar dinámicamente `α` en función del comportamiento del proceso observado.
* precisión: El promedio exponencial es una *estimación *, no un predictor perfecto. La precisión de la predicción depende del comportamiento del proceso y de la elección de `α`.
* Cambio de contexto sobre la sobrecarga: La sobrecarga de medir los tiempos de explosión y las estimaciones de actualización debe considerarse, especialmente si los interruptores de contexto son frecuentes.
* Otras técnicas de predicción: Si bien el promedio exponencial es el más común, existen otras técnicas, como el uso de promedios históricos más complejos o modelos de aprendizaje automático. Sin embargo, estos se usan con menos frecuencia debido a la complejidad adicional y la potencial de sobrecarga.
En resumen, calcular el tiempo de ráfaga de la CPU se trata de * estimarlo * usando el comportamiento pasado. El promedio exponencial es un método simple pero efectivo que permite que el sistema operativo se adapte a los requisitos de CPU cambiantes del proceso, permitiendo mejores decisiones de programación.