No description
- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| data | ||
| evidencia | ||
| logs | ||
| scripts | ||
| src | ||
| .gitignore | ||
| informe-1-so.zip | ||
| informe.md | ||
| informe.pdf | ||
| README.md | ||
| requirements.txt | ||
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
htopytree
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:
- El hilo productor recorre
data/entrada/*.txt. - Cada ruta encontrada se agrega a una cola compartida
queue.Queue. - Tres o más trabajadores toman rutas desde la cola.
- Cada trabajador procesa un archivo, genera reporte y mueve el archivo.
queue.Queuesincroniza el acceso a la cola.Lockprotege recursos compartidos:logs/sistema.logy el diccionariototales.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,pstreeyhtopdeben hacerse en la VM real del equipo. - El informe debe responder las preguntas del enunciado usando evidencias reales.