
Curso de programación de sistemas en Linux
Profundiza en el kernel de Linux y aprende a escribir programas en C de grado producción que se comuniquen directamente con el sistema operativo. Este curso cubre entrada/salida de archivos, procesos, señales, IPC, gestión de memoria, sockets y multihilo desde cero. Cada tema se fundamenta en llamadas al sistema reales, código funcional y los modelos mentales que los profesionales usan a diario.
Lo que vas a aprender:
Desarrollarás una comprensión precisa de cómo Linux gestiona procesos, memoria, archivos y conexiones de red a nivel de llamadas al sistema. Escribirás programas en C que utilicen las API de POSIX para entrada/salida de archivos, comunicación entre procesos y redes basadas en sockets. Implementarás aplicaciones multihilo y eliminarás condiciones de carrera usando las primitivas de sincronización de pthreads. Aplicarás herramientas avanzadas como GDB, strace, Valgrind, AddressSanitizer, perf e io_uring. También cubrirás las primitivas de seguridad de Linux como namespaces, seccomp y capacidades. Al finalizar, tendrás las habilidades para diseñar, depurar y optimizar software de sistemas que se ejecute de manera confiable en entornos de producción Linux.
Cómo estudias de forma práctica Curso de programación de sistemas en Linux
Cómo practicas Curso de programación de sistemas en Linux
Para ti que tienes una empresa y quieres capacitar a tu equipo
En Dedika para empresas, el curso incluye ejercicios y ejemplos adaptados a tu propio negocio y a las necesidades de tu empresa.
Contenido del curso
8 Capítulos • 40 LeccionesDuración entre 4 y 360 horas (tú decides)
Capítulo 1OcultarOcultar detallesVer detallesFundamentos de Programación de Sistemas Linux
Fundamentos de Programación de Sistemas Linux
Lección 1 • Introducción a las Llamadas al Sistema
Demuestra cómo los programas de usuario invocan servicios del kernel a través de llamadas al sistema usando envoltorios de glibc y syscall crudo. Conecta las funciones de la biblioteca C con sus operaciones subyacentes del kernel.
Lección 2 • Arquitectura de Linux y Visión General del Kernel
Cubre el espacio kernel vs. espacio usuario, diseño de kernel monolítico y abstracción de hardware. Establece el marco conceptual del que dependen todos los temas de programación subsiguientes.
Lección 3 • Compilación, Enlazado y Carga
Explica el pipeline completo de herramientas desde el código fuente hasta el ejecutable, incluyendo enlazado estático y dinámico. Prepara a los estudiantes para diagnosticar errores de construcción y entender la estructura binaria.
Lección 4 • Fundamentos del Lenguaje C para Trabajo de Sistemas
Revisa punteros, disposición de memoria, structs y operaciones a nivel de bits críticas para el código de sistemas. Une el conocimiento general de C con los patrones de bajo nivel utilizados a lo largo del curso.
Lección 5 • Configuración del Entorno de Desarrollo
Configura un entorno de desarrollo Linux con GCC, GDB, Make y bibliotecas esenciales. Asegura que cada estudiante tenga una línea base de construcción reproducible antes de escribir cualquier código.
Capítulo 2OcultarOcultar detallesVer detallesE/S de Archivos y la Capa VFS
E/S de Archivos y la Capa VFS
Lección 1 • Operaciones de Directorios y Metadatos
Enseña stat(), recorrido de directorios y gestión de enlaces incluyendo enlaces duros y simbólicos. Permite a los programas inspeccionar y manipular la estructura del sistema de archivos programáticamente.
Lección 2 • Operaciones de Archivo POSIX
Cubre open(), read(), write(), lseek() y close() con todos los flags y modos relevantes. Enseña patrones de uso correctos y trampas comunes como lecturas y escrituras parciales.
Lección 3 • Archivos Mapeados en Memoria
Demuestra mmap() para mapear archivos en el espacio de direcciones del proceso para E/S rápida y datos compartidos. Conecta la E/S de archivos con los conceptos de memoria virtual introducidos en capítulos posteriores.
Lección 4 • Descriptores de Archivo y Archivos Abiertos
Explica la tabla de archivos abiertos, los enteros descriptores de archivo y las estructuras de datos del kernel detrás de ellos. Fundamenta todo el trabajo de E/S subsiguiente en un modelo preciso de cómo el kernel rastrea los archivos abiertos.
Lección 5 • Operaciones Avanzadas de Archivo
Introduce E/S dispersa-reunida, truncamiento de archivos y perforación de huecos para archivos dispersos. Extiende las habilidades básicas de E/S a escenarios de alto desempeño y eficientes en almacenamiento.
Capítulo 3OcultarOcultar detallesVer detallesProcesos: Creación, Control y Terminación
Procesos: Creación, Control y Terminación
Lección 1 • Atributos e Internos del Proceso
Examina PID, PPID, UID, GID y los campos del descriptor de proceso que el kernel mantiene. Proporciona el vocabulario y modelo de datos necesarios para controlar procesos programáticamente.
Lección 2 • Espera y Recolección de Hijos
Enseña wait(), waitpid() y waitid() para recolectar el estado de salida de los hijos y prevenir zombies. Asegura que los estudiantes escriban programas multiproceso libres de fugas.
Lección 3 • Ejecución de Programas con exec()
Explica la familia exec, el paso de argumentos y entorno, y lo que se preserva a través de exec. Permite a los estudiantes construir shells y lanzadores de procesos que reemplazan imágenes de proceso correctamente.
Lección 4 • Creación de Procesos con fork()
Cubre la semántica de copia al escribir, el manejo del valor de retorno y la herencia de recursos después de fork(). Construye la base para todos los patrones de programación multiproceso en el curso.
Lección 5 • Credenciales y Privilegios del Proceso
Cubre los bits setuid/setgid, conjuntos de capacidades y la reducción de privilegios para un diseño de proceso seguro. Prepara a los estudiantes para escribir programas que manejen permisos elevados de forma segura.
Capítulo 4OcultarOcultar detallesVer detallesSeñales: Entrega, Manejo y Enmascaramiento
Señales: Entrega, Manejo y Enmascaramiento
Lección 1 • Conceptos de Señales y Señales Estándar
Introduce números de señal, disposiciones predeterminadas y el mecanismo de entrega del kernel. Establece el modelo conceptual requerido antes de escribir cualquier código de manejo de señales.
Lección 2 • Máscaras de Señales y Bloqueo
Enseña sigprocmask(), manipulación de sigset_t y protección de secciones críticas mediante bloqueo. Permite a los estudiantes prevenir carreras de señales en operaciones de múltiples pasos.
Lección 3 • Programación Async-Signal-Safe
Identifica funciones async-signal-safe y patrones para escribir manejadores correctos y reentrantes. Previene los errores sutiles que surgen al llamar funciones inseguras dentro de los manejadores.
Lección 4 • Señales en Tiempo Real y signalfd
Cubre señales POSIX en tiempo real, garantías de encolamiento y la interfaz signalfd() para manejo síncrono. Extiende las habilidades de señales a arquitecturas de alta confiabilidad y orientadas a eventos.
Lección 5 • Instalación de Manejadores de Señales
Cubre la estructura sigaction(), SA_flags y las diferencias con la función legacy signal(). Enseña la forma correcta y portable de instalar manejadores que evitan condiciones de carrera.
Capítulo 5OcultarOcultar detallesVer detallesComunicación Entre Procesos
Comunicación Entre Procesos
Lección 1 • Colas de Mensajes POSIX
Enseña mq_open(), mq_send(), mq_receive() y entrega de mensajes basada en prioridad. Proporciona una alternativa estructurada y tipada a los pipes de flujo de bytes para IPC orientado a mensajes.
Lección 2 • Comparación y Selección de Mecanismos IPC
Analiza las ventajas y desventajas de rendimiento, latencia, complejidad y persistencia en todos los tipos de IPC. Equipa a los estudiantes para tomar decisiones arquitectónicas informadas en diseños de sistemas reales.
Lección 3 • Semáforos POSIX
Cubre semáforos con nombre y sin nombre, sem_wait/sem_post y patrones de exclusión mutua. Proporciona la capa de sincronización necesaria para usar memoria compartida de forma segura.
Lección 4 • Pipes y FIFOs
Cubre pipes anónimos, creación de FIFOs y el patrón productor-consumidor para procesos relacionados y no relacionados. Introduce IPC de flujo de bytes unidireccional como la primitiva de coordinación más simple.
Lección 5 • Memoria Compartida POSIX
Demuestra shm_open(), ftruncate() y mmap() para crear regiones de memoria compartida entre procesos. Permite el intercambio de datos de alto rendimiento sin copia y prepara a los estudiantes para la sincronización basada en semáforos.
Capítulo 6OcultarOcultar detallesVer detallesGestión de Memoria y Memoria Virtual
Gestión de Memoria y Memoria Virtual
Lección 1 • Uso Avanzado de mmap()
Demuestra MAP_ANONYMOUS, MAP_FIXED, huge pages y madvise() para ajuste de desempeño. Extiende las habilidades de mmap() de E/S de archivos a gestión de memoria de propósito general.
Lección 2 • Asignación de Heap y el Asignador
Cubre malloc(), calloc(), realloc(), free() y los internos del asignador de glibc incluyendo arenas. Enseña patrones de asignación correctos y cómo evitar la corrupción del heap.
Lección 3 • Protección de Memoria y Permisos
Enseña mprotect() para cambiar permisos de página y páginas guardia para detección de desbordamiento de pila. Permite a los estudiantes implementar técnicas de endurecimiento de seguridad a nivel de memoria.
Lección 4 • Arquitectura de Memoria Virtual
Explica tablas de páginas, disposición del espacio de direcciones virtuales y la interfaz /proc/pid/maps. Proporciona el modelo mental necesario para entender el comportamiento del asignador y la semántica de mmap().
Lección 5 • Detección y Corrección de Errores de Memoria
Usa Valgrind, AddressSanitizer y LeakSanitizer para encontrar fugas, use-after-free y desbordamientos. Construye las habilidades de diagnóstico necesarias para mantener la seguridad de memoria con calidad de producción.
Capítulo 7OcultarOcultar detallesVer detallesHilos POSIX y Sincronización
Hilos POSIX y Sincronización
Lección 1 • Creación de Hilos y Ciclo de Vida
Cubre pthread_create(), atributos de hilo, estado detached y pthread_join(). Establece el modelo de ciclo de vida del hilo sobre el que se construyen todos los temas de sincronización.
Lección 2 • Bloqueos de Lectura-Escritura y Barreras
Cubre rwlock para cargas de trabajo con muchas lecturas y pthread_barrier para sincronización de fases. Extiende el kit de herramientas de sincronización a patrones donde el bloqueo exclusivo es demasiado grueso.
Lección 3 • Variables de Condición
Demuestra pthread_cond_wait(), despertares espurios y el patrón de bucle de predicado. Permite a los hilos esperar eficientemente cambios de estado sin busy-waiting.
Lección 4 • Mutexes y Secciones Críticas
Enseña inicialización de mutex, disciplina de lock/unlock y tipos de mutex con verificación de errores. Proporciona la herramienta principal para proteger datos compartidos de modificaciones concurrentes.
Lección 5 • Almacenamiento Thread-Local y Seguridad
Explica __thread, pthread_key_t y seguridad async-signal en programas multihilo. Enseña patrones para estado por hilo que evitan la compartición y reducen la contención de lock.
Capítulo 8OcultarOcultar detallesVer detallesSockets y Programación de Redes
Sockets y Programación de Redes
Lección 1 • E/S No Bloqueante y epoll
Implementa un servidor orientado a eventos usando sockets no bloqueantes, epoll_create() y modo edge-triggered. Escala el manejo de conexiones más allá del modelo de un hilo por conexión.
Lección 2 • Fundamentos de la API de Socket
Cubre socket(), bind(), listen(), accept(), connect() y estructuras de dirección para IPv4 e IPv6. Establece la superficie central de la API sobre la que se construye toda la programación de red.
Lección 3 • UDP y Sockets de Datagrama
Cubre sendto(), recvfrom() y patrones de comunicación sin conexión para UDP. Contrasta la entrega no confiable de UDP con TCP e identifica casos de uso apropiados.
Lección 4 • Opciones de Socket y Características Avanzadas
Enseña getsockopt()/setsockopt() para ajustar buffers, keepalive y control del algoritmo Nagle. Permite el ajuste fino de desempeño y confiabilidad de las conexiones de red.
Lección 5 • Programación Cliente-Servidor TCP
Implementa un servidor y cliente echo TCP completo con manejo y cierre de conexiones adecuados. Enseña comunicación de flujo confiable y la importancia de manejar envíos y recepciones parciales.
Tu certificado válido de finalización
Este curso es para ti:
Desarrolladores de backend que quieren entender lo que sucede debajo de sus frameworks.
Ingenieros de sistemas embebidos que migran a plataformas basadas en Linux y APIs POSIX.
Egresados de ciencias de la computación que buscan cerrar la brecha entre el plan de estudios y el trabajo en la industria de sistemas.
Ingenieros DevOps que desean diagnosticar problemas a nivel de kernel sin adivinar.
Programadores aficionados de C listos para ir más allá de los tutoriales hacia la interacción real con el sistema operativo.
Investigadores de seguridad que necesitan comprender los aspectos internos de Linux para encontrar vulnerabilidades.
Lo que dicen nuestros alumnos
Sus clases son perfectas. Adquirí el paquete de un año y, finalmente, tengo la oportunidad de seguir diversos temas de mi interés sin necesidad de cambiar de plataforma... les agradezco por todo lo que hacen, ya los he recomendado a otras personas...

Me gusta cómo las lecciones van directo al grano y cómo puedo cambiar capítulos y saltar contenidos que no necesito.

Me gusta el contenido y la forma de presentación y transcripción de videos, ¡lo que acelera el proceso!

La plataforma es rápida, fácil de usar. La diversidad de contenido y los videos complementarios ayudan mucho en el aprendizaje.

Principales capacitaciones
Preguntas frecuentes
¿Quién es Dedika?
¿El certificado es válido en México?
¿Los cursos son gratuitos?
¿Cuál es la carga horaria del curso?
¿Cómo son los cursos?
¿Cómo funcionan los cursos?
¿Cuál es la duración de los cursos?
¿Cuál es el costo o precio de los cursos?
¿Qué es un curso EAD u online y cómo funciona?
Curso en PDF




















