1. Resumen por bloques
| Bloque | Temas | Lo que aprendiste |
|---|---|---|
| 1. Por qué hay que planificar | 1-5 | El problema de la planificación, ráfagas, multiprogramación, planificador y despachador, apropiación. |
| 2. Las métricas | 6-9 | Criterios de comparación, turnaround, espera, respuesta, Gantt, modelado en JavaScript. |
| 3. FCFS | 10-12 | El algoritmo más simple, efecto convoy, simulador de FCFS. |
| 4. SJF | 13-16 | El trabajo más corto primero, SRTF, predicción de ráfagas, simulador de SJF/SRTF. |
| 5. Prioridades | 17-19 | Prioridades estáticas y dinámicas, inanición, envejecimiento, simulador por prioridades. |
| 6. Round Robin | 20-23 | El quantum, elegir el quantum, costo del cambio de contexto, simulador de RR. |
| 7. Colas multinivel | 24-27 | Colas multinivel, MLFQ, reglas, trampas, simulador de MLFQ. |
| 8. Multiprocesadores | 28-31 | AMP/SMP, cola global vs por núcleo, afinidad, balanceo, NUMA, simulador multiprocesador. |
| 9. Tiempo real | 32-35 | Sistemas de tiempo real, RM, EDF, simulador de tiempo real, tiempo real en Linux. |
| 10. El planificador de Linux | 36-41 | Clases y políticas, nice, CFS, vruntime, árbol y plazos, simulador de CFS, observar el planificador. |
| 11. Integración y cierre | 42-44 | Banco de pruebas, simulador vs sistema real, cierre. |
2. Qué dominas ahora
Al terminar este curso, dominas:
- Los algoritmos clásicos: FCFS, SJF, SRTF, prioridades, Round Robin, MLFQ. Sabes cómo funcionan, sus propiedades, ventajas, desventajas y cuándo usar cada uno.
- Las métricas: tiempo de retorno, espera y respuesta. Sabes calcularlas a mano, en C y en JavaScript.
- Los simuladores: has programado simuladores en JavaScript para cada algoritmo, con Gantt y tabla de métricas.
- Linux: conoces las clases de planificación, el nice, CFS, el vruntime, el árbol rojinegro y las herramientas de observación.
- Tiempo real: entiendes RM, EDF, SCHED_FIFO, SCHED_RR y SCHED_DEADLINE, y la inversión de prioridades.
- Multiprocesadores: entiendes la afinidad, el balanceo, NUMA y los dominios de planificación.
3. Habilidades adquiridas
- Calcular planificaciones a mano: diagramas de Gantt, métricas, planificabilidad.
- Programar simuladores: en JavaScript, con modelo de datos, generador, algoritmo y vista.
- Observar el planificador: con ps, top, perf, /proc, chrt, taskset, vmstat, numactl.
- Analizar sistemas reales: identificar la clase, la prioridad, el vruntime, la topología.
- Comparar algoritmos: sobre la misma carga, con métricas cuantitativas.
- Validar modelos: contrastar simuladores con mediciones reales.
4. Conceptos clave
Los conceptos fundamentales del curso son:
- Ráfaga de CPU: período continuo de ejecución. La unidad de trabajo del planificador.
- Cola de listos: donde esperan los procesos listos para ejecutarse.
- Tiempo de retorno: tiempo total en el sistema (llegada a terminación).
- Tiempo de espera: tiempo en la cola de listos.
- Tiempo de respuesta: tiempo hasta la primera ejecución.
- Quantum: duración máxima de un turno en Round Robin.
- vruntime: tiempo virtual en CFS, acumulado a velocidad inversamente proporcional al peso.
- Afinidad de caché: tendencia a ejecutarse en el mismo núcleo.
- Plazo (deadline): instante antes del cual una tarea debe terminar.
- Inanición: un proceso espera indefinidamente.
- Envejecimiento: aumentar la prioridad con el tiempo para evitar la inanición.
5. Fórmulas esenciales
| Fórmula | Significado |
|---|---|
| Ti = Fi − Ai | Tiempo de retorno. |
| Wi = Ti − Bi | Tiempo de espera (sin E/S). |
| Ri = Si − Ai | Tiempo de respuesta. |
| Ti = Bi + Ii + Wi | Descomposición del turnaround. |
| Uso de CPU = 1 − pn | Utilización con multiprogramación. |
| Tn+1 = α·tn + (1−α)·Tn | Promedio exponencial. |
| vruntime += t × (1024/peso) | Acumulación de vruntime en CFS. |
| prio = 120 + nice | Prioridad interna a partir del nice. |
| U = Σ Ci/Pi | Utilización total de tareas periódicas. |
| U ≤ n·(21/n − 1) | Planificabilidad de RM. |
| U ≤ 1 | Planificabilidad de EDF. |
| Overhead = c/(c+q) × 100 % | Overhead de cambios de contexto. |
6. Próximos pasos
Después de este curso, puedes:
- Profundizar en Linux: leer el código fuente del planificador (kernel/sched/). El código de CFS está en
fair.c, el de EEVDF en el mismo archivo (desde 6.6). - Experimentar: modificar los simuladores, añadir nuevos algoritmos, cambiar parámetros.
- Medir: usar perf, cyclictest, numastat y otras herramientas para analizar sistemas reales.
- Contribuir: participar en el desarrollo del núcleo de Linux (mailing list, patches).
- Estudiar más: el próximo curso es Concurrencia y Sincronización.
7. Puente al próximo curso
El próximo curso es Concurrencia y Sincronización. En este curso estudiaste cómo el planificador reparte la CPU entre procesos. En el próximo, estudiarás qué ocurre cuando esos procesos comparten datos.
Los temas del próximo curso incluyen:
- Condiciones de carrera: qué ocurre cuando dos procesos acceden a los mismos datos simultáneamente.
- Secciones críticas: cómo proteger el acceso a datos compartidos.
- Mutexes y semáforos: mecanismos de sincronización.
- Monitores: abstracciones de alto nivel para sincronización.
- Deadlocks: qué ocurre cuando los procesos se bloquean mutuamente.
- Problemas clásicos: productor-consumidor, lectores-escritores, cena de los filósofos.
La planificación de la CPU y la sincronización son complementarias: el planificador decide quién se ejecuta, y la sincronización decide cómo se coordinan los procesos que se ejecutan.
En este curso viste cómo el planificador reparte la CPU. En el próximo, verás qué ocurre cuando los procesos que se ejecutan necesitan compartir datos. La sincronización es el complemento necesario de la planificación: sin ella, los procesos no pueden cooperar de forma segura.
8. Agradecimiento
Gracias por completar el curso de Planificación de la CPU. Has recorrido un largo camino: desde entender por qué hay que planificar la CPU hasta simular y observar cómo planifica Linux. Espero que este curso te haya dado las herramientas para entender y analizar los sistemas que usas cada día.
El próximo curso te espera. ¡Hasta pronto!
9. Resumen
- El curso cubre 44 temas en 11 bloques.
- Dominas los algoritmos clásicos, las métricas, los simuladores y el planificador de Linux.
- Tienes las habilidades para calcular, programar, observar y analizar planificaciones.
- El próximo curso es Concurrencia y Sincronización.
10. Preguntas de repaso
Intenta responder cada una antes de abrir la respuesta.
1. ¿Cuántos temas tiene el curso?
44 temas en 11 bloques.
2. ¿Qué algoritmo minimiza el tiempo de espera promedio?
SJF (con llegadas en 0) o SRTF (con llegadas distintas).
3. ¿Qué algoritmo minimiza el tiempo de respuesta?
Round Robin.
4. ¿Qué planificador usa Linux para la clase fair?
CFS (Completely Fair Scheduler), y EEVDF desde Linux 6.6.
5. ¿Qué es el vruntime?
El tiempo virtual en CFS, acumulado a velocidad inversamente proporcional al peso.
6. ¿Qué es la afinidad de caché?
La tendencia de un proceso a ejecutarse en el mismo núcleo para aprovechar la caché.
7. ¿Qué es un sistema de tiempo real?
Un sistema en el que la corrección del resultado depende del tiempo.
8. ¿Qué es la inanición?
Un proceso que espera indefinidamente porque siempre hay otros con preferencia.
9. ¿Qué es el envejecimiento?
Aumentar la prioridad de un proceso a medida que espera.
10. ¿Cuál es el próximo curso?
Concurrencia y Sincronización.