No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-28 16:21:51 -04:00
data Improve technical report PDF 2026-08-28 14:50:47 -04:00
evidencia Update report with manual VM evidence 2026-08-28 16:21:51 -04:00
logs Improve technical report PDF 2026-08-28 14:50:47 -04:00
scripts Update report with manual VM evidence 2026-08-28 16:21:51 -04:00
src Add sistemas operativos lab report project 2026-08-28 14:33:12 -04:00
.gitignore Add sistemas operativos lab report project 2026-08-28 14:33:12 -04:00
informe-1-so.zip Upload files to "/" 2026-08-28 16:03:47 -04:00
informe.md Update report with manual VM evidence 2026-08-28 16:21:51 -04:00
informe.pdf Update report with manual VM evidence 2026-08-28 16:21:51 -04:00
README.md Add team members to lab report 2026-08-28 15:12:05 -04:00
requirements.txt Add sistemas operativos lab report project 2026-08-28 14:33:12 -04:00

Laboratorio Integrador Unidad 01 — Procesador Concurrente de Archivos

Integrantes y roles

Integrante Rol
Luis Vergara Ambiente, pruebas y evidencias
Benjamin Gonzales Versión secuencial y sistema de archivos
Dario Leal Concurrencia y sincronización
José Luna Integración, documentación e informe

Requisitos

  • Ubuntu Desktop 24.04 LTS de 64 bits
  • Python 3
  • Terminal GNU/Linux
  • htop y tree

Instalación recomendada:

sudo apt update
sudo apt upgrade -y
sudo apt install -y python3 python3-pip python3-venv git htop tree

Este proyecto no usa librerías externas de Python; solo librerías estándar.

Estructura

laboratorio_so_equipoXX/
├── README.md
├── requirements.txt
├── src/
│   ├── version_secuencial.py
│   ├── version_concurrente.py
│   └── version_sincronizacion_experimental.py
├── scripts/
│   ├── preparar_datos.py
│   └── medir_laboratorio.py
├── data/
│   ├── entrada/
│   ├── procesados/
│   ├── errores/
│   └── reportes/
├── logs/
│   └── sistema.log
├── evidencia/
│   ├── capturas/
│   ├── comandos_ejecutados.txt
│   └── mediciones.csv
└── informe.md

Preparar datos de prueba

Volumen pequeño:

python3 scripts/preparar_datos.py --limpiar --cantidad 3

Volumen grande:

python3 scripts/preparar_datos.py --limpiar --cantidad 100

Ejecutar versión secuencial

python3 scripts/preparar_datos.py --limpiar --cantidad 3
time python3 src/version_secuencial.py

Verificar:

find data -type f -printf '%p\n'
cat data/reportes/reporte_consolidado_secuencial.txt
cat logs/sistema.log

Ejecutar versión concurrente

python3 scripts/preparar_datos.py --limpiar --cantidad 3
time python3 src/version_concurrente.py --trabajadores 3

Para observar procesos mientras corre, usar una pausa artificial:

python3 scripts/preparar_datos.py --limpiar --cantidad 100
python3 src/version_concurrente.py --trabajadores 3 --pausa 3

En otra terminal:

ps -ef | grep version_concurrente
ps -o pid,ppid,stat,%cpu,%mem,rss,vsz,cmd -C python3
pstree -p
htop

Guardar capturas en evidencia/capturas/.

Mecanismo de concurrencia

La versión concurrente usa un patrón productor-consumidor:

  1. El hilo productor recorre data/entrada/*.txt.
  2. Cada ruta encontrada se agrega a una cola compartida queue.Queue.
  3. Tres o más trabajadores toman rutas desde la cola.
  4. Cada trabajador procesa un archivo, genera reporte y mueve el archivo.
  5. queue.Queue sincroniza el acceso a la cola.
  6. Lock protege recursos compartidos: logs/sistema.log y el diccionario totales.
  7. join() espera que todos los trabajos terminen antes de cerrar el programa.

Reproducir condición de carrera

Primero preparar 100 archivos:

python3 scripts/preparar_datos.py --limpiar --cantidad 100
python3 src/version_sincronizacion_experimental.py --modo sin-lock --trabajadores 8
cat data/reportes/reporte_consolidado_experimental_sin-lock.txt

Resultado esperado: puede aparecer CONDICION_DE_CARRERA_DETECTADA porque varios hilos actualizan el contador al mismo tiempo.

Luego corregir con Lock:

python3 scripts/preparar_datos.py --limpiar --cantidad 100
python3 src/version_sincronizacion_experimental.py --modo con-lock --trabajadores 8
cat data/reportes/reporte_consolidado_experimental_con-lock.txt

Resultado esperado: Archivos esperados: 100 y Archivos contados: 100.

Medir tiempo, memoria, disco y evidencias

Ejecutar medición automática:

python3 scripts/medir_laboratorio.py

Esto crea:

evidencia/mediciones.csv
evidencia/comandos_ejecutados.txt

Comandos manuales solicitados por el enunciado:

free -h
df -h
ps -o pid,ppid,stat,%cpu,%mem,rss,vsz,cmd -C python3
ls -lah data/entrada data/procesados data/reportes logs
du -h data logs

Archivos generados

  • Reportes individuales: data/reportes/reporte_<archivo>.txt
  • Reportes consolidados: data/reportes/reporte_consolidado_*.txt
  • Archivos procesados: data/procesados/
  • Errores: data/errores/
  • Log general: logs/sistema.log
  • Mediciones: evidencia/mediciones.csv

Notas importantes

  • No borrar logs/sistema.log, reportes ni mediciones antes de entregar.
  • Las capturas de ps, pstree y htop deben hacerse en la VM real del equipo.
  • El informe debe responder las preguntas del enunciado usando evidencias reales.