Rodolfo Pilas
bloger podcaster devops sysadmin profesor father
¿cómo puede el sistema atender primero lo urgente sin dejar a nadie esperando para siempre?
Hoy: el planificador debe reconocer que los procesos tienen necesidades distintas y cambiar su decisión cuando la experiencia muestra que una regla está fallando.
| Política | Pregunta que responde | Riesgo que deja abierto |
|---|---|---|
| FCFS | ¿Quién llegó primero? | Un trabajo largo puede retrasar a todos. |
| SJF / SRTF | ¿Quién tiene menos CPU por delante? | Hace falta conocer o estimar la ráfaga. |
| Round Robin | ¿Cómo repartimos turnos? | Los cambios y el tamaño de q importan. |
Ahora agregamos tres preguntas:
No se sabe con certeza cuánto CPU necesitará un proceso
Al comienzo, los tres parecen simplemente procesos listos. La diferencia se revela mientras ejecutan.
¿Cómo puede el sistema favorecer una respuesta rápida sin postergar indefinidamente los trabajos largos?
¿quién debe avanzar primero?
Una política de prioridad asigna a cada proceso un nivel. En cada decisión:
En nuestro convenio, un número menor significa una prioridad mayor. Un proceso bloqueado no compite, aunque tenga la prioridad más alta.
La misma prioridad puede combinarse con decisiones distintas:
| Variante | ¿Cuándo se revisa la prioridad? | ¿Puede desalojar? |
|---|---|---|
| Prioridad no apropiativa | Cuando termina o se bloquea el proceso actual. | No. |
| Prioridad apropiativa | También cuando llega un proceso de mayor prioridad. | Sí. |
Para reproducir una traza debemos declarar además:
Supongamos que un proceso L está listo con prioridad baja. Una corriente de procesos de prioridad alta llega antes de que L pueda ejecutar.
Si siempre aparece alguien favorecido por la regla, L puede permanecer listo durante un tiempo sin cota conocida.
Eso es inanición (starvation):
el proceso sigue siendo elegible, pero la política lo posterga repetidamente.
No es lo mismo que interbloqueo: en la inanición el proceso espera una decisión de CPU; en el interbloqueo los procesos esperan recursos que forman un ciclo.
El envejecimiento modifica gradualmente la prioridad efectiva de un proceso mientras espera.
Una especificación posible es:
donde W(t) es el tiempo acumulado en la cola de listos y a es la tasa de envejecimiento.
La fórmula no es universal. Una política reproducible debe indicar:
W;a;La prioridad efectiva en el instante t es el máximo entre la prioridad mínima y la prioridad base menos a por el tiempo de espera acumulado.
P_base = 10P_min = 1a = 0,25⏸ Pausa de trabajo en clase · 20 minutos
Abrir E6 en WA y seguir la consigna completa allí. Registren la traza, la regla de selección y una justificación breve del progreso o la postergación.
¿qué ocurre cuándo interviene un mutex?
Hay otro modo de que una prioridad deje de reflejar la urgencia:
Aunque H sea el proceso más urgente, L no puede ejecutar para liberar el mutex porque M lo desplaza. El orden efectivo queda invertido.
Se produce la Inversión de la prioridad!
Con herencia de prioridad, cuando H se bloquea esperando a L:
La herencia reduce la demora causada por la inversión. No reemplaza una disciplina de adquisición de recursos y no demuestra por sí sola que no exista interbloqueo.
¿cómo aprende la política del comportamiento?
Al comenzar un proceso, el sistema no conoce con certeza su próxima ráfaga. Puede aprender de sus eventos:
La realimentación convierte esas observaciones en movimientos de prioridad. La política deja de ser una etiqueta permanente y pasa a ser una hipótesis que se revisa.
Multilevel Queue (MLQ): cada proceso se asigna a una cola y permanece allí. Las colas pueden representar clases de servicio diferentes.
Multilevel Feedback Queue (MLFQ): el proceso puede subir o bajar según el comportamiento observado y las reglas de la política.
En ambos casos hay varias colas. La diferencia central es si la pertenencia puede cambiar.
Una MLFQ concreta debe declarar, como mínimo:
Una configuración frecuente es usar:
Es una familia de diseños, no una receta única.
Una variante típica puede seguir esta historia:
Cada paso es una decisión de diseño. Por eso una respuesta correcta siempre debe escribir las reglas antes de dibujar el Gantt.
⏸ Pausa de trabajo en clase · 10 minutos
Abrir E7 en WA. Produzcan la traza con las colas y anoten el motivo de cada movimiento.
Al final, propongan en una frase una regla de ascenso que pueda evitar la espera indefinida en una cola inferior.
Una política puede ser rápida para algunos procesos y aun así ser incorrecta como política general si no garantiza progreso.
Para evaluar una regla de ascenso, preguntar:
La palabra justa debe traducirse en una propiedad observable.
¿toda espera significa lo mismo?
Un proceso puede estar:
| Estado | Espera por | ¿Compite por la CPU? |
|---|---|---|
| Listo | una oportunidad de ejecución | Sí |
| Ejecutando | completar su ráfaga actual | Ya la tiene |
| Bloqueado | terminar una E/S u otro evento | No |
El retorno incluye el tiempo total desde la llegada hasta el fin, incluso los bloqueos. La espera de CPU cuenta el tiempo en listo; el tiempo bloqueado explica otra parte de la historia.
⏸ Pausa de trabajo en clase · 15 minutos en dos bloques
Abrir E8 en WA. Dibujen las líneas de CPU y E/S, marquen los períodos listo y bloqueado y calculen las métricas solicitadas.
La actividad comienza ahora y vamos a avanzar un poco más en el tema...
¿qué muestra una carga concreta?
Una política no se evalúa solo por su nombre. Se evalúa con una carga concreta y una pregunta concreta.
Antes de ejecutar, declarar:
Después, comparar al menos dos políticas y buscar también quién queda perjudicado.
⏸ Pausa de trabajo en clase · 25 minutos
Abrir E9 en WA. Elijan un escenario, una carga pequeña y dos políticas. Predigan una diferencia, ejecútenla con Python y comparen respuesta media y retorno medio.
Entreguen una recomendación breve que incluya:
El simulador permite reproducir políticas de CPU sobre un CSV con columnas
id,llegada,rafaga,prioridad.
python3 simulador.py --archivo carga.csv --algoritmo FCFS
python3 simulador.py --archivo carga.csv --algoritmo RR --quantum 2
python3 simulador.py --archivo carga.csv --comparar
La salida ayuda a revisar la traza, las métricas por proceso, los promedios, los cambios entre procesos, la utilización y la productividad.
Implementa FCFS, SJF, SRTF, Round Robin y prioridad fija. No implementa E/S, envejecimiento, MLFQ, costes de cambio ni múltiples núcleos: E6, E7 y E8 se razonan con sus modelos propios.
¿qué política podemos definir con fundamento?
Una recomendación defendible relaciona cuatro elementos:
La respuesta a la pregunta guía no es un nombre de algoritmo. Es una explicación de cómo combinar reglas, sincronización y planificación para administrar la CPU con eficiencia y progreso.
Resolver en WA las preguntas seleccionadas del cuestionario de cierre.
Usen la retroalimentación para anotar un concepto que todavía necesite revisión.
El planificador administra una historia que cambia:
No existe una política mejor para toda carga. Existe una política defendible cuando sus reglas, objetivos y consecuencias están claros.
La MLFQ suele presentarse como una familia de políticas con varias colas, quanta por nivel, movimientos según el uso de CPU y mecanismos de ascenso para evitar inanición. La configuración concreta debe declarar sus reglas y sus prioridades.
Referencia de consulta: MLFQ · CPU Scheduling
By Rodolfo Pilas