Simulador avanzado de memoria virtual desarrollado en C++20. Implementa paginación por demanda, el algoritmo de reemplazo adaptativo CAR (Clock with Adaptive Replacement), un despachador Round Robin para la planificación de procesos y una arquitectura Cliente-Servidor mediante sockets TCP POSIX. Cuenta con una Interfaz Gráfica interactiva estilizada con Catppuccin.
- Características Principales
- Requisitos del Sistema
- Instalación y Compilación
- Uso del Simulador
- Documentación Técnica
- Equipo de Desarrollo
- Licencia y Créditos
- Paginación por Demanda: Simulación del mapeo de direcciones lógicas a físicas mediante tablas de páginas y un mapa de bits global.
- Algoritmo CAR: Política híbrida que supera a LRU al mantener un equilibrio dinámico entre la recencia y la frecuencia de acceso utilizando historiales fantasma.
- Despacho Round Robin: Planificación equitativa de procesos basada en un quantum configurable, intercalando la ejecución de cadenas de referencia.
- Visualización en Tiempo Real (GUI): Interfaz en Qt6 que permite observar el estado de la memoria virtual, la tabla de páginas local y el log de aciertos/fallos paso a paso.
- Modo Red (Cliente-Servidor): Extensión que ejecuta el gestor en un servidor TCP multihilo, permitiendo a clientes remotos enviar procesos y recibir asíncronamente sus métricas.
| Componente | Requisito |
|---|---|
| Sistema Operativo | GNU/Linux (Arch Linux, Ubuntu 22.04+) o macOS |
| Compilador | GCC 13.0+ o Clang 16.0+ (soporte completo para C++20) |
| Framework Gráfico | Qt 6.4+ (qt6-base-dev y herramientas como qmake6) |
| Herramientas de Construcción | GNU Make |
Clona este repositorio y utiliza el script de construcción proporcionado para compilar tanto la interfaz gráfica como los binarios de red.
git clone https://github.com/GalekTato/memmanager.git
cd memmanager
# Dar permisos de ejecución al script
chmod +x build_all.sh
# Compilar todos los módulos (GUI, Servidor y Cliente)
./build_all.shEl script ejecutará qmake6 y make en los subdirectorios correspondientes, generando los ejecutables en las carpetas gui/ y network/.
El proyecto puede operarse de dos formas: localmente con la interfaz gráfica o mediante la terminal en modo cliente-servidor.
Ejecuta el simulador interactivo:
./gui/memmanager_guiFlujo de uso básico:
- En el panel PROCESOS, configura el Quantum y el Ciclo Reloj (recomendados:
5y3). - Crea un proceso asignando un PID, el número de páginas requeridas, y una cadena de referencias separada por comas (ej.
0,1,2,0,3). Presiona Crear y Asignar. - Haz clic en el botón ▶ Paso para avanzar la simulación instrucción por instrucción.
- Observa el estado en la "Memoria Virtual Global" y las traducciones. Al finalizar, se generará un reporte de métricas.
Este modo ejecuta la simulación en segundo plano.
Terminal 1 — Servidor:
Inicia el servidor especificando un puerto (por defecto 9000).
cd network
./memserver 9000Terminal 2 — Cliente:
Envía la solicitud de un proceso al servidor:
# Uso: ./memclient <host> <puerto> <pid> <num_páginas> <referencias>
cd network
./memclient 127.0.0.1 9000 100 10 0,1,2,0,1,4,5El repositorio incluye documentación exhaustiva dentro del directorio docs/:
- Reporte Técnico (PDF) / Código Fuente (LaTeX): Marco teórico, explicaciones detalladas del algoritmo CAR y análisis de mitigación de Thrashing.
- Diagrama UML (PDF): Diseño completo del modelo de clases del sistema.
- Manual Técnico (Markdown): Detalles de implementación y arquitectura de las clases principales (
MemoryManager,Process,Page).
| Nombre | GitHub |
|---|---|
| Gael Askary Razo Montañez | @GalekTato |
| Angel Hernandez Gonzalez | Angel Hernandez Gonzalez |
| José Gabriel Hernández Mejía | Jose Gabriel Hernández Mejía |
Este proyecto fue desarrollado de manera colaborativa para la materia de Sistemas Operativos II en la Benemérita Universidad Autónoma de Puebla (BUAP).
Distribuido bajo la licencia MIT. Consulta el archivo LICENSE para más información.
