Mapa del syllabus
¿Qué vamos a aprender este semestre?
El curso está dividido en cuatro fases de ingeniería, diseñadas para llevarte desde la manipulación básica de memoria hasta la construcción de software de sistema concurrente.
Fase 1: Fundamentos y el metal (semanas 1-4)
En esta fase "romperemos" tu miedo a la terminal y al lenguaje C. Entenderás dónde termina el hardware y dónde empieza el software.
Arquitectura del computador, definiciones, interrupciones, modo usuario vs. modo kernel y llamadas al sistema (syscalls).
Punteros, gestión manual de memoria (stack vs. heap), estructuras de datos, Makefiles y depuración con GDB/Valgrind.
🎯 Hito de evaluación: Entregas del repositorio
ula-os-clings(Niveles 0-5).
Fase 2: Gestión de memoria y procesos (semanas 5-8)
Aquí desmitificaremos la "magia" detrás de la memoria dinámica. Dejarás de usar las herramientas del lenguaje para construir las tuyas propias.
Fragmentación interna/externa, listas libres (free lists), estrategias de asignación (Best-fit vs. First-fit) y memoria virtual.
El PCB (Process Control Block), ciclo de vida (fork, exec, wait) y la ilusión de la multitarea.
🚀 Proyecto 1: Allocador de memoria personalizado. Implementación desde cero de tus propias funciones
malloc,calloc,reallocyfree, gestionando el heap manualmente sin usar librerías estándar.
Fase 3: Concurrencia y control de recursos (semanas 9-12)
El filtro más difícil del semestre. Aprenderás a coordinar múltiples hilos y a auditar el consumo de recursos del sistema.
Condiciones de carrera, exclusión mutua (mutex), semáforos y prevención de deadlocks.
Algoritmos de planificación de CPU, lectura del sistema de archivos /proc y métricas de rendimiento.
🛠️ Proyecto 2: Herramienta de QoS (Quality of Service). Un monitor de sistema capaz de inspeccionar, limitar y reportar el uso de recursos de procesos en tiempo real.
Fase 4: Persistencia y redes (semanas 13-16)
Finalmente, conectaremos tu código con el mundo exterior: el disco duro y la red.
Sistemas de archivos (inodos), descriptores de archivo, sockets de red y protocolos de comunicación.
Programación defensiva, manejo de conexiones concurrentes y vulnerabilidades comunes en servidores.
🔥 Proyecto final: ULA High-Perf WebServer. Un servidor HTTP escrito en C capaz de servir archivos estáticos y manejar múltiples clientes concurrentes usando un Thread Pool.
Plan de evaluación
La nota definitiva se compone de la sumatoria de los hitos prácticos. El código es la única verdad.
| Actividad | Peso (%) | Descripción |
|---|---|---|
| Tereas (C-lings, Classroom) | 10% | Completar el 100% de los ejercicios del repositorio de práctica. |
| Proyecto 1 (Malloc) | 20% | Implementación funcional y eficiente de un gestor de memoria. |
| Proyecto 2 (QoS) | 25% | Herramienta de monitoreo y calidad de servicio. |
| Proyecto final (Server) | 40% | Servidor web HTTP concurrente y estable bajo carga. |
| Quices (Classroom) | 5% | Evaluaciones cortas sobre los temas vistos en clase. |