← Planificación de la CPU Bloque 11 · Integración y cierre · Tema 43 de 44

Tema 43

Proyecto: simulador contra sistema real

Los simuladores predicen el comportamiento de los algoritmos, pero ¿coinciden con la realidad? En este proyecto contrastarás las predicciones del simulador con mediciones hechas en Linux: ejecutarás procesos reales, medirás sus tiempos con las herramientas del sistema y compararás con lo que predice el simulador. Es el proyecto que valida el modelo y cierra el bloque de integración.

1. Objetivo del proyecto

El objetivo es validar el modelo del simulador contrastándolo con mediciones reales en Linux. Los pasos son:

  1. Generar una carga de trabajo. Usar el generador del simulador para crear una carga reproducible con una semilla fija. generar
  2. Medir en Linux. Ejecutar los procesos reales y medir sus tiempos (turnaround, espera, respuesta) con las herramientas del sistema. medir
  3. Simular. Ejecutar el mismo algoritmo en el simulador con la misma carga. simular
  4. Comparar. Contrastar las métricas del sistema real con las del simulador. comparar
  5. Analizar. Explicar las diferencias y validar el modelo. analizar

Este proyecto es la culminación del curso: valida todo lo aprendido y da confianza en el modelo.

2. Metodología

La metodología del proyecto es:

El experimento se repite varias veces para obtener resultados estadísticamente significativos.

3. Medir en Linux

Para medir en Linux, se siguen estos pasos:

  1. Compilar trabajo.c: gcc -std=c17 -Wall -Wextra -o trabajo trabajo.c. compilar
  2. Fijar a un CPU: taskset -c 0 para que todos los procesos compitan por el mismo CPU. fijar
  3. Ejecutar los procesos: lanzar todos a la vez con &. Usar T0 para sincronizar el origen de tiempo. ejecutar
  4. Medir: leer la salida de cada proceso (tiempo en CPU, espera en cola, turnos). medir
  5. Repetir: ejecutar varias veces y promediar. repetir

Los datos medidos se comparan con las predicciones del simulador. El programa trabajo.c reporta el tiempo de CPU (sum_exec_runtime) y la espera en la cola (schedstat segundo número), que son exactamente las métricas que calcula el simulador.

4. Simular la misma carga

Para simular la misma carga en el simulador:

  1. Generar la carga: usar el mismo generador con la misma semilla que en el experimento. generar
  2. Ejecutar FCFS: correr el algoritmo FCFS sobre la carga. ejecutar
  3. Calcular métricas: tiempo de respuesta, espera y retorno promedio. métricas
  4. Comparar: contrastar con las mediciones del sistema real. comparar

La carga debe ser la misma (mismos procesos, mismas ráfagas, mismas llegadas) para que la comparación sea válida.

5. Comparar resultados

La comparación se hace en una tabla:

MétricaSistema realSimuladorDiferenciaDiferencia %
Tiempo de espera promedioX msY msX - Y(X-Y)/Y × 100
Tiempo de retorno promedioX msY msX - Y(X-Y)/Y × 100
Tiempo de respuesta promedioX msY msX - Y(X-Y)/Y × 100
ThroughputX proc/sY proc/sX - Y(X-Y)/Y × 100

La diferencia porcentual indica qué tan bien el simulador predice el sistema real. Una diferencia del 10-20 % es aceptable; más del 50 % indica que el modelo necesita mejoras.

6. Por qué difieren

Las mediciones reales difieren del simulador por varios factores:

Estas diferencias son esperadas y no invalidan el modelo: el simulador captura el comportamiento cualitativo, no el cuantitativo exacto.

7. Análisis de las diferencias

El análisis de las diferencias es la parte más importante del proyecto. Para cada diferencia, se debe:

  1. Identificar la causa: ¿qué factor del sistema real no se modela en el simulador? causa
  2. Cuantificar el efecto: ¿cuánto contribuye cada factor a la diferencia? cuantificar
  3. Mejorar el modelo: ¿se puede añadir el factor al simulador para reducir la diferencia? mejorar
  4. Validar: ¿el modelo mejorado reproduce mejor los resultados? validar

Por ejemplo, si la diferencia se debe al overhead del cambio de contexto, se puede añadir un costo de cambio al simulador (como en el tema 22) y verificar si la diferencia se reduce.

El análisis es iterativo

El análisis de las diferencias es un proceso iterativo: identificar, cuantificar, mejorar, validar. Cada iteración mejora el modelo y reduce la diferencia.

8. Conclusiones

Las conclusiones típicas del proyecto son:

9. Simulador interactivo

Este simulador reproduce el experimento: genera una carga, simula FCFS y muestra las métricas predichas. Compáralas con las que medirías en Linux:

Simulador · validación de modelo

ProcesoLlegadaRáfagaInicio (sim)Fin (sim)Espera (sim)Retorno (sim)

10. Resumen

11. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué se valida en este proyecto?

El modelo del simulador, contrastándolo con mediciones reales en Linux.

2. ¿Qué herramienta se usa para medir en Linux?

trabajo.c, que reporta tiempo de CPU y espera en cola.

3. ¿Por qué se usa taskset?

Para fijar los procesos a un CPU, de modo que compitan por el mismo procesador.

4. ¿Por qué difieren las mediciones del sistema real?

Por overhead del sistema, latencia de despacho, cache effects, precisión del reloj y procesos del sistema.

5. ¿El simulador captura el comportamiento cuantitativo exacto?

No. Captura el comportamiento cualitativo (patrones), no los valores absolutos.

6. ¿Es útil el simulador a pesar de las diferencias?

Sí. La comparación relativa (qué algoritmo es mejor) se mantiene.

7. ¿Qué se mide con /proc/PID/schedstat?

Tiempo en CPU, tiempo en cola y número de turnos.

8. ¿Qué conclusión se puede sacar del proyecto?

El simulador es útil para comparar algoritmos, aunque los valores absolutos difieran.

9. ¿Por qué es importante la validación?

Da confianza en el modelo y ayuda a entender sus limitaciones.

10. ¿Qué bloque del curso cierra este proyecto?

El bloque 11 (integración y cierre).

11. ¿Qué factor del sistema real no se modela en el simulador?

El overhead del sistema, la latencia de despacho, los cache effects y los procesos del sistema.

12. ¿Cómo se puede mejorar el modelo?

Añadiendo el costo del cambio de contexto, el overhead del sistema y otros factores.

Para practicar

  1. Ejecuta el experimento completo y compara con el simulador.
  2. Analiza las diferencias y explica cada una.
  3. Añade el costo del cambio de contexto al simulador y verifica si mejora la coincidencia.
  4. Repite el experimento con nice distinto y compara.
  5. Investiga cómo se miden los tiempos en el núcleo de Linux.
  6. Documenta las conclusiones del proyecto.
  7. Modifica el simulador para incluir el overhead del sistema como parámetro.