Material para la asignatura Sistemas Operativos (240304) del Grado en Ingeniería Informática de la Universidad Pública de Navarra. 2º curso, semestre de otoño. 6 ECTS: 3 de teoría y 3 de prácticas.
git clone https://github.com/asiermarzo/ssoo.gitO descargar como ZIP desde la página del repositorio en GitHub (botón Code → Download ZIP) y descomprimirlo con el gestor de archivos o con el comando unzip ssoo-main.zip.
Las prácticas se realizan sobre Linux. Los distintos entornos disponibles (ordenadores de la UPNA, VDI, máquinas virtuales, GitHub Codespaces, o el ordenador propio con Linux, WSL2 o Docker) y cómo compilar el material están en entornos_ejecucion.md.
| Tema | Carpeta |
|---|---|
| Introducción a los sistemas operativos | TEORIA/01 |
| Espacio usuario y espacio kernel. Llamadas al sistema | TEORIA/02 |
| Procesos e hilos | TEORIA/03 |
| Planificación de procesos | TEORIA/04 |
| IPC: pipes y fifos | TEORIA/07 |
| IPC: señales | TEORIA/08 |
| IPC: colas de mensajes | TEORIA/09 |
| Práctica | Carpeta |
|---|---|
| P0 — Shell y herramientas | PRACTICA/00 |
| P1 — Entrada y salida: consola, ficheros, file descriptors | PRACTICA/01 |
P2 — Procesos e hilos: fork, execvp, wait, pstree |
PRACTICA/02 |
P3 — Pipes y fifos: pipe, mkfifo, dup2 |
PRACTICA/03 |
P4 — Señales: kill, signal, sigaction, sleep, pause |
PRACTICA/04 |
| Se irán añadiendo temas conforme se avance en la asignatura |
El README.md de cada práctica incluye la descripción del tema, los comandos, llamadas al sistema utilizadas, ejercicios propuestos y ejercicios extra con soluciones.
Para teoría, se utilizan archivos Markdown con diagramas mermaid, SVG y JPG. También se pueden dar simulaciones interactivas embebidas, normalmente en HTML + JS. Se utilizará un markdown mínimo y el texto estará siempre en una línea.
Se prefieren explicaciones concisas y resumidas.
Para prácticas, se utilizan archivos Markdown, archivos .c, Makefiles, scripts bash y configuraciones tmux de terminales.
<- clickar en la flecha. Habrá texto expandible
Que contienen información que puede ser útil, pero que no es obligatorio su conocimiento.En código utilizará alojamiento estático (en la pila - stack) para las variables siempre que sea posible y se evitará el uso de malloc.
Se evitarán programas con varios archivos C: cada proceso o grupo de procesos será un .c que acabará compilado en un binario. Esto hace el uso de Makefile opcional. Se pueden utilizar .h para compartir constantes y estructuras comunes.
Se pueden dejar #include que no sean necesarios si esto evita estar buscando qué includes necesita cada función. Es más como incluir un bloque común de #include <> y quitar los que den warning por no usarse.
Se puede quitar el tratamiento de errores para que el código quede más claro. La captura de errores se puede hacer con strace o gdb.
Estílos de código, aunque cada estudiante puede seguir el suyo:
- La llave de apertura
{se coloca en la misma línea. - Se usa
snake_caseen lugar deCamelCase. - Se intenta usar
forsiempre que sea posible (frente awhileodo/while). - Las variables se declaran e inicializan en la misma línea, en el scope más interno posible.
- Se evita el uso de variables globales.
- Los
structse definen contypedef structsin darle nombre alstruct.
Vídeos, Películas y Series material_adicional.md.