-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Exploración, optimización y seguridad
Objetivos del proyecto
- Optimización y seguridad en la gestión de memoria: Ampliar y optimizar la biblioteca de gestión de memoria para reducir la fragmentación y aumentar la eficiencia.
- Manejo de filesystems: Implementar una funcionalidad de exploración de directorios en busca de archivos de configuración importantes para el sistema.
- Integración de métricas de memoria en el sistema de monitoreo: Exponer métricas del uso de memoria optimizada en el sistema de monitoreo desarrollado previamente y visualizarlas en Grafana.
- Alcanzar al menos un 5% de cobertura de testing: Escribir pruebas que cubran al menos el 5% del código, asegurando la calidad y fiabilidad del proyecto.
- Mejorar el pipeline de CI/CD: Implementar GitHub Actions para la integración continua y el checkeo (cppcheck) del código.
Actividades
1. Optimización del asignador de memoria existente
A partir del código base proporcionado, implementa mejoras en la gestión de memoria:
- Compactación de bloques libres: Mejora la función
fusionpara realizar una compactación automática en cada llamada afree, minimizando la fragmentación. - Verificación de consistencia del heap: Extiende
check_heap()para detectar inconsistencias en el uso de memoria, como bloques libres adyacentes no fusionados o bloques asignados con tamaños inválidos. - Análisis de memoria: Implementa una función
memory_usage()que reporte el tamaño total de bloques asignados y la cantidad de memoria libre. - Registro detallado de eventos: Agrega un registro de operaciones que incluya cada llamada a
malloc,calloc,free, yrealloc, permitiendo auditar el uso de memoria.
2. Mejora de políticas de asignación de memoria
Amplía la funcionalidad de selección de políticas de asignación de bloques:
- Worst Fit: Implementa una opción de asignación de memoria usando el algoritmo Worst Fit. Esta política se selecciona mediante
set_method(2), yfind_block()debe identificar el bloque más grande disponible que satisfaga la solicitud de tamaño. - Evaluación de eficiencia: Implementa un test que mida la eficiencia de las políticas (First Fit, Best Fit, Worst Fit) en términos de fragmentación y velocidad de asignación.
3. Exploración del filesystem y búsqueda de configuraciones
Desarrolla una función que navegue en el sistema de archivos en busca de configuraciones críticas:
- Listar directorios y buscar archivos específicos: Implementa un comando en la shell personalizada para listar archivos de configuración en un directorio específico.
- Búsqueda recursiva en directorios: Realiza una búsqueda en subdirectorios para encontrar archivos con un formato específico (por ejemplo,
.configo.json). - Lectura y extracción de datos de configuración: Extrae datos de archivos encontrados y muestra su contenido en la shell, simulando cómo el sistema lee configuraciones importantes.
Ejemplo de salida de la función de exploración de filesystem
Explorando el directorio: /ruta/al/directorio en busca de archivos '.config'
Archivo de configuración encontrado: /ruta/al/directorio/config1.config
Contenido de /ruta/al/directorio/config1.config:
# Configuración importante
clave=valor
Archivo de configuración encontrado: /ruta/al/directorio/subdir/config3.config
Contenido de /ruta/al/directorio/subdir/config3.config:
# Otra configuración
opcion=si4. Exposición de métricas de uso de memoria y monitoreo en Grafana
Amplía el sistema de monitoreo para que capture y reporte métricas avanzadas de uso de memoria:
- Tasa de fragmentación: Calcula y expón un valor de fragmentación de memoria.
- Uso de políticas de asignación: Registra la frecuencia de cada política de asignación (First Fit, Best Fit, Worst Fit) y reporta cuál es la más eficiente.
- Integración en Grafana: Configura un nuevo panel en Grafana para visualizar el uso de memoria optimizado, permitiendo observar cómo las mejoras afectan el rendimiento.
Psss... abre aquí sólo si aceptas un desafío
5. El Misterio
Nuestros exploradores encontraron un antiguo pendrive en una sala de servidores abandonada. Los líderes del refugio creen que su contenido es de vital importancia para la supervivencia de todos, pero el acceso está cifrado. En su interior, encontraron solo un pendrive que tiene un archivo de texto, secret.txt, que contiene un mensaje codificado. Se sospecha que el mensaje contiene información crítica, pero nadie ha logrado descifrarlo.
Para añadir a la confusión, en la pared de la sala de servidores había una inscripción críptica que decía:
Si a %0.3pi sumas 0.10 y multiplicas por 100, la verdad se revelará.
La única ayuda que podemos ofrecerte es este documento que encontramos en los servidores
Los desarrolladores que trabajaron en esos servidores, no eran muy... avispados y su código puede que tenga errores. Por favor, ten cuidado, y paciencia para arreglar los errores que puedas encontrar.
Preguntas para el informe
- ¿Cuáles son las ventajas y desventajas de las políticas de asignación de memoria First Fit, Best Fit y Worst Fit en términos de eficiencia y fragmentación?
- ¿Cómo ayuda la compactación de bloques libres a reducir la fragmentación en un sistema de memoria? Describe el proceso implementado.
- Describe el funcionamiento y la utilidad de las funciones
mmapymunmapen la gestión de memoria avanzada. ¿Cuándo es más conveniente usarlas en lugar desbrk? - ¿Por qué es importante monitorear la tasa de fragmentación de memoria en un sistema con recursos limitados?
- ¿Qué herramientas de debugging y análisis dinámico aprendiste a utilizar en este proyecto?
Evaluación
La evaluación se basará en:
- Funcionalidad: Cumplimiento de todos los requisitos especificados.
- Calidad del Código: Legibilidad, organización y adherencia a buenas prácticas.
- Integración: Correcta interacción entre la shell y el programa de monitoreo.
- Uso de Herramientas: Implementación efectiva de CMake.
- Testing: Cobertura de pruebas y calidad de los tests.
- Documentación: Calidad y claridad de la documentación generada.
- Creatividad: Valoración de funcionalidades adicionales o mejoras implementadas.
- Informe: Calidad y claridad de las respuestas a las preguntas planteadas.
- Misterio: Descifrado del código oculto y explicación de la solución.
- Entrega: Cumplimiento de los plazos y la estructura de entrega.
- CI/CD: Uso de GitHub Actions para la integración continua.