Sistemas Operativos (Operating Systems) — Programa del curso
Docente: Gerson Garrido
1. Descripción
Este curso estudia cómo un sistema operativo (operating system, OS) convierte un hardware limitado y compartido en una plataforma cómoda, segura y eficiente para los programas. Seguimos la estructura del libro Operating Systems: Three Easy Pieces (OSTEP), organizada en tres grandes ideas:
- Virtualización (virtualization) — de la CPU y de la memoria.
- Concurrencia (concurrency) — hilos (threads), locks, variables de condición, semáforos.
- Persistencia (persistence) — dispositivos de E/S (I/O), discos, sistemas de archivos (file systems).
Además, cerramos con sistemas distribuidos (distributed systems), seguridad (security) y máquinas virtuales (virtual machines).
Los términos técnicos se presentan en español con el término en inglés entre paréntesis la primera vez; el glosario los reúne todos. Las lecturas y la documentación de las herramientas están en inglés.
2. Carga horaria
| Componente | Horas/semana | Formato |
|---|---|---|
| Teoría | 4 h | Dos sesiones de 2 h (Sesión A y Sesión B) |
| Laboratorio | 2 h | Una sesión práctica guiada |
3. Resultados de aprendizaje
Al finalizar el curso, el estudiante será capaz de:
- Explicar cómo el OS virtualiza la CPU mediante procesos, ejecución directa limitada (limited direct execution) y planificación (scheduling), y comparar políticas de planificación.
- Explicar la traducción de direcciones (address translation), segmentación, paginación (paging), TLB y reemplazo de páginas, y calcular traducciones a mano.
- Escribir programas concurrentes correctos en C con
pthreads, identificar condiciones de carrera (race conditions) y deadlocks, y elegir la primitiva de sincronización adecuada. - Describir cómo funcionan los discos, RAID, SSDs y los sistemas de archivos, incluyendo la consistencia ante fallos (crash consistency) mediante journaling.
- Explicar los principios de sistemas de archivos distribuidos (NFS, AFS) y los mecanismos básicos de seguridad de un OS.
- Modificar un kernel real pequeño (xv6-riscv) agregando llamadas al sistema, cambiando su planificador, su manejo de memoria virtual y su sistema de archivos.
4. Bibliografía
Texto principal (gratuito en línea): Remzi H. Arpaci-Dusseau y Andrea C. Arpaci-Dusseau. Operating Systems: Three Easy Pieces. Arpaci-Dusseau Books. https://pages.cs.wisc.edu/~remzi/OSTEP/
El libro se puede leer gratis en línea, pero no se redistribuye: este repositorio enlaza los capítulos, no los copia. Si alguien quiere apoyar a los autores, la página ofrece versiones impresas y en PDF.
Material de apoyo:
- Tareas y simuladores: https://github.com/remzi-arpacidusseau/ostep-homework
- Código de los capítulos: https://github.com/remzi-arpacidusseau/ostep-code
- Proyectos en C: https://github.com/remzi-arpacidusseau/ostep-projects
- xv6-riscv, el kernel del curso: https://github.com/mit-pdos/xv6-riscv
- Libro de xv6 para RISC-V (MIT, rev. 5): https://pdos.csail.mit.edu/6.1810/2025/xv6/book-riscv-rev5.pdf
- Laboratorios de MIT 6.1810 (P3, P5 y bono): https://pdos.csail.mit.edu/6.1810/2025/
5. Calendario
Este es el calendario oficial del curso. Cada semana enlaza a su guía con lecturas, objetivos y actividades de laboratorio. Las sesiones marcadas con ✂️ se pueden comprimir o pasar a lectura autónoma si se pierden clases por feriados.
| Sem. | Sesión A (2 h) | Sesión B (2 h) | Laboratorio (2 h) | Entregas |
|---|---|---|---|---|
| 1 | Presentación del curso · Introducción · Estructura del kernel | Procesos | Entorno: Docker, C, gdb, make | P0 publicado |
| 2 | API de procesos (fork/exec/wait) |
Ejecución directa limitada | Código: API de procesos | |
| 3 | Planificación: FIFO, SJF, STCF, RR | MLFQ · Tiempo real (RM, EDF) | Simuladores de planificación | P0 entrega · P1 publicado |
| 4 | Lotería y stride | Planificación multiprocesador · Cierre CPU | xv6: arranque, gdb, primera syscall | |
| 5 | Espacios de direcciones · API de memoria | Traducción de direcciones · Segmentación | xv6: planificador por dentro | P2 publicado |
| 6 | Gestión de espacio libre | Paginación | Simuladores de relocalización y segmentación | P1 entrega |
| 7 | TLB | Tablas de páginas avanzadas | Simuladores de paginación · medir la TLB | |
| 8 | Swapping: mecanismos y políticas · VM completa | Examen parcial (virtualización) | Repaso y mem.c |
P2 entrega · P3 publicado |
| 9 | ✂️ Máquinas virtuales (apéndice) | Hilos · API de hilos | Simulador x86.py · pthreads |
|
| 10 | Locks | Estructuras de datos con locks | Locks en x86.py · escalabilidad |
P3 entrega · P4 publicado |
| 11 | Variables de condición | Semáforos · Inversión de prioridad | Productor/consumidor · lectores/escritores | |
| 12 | Bugs de concurrencia · Deadlock: banquero y detección · Concurrencia por eventos | Dispositivos de E/S · Discos duros | Deadlocks · disk.py |
|
| 13 | RAID | Archivos y directorios | raid.py · API de archivos |
P4 entrega · P5 publicado |
| 14 | Implementación de un FS | FFS · Journaling | vsfs.py, ffs.py, fsck.py · FS de xv6 |
|
| 15 | LFS · SSDs · Integridad de datos | Distribuidos: intro, NFS, AFS | lfs.py, ssd.py, checksum.py, afs.py |
|
| 16 | Seguridad: intro, autenticación, control de acceso | Explotación de software y endurecimiento (✂️ criptografía y seguridad distribuida, de lectura) | Laboratorio de permisos y contraseñas | P5 entrega |
| — | Examen final en el período de exámenes |
Sobre el examen final: el calendario asume que la universidad tiene un período de exámenes después de la semana 16. Si no lo tiene, el final se toma en la Sesión B de la semana 16: la explotación de software se da en versión corta y los temas ✂️ pasan a lectura autónoma.
6. Proyectos
Seis proyectos que combinan programación de sistemas en C (espacio de usuario,
de ostep-projects) y
modificaciones al kernel xv6-riscv (un proyecto propio del curso y tres
laboratorios de MIT 6.1810). El detalle, las reglas de entrega y los criterios de revisión están en
projects/README.md.
| # | Proyecto | Tipo | Publicado | Entrega |
|---|---|---|---|---|
| P0 | Utilidades Unix (wcat, wgrep, wzip, wunzip) |
C | Sem. 1 | Sem. 3 |
| P1 | Shell (wish) |
C | Sem. 3 | Sem. 6 |
| P2 | Planificador por lotería en xv6 | xv6-riscv | Sem. 5 | Sem. 8 |
| P3 | Tablas de páginas (lab pgtbl del MIT) |
xv6-riscv | Sem. 8 | Sem. 10 |
| P4 | Compresión paralela (pzip) |
C + pthreads | Sem. 10 | Sem. 13 |
| P5 | Archivos grandes y enlaces simbólicos (lab fs del MIT) |
xv6-riscv | Sem. 13 | Sem. 16 |
| Bono | fork con copy-on-write (lab cow del MIT) |
xv6-riscv | Sem. 11 | Sem. 16 |
7. Políticas
- Trabajo en parejas: P0 es individual. P1–P5 y el bono se pueden hacer en parejas.
- Integridad académica: se puede discutir ideas, pero el código entregado debe ser propio. Se usarán herramientas de detección de similitud. Copiar soluciones publicadas en internet cuenta como plagio.
Uso de herramientas e IA
| Herramienta | ¿Se permite en este curso? |
|---|---|
Diagnósticos del compilador y sanitizers (gcc -Wall, -fsanitize=address,undefined, Valgrind, Helgrind, gdb) |
Sí, en todo el trabajo del curso. Leer y entender sus mensajes es parte del curso. |
| Documentación oficial (páginas man, OSTEP, libro de xv6, documentación del kernel de Linux) y búsquedas en la web | Sí. Se cita la fuente cuando se usa una idea o un fragmento de código que no es propio. |
| Autocompletado del editor que no genera soluciones enteras (nombres, firmas, cierre de llaves) | Sí. |
| Corrector ortográfico, traductores y herramientas de accesibilidad | Sí. |
Formateadores y linters de código (por ejemplo, clang-format) |
Sí. |
| IA generativa para pedir explicaciones de conceptos, sin código generado | Sí, para estudiar y entender los temas. La respuesta no se copia en ninguna entrega. |
| IA generativa que escribe código (asistentes de chat o de editor que completan funciones o programas) | No, en ningún proyecto ni laboratorio. Entregar código producido con ella cuenta como plagio. |
Quien use una herramienta permitida más allá de la documentación y el
compilador (por ejemplo, IA generativa para que le explique un tema) lo declara
en el README.md de la entrega: qué herramienta, para qué y qué cambió en su
trabajo a partir de eso. En cualquier proyecto o laboratorio se puede pedir a
cada estudiante que explique su código de forma oral: cada integrante responde
por todo lo que entrega.
8. Entorno de trabajo
Todo el trabajo práctico se hace en Linux. El curso ofrece un contenedor Docker
que funciona igual en Linux, Windows (WSL2) y macOS (incluido Apple Silicon).
Instrucciones en labs/README.md.