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

Tema 42

Proyecto: banco de pruebas de algoritmos

En los temas anteriores construiste simuladores individuales para cada algoritmo. Este proyecto reúne todos en un solo banco de pruebas: un simulador que ejecuta FCFS, SJF, SRTF, prioridades, Round Robin y MLFQ sobre la misma carga de trabajo y compara los resultados. Es el proyecto que cierra el bloque de algoritmos y prepara para el bloque de integración.

1. Objetivo del proyecto

El objetivo es construir un banco de pruebas (benchmark) que ejecute todos los algoritmos estudiados sobre la misma carga de trabajo y compare los resultados. Esto permite responder preguntas como:

El banco de pruebas es una herramienta de aprendizaje: permite experimentar con los algoritmos y ver sus diferencias en acción.

2. Arquitectura del banco de pruebas

El banco de pruebas tiene estas partes:

3. Los algoritmos a comparar

El banco de pruebas compara estos algoritmos:

AlgoritmoDescripciónParámetros
FCFSPrimero en llegar, primero en ser atendido.Ninguno.
SJFEl trabajo más corto primero (no apropiativo).Ninguno.
SRTFSJF con apropiación.Ninguno.
PrioridadesPor prioridad (no apropiativo).Prioridades.
Round RobinTurnos de igual duración.Quantum.
MLFQColas multinivel con retroalimentación.Quantums, refuerzo.

4. Las métricas a comparar

Para cada algoritmo, se calculan:

La tabla comparativa muestra estas métricas para todos los algoritmos, ordenados de mejor a peor.

5. Implementación

La implementación reutiliza las funciones de los temas anteriores. El controlador ejecuta todos los algoritmos sobre la misma carga:

benchmark.js
function benchmark(carga) {
    var resultados = {};
    resultados.fcfs = fcfs(carga);
    resultados.sjf = sjf(carga);
    resultados.srtf = srtf(carga);
    resultados.prioridades = prioridades(carga);
    resultados.rr = roundRobin(carga, quantum);
    resultados.mlfq = mlfq(carga);
    return resultados;
}

function comparar(resultados) {
    var tabla = [];
    for (var alg in resultados) {
        var p = promedios(resultados[alg]);
        tabla.push({ algoritmo: alg, respuesta: p.respuesta,
            espera: p.espera, retorno: p.retorno });
    }
    tabla.sort(function (a, b) { return a.espera - b.espera; });
    return tabla;
}

6. Interpretación de resultados

Los resultados típicos para una carga con procesos de duraciones variadas son:

La interpretación depende de qué métrica es más importante para el caso de uso.

7. Simulador interactivo

Este simulador ejecuta todos los algoritmos sobre la misma carga y muestra la tabla comparativa:

Simulador · banco de pruebas

AlgoritmoRespuesta prom.Espera prom.Retorno prom.

8. Resumen

9. Preguntas de repaso

Intenta responder cada una antes de abrir la respuesta.

1. ¿Qué es un banco de pruebas?

Un simulador que ejecuta varios algoritmos sobre la misma carga y compara los resultados.

2. ¿Por qué la carga debe ser la misma?

Para que la comparación sea válida: la diferencia se debe solo al algoritmo.

3. ¿Qué algoritmo minimiza el tiempo de espera?

SJF (o SRTF con llegadas distintas).

4. ¿Qué algoritmo minimiza el tiempo de respuesta?

Round Robin.

5. ¿Qué algoritmo es el más simple?

FCFS.

6. ¿Qué algoritmo ofrece el mejor compromiso?

MLFQ.

7. ¿Qué métricas se comparan?

Tiempo de respuesta, espera y retorno promedio.

8. ¿Por qué es útil un banco de pruebas?

Para experimentar con los algoritmos y ver sus diferencias en acción.

9. ¿Qué parámetro afecta a Round Robin en el banco?

El quantum.

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

El bloque 11 (integración y cierre).

Para practicar

  1. Implementa el banco de pruebas completo con todos los algoritmos.
  2. Añade un gráfico de barras comparativo.
  3. Experimenta con diferentes cargas de trabajo y observa qué algoritmo es mejor en cada caso.
  4. Añade el costo del cambio de contexto a Round Robin y MLFQ.
  5. Implementa la exportación a CSV de la tabla comparativa.
  6. Compara los resultados con las predicciones teóricas.