Planificación de CPU
Con más procesos listos que núcleos, alguien decide quién corre y por cuánto. Ningún algoritmo es el mejor: cada uno optimiza una métrica distinta y perjudica otra.
Para este tema conviene tener claro:Procesos e hilos
Hay cuatro núcleos y doscientos procesos listos. El planificador decide quién usa la CPU y por cuánto tiempo, cientos de veces por segundo. Es una de las decisiones más frecuentes del sistema, y no tiene una respuesta única porque no todos quieren lo mismo.
Las métricas se contradicen entre sí
Las métricas en juego se contradicen. El rendimiento es cuántos procesos se completan por unidad de tiempo. El tiempo de respuesta es cuánto tarda en reaccionar algo interactivo. El tiempo de retorno es cuánto tarda un trabajo completo. Y la equidad es que nadie quede postergado para siempre.
Optimizar respuesta implica cambiar de proceso seguido, y cada cambio cuesta: guardar y restaurar estado, y sobre todo perder el contenido útil de la caché. Optimizar rendimiento implica lo contrario.
Tres procesos que llegan juntos. A tarda 8 unidades, B tarda 2, C tarda 2.
Antes de seguir, predecí
Los clásicos y el dilema que muestran
Los algoritmos clásicos muestran el dilema. FIFO es simple y sufre el efecto convoy: un proceso largo adelante retrasa a todos los cortos. El más corto primero minimiza el tiempo de espera promedio —es demostrable— pero requiere saber cuánto va a durar cada uno, que no se sabe, y puede postergar indefinidamente a los largos.
Round robin reparte turnos de duración fija. Es equitativo y bueno para interactividad, y todo depende del tamaño del turno: muy corto, se gasta en cambios de contexto; muy largo, degenera en FIFO.
Prioridades según el comportamiento observado
Los sistemas reales usan prioridades con múltiples colas. La idea central es distinguir por comportamiento observado: un proceso que se bloquea seguido esperando E/S es probablemente interactivo y conviene atenderlo rápido; uno que consume su turno entero es de cálculo y puede esperar.
Las colas multinivel con realimentación hacen eso automáticamente: quien agota su turno baja de prioridad, quien se bloquea antes la mantiene. Y para que los de baja prioridad no queden olvidados, se los sube periódicamente: eso es el envejecimiento, y es lo que evita la inanición.
Equidad proporcional en los planificadores modernos
Los planificadores modernos de propósito general apuntan a la equidad proporcional: cada tarea recibe una fracción del procesador según su peso, y el planificador elige siempre a la que menos tiempo acumuló en relación a lo que le corresponde.
El valor de nice ajusta ese peso. Y existen clases de tiempo real para tareas que necesitan
garantías: ahí la prioridad es estricta y una tarea de esa clase puede monopolizar la CPU, que es
justamente lo que se quiere en control industrial y lo que hay que evitar en un servidor común.
La inversión de prioridades
Un problema sutil y famoso: la inversión de prioridades. Una tarea de prioridad alta espera un recurso que tiene una de prioridad baja, y esa baja no avanza porque tareas intermedias la desplazan. La alta queda bloqueada por las intermedias sin relación directa.
Le pasó a la sonda Mars Pathfinder en 1997, que se reiniciaba sola en Marte. La solución es la herencia de prioridad: quien posee el recurso hereda temporalmente la prioridad del que espera.
Con varios núcleos aparecen decisiones nuevas
Con varios núcleos aparecen decisiones nuevas. Mover una tarea a otro núcleo pierde su caché caliente, así que conviene afinidad: mantenerla donde estaba. Pero si un núcleo se satura y otro está libre, hay que balancear.
Y en procesadores con núcleos de rendimiento y de eficiencia, el planificador además decide en qué tipo de núcleo conviene cada tarea. La regla de fondo sigue siendo la misma: toda política favorece una métrica y perjudica otra, y elegir es decidir qué importa en ese sistema.
Lo que se ve desde una aplicación
Las métricas que se contradicen
| Métrica | Qué mide | Qué la mejora | Qué empeora a cambio |
|---|---|---|---|
| Rendimiento | procesos completados por unidad de tiempo | turnos largos | el tiempo de respuesta |
| Tiempo de respuesta | cuánto tarda en reaccionar lo interactivo | turnos cortos | el rendimiento, por los cambios de contexto |
| Tiempo de retorno | cuánto tarda un trabajo completo | el más corto primero | la equidad |
| Equidad | que nadie quede postergado | turnos rotativos | el promedio de espera |
Cierre
Rendimiento, respuesta, retorno y equidad no se optimizan juntos. Round robin da interactividad según el turno, las colas con realimentación clasifican por comportamiento y el envejecimiento evita la inanición. La inversión de prioridades se arregla heredando prioridad, y en multinúcleo se pelean afinidad y balanceo.
Autoevaluación
¿Lo entendiste?
Práctica