Un sistema operativo es la capa de software que gestiona los recursos del hardware y proporciona los servicios necesarios para la ejecución de programas y aplicaciones. Los sistemas operativos actuales integran un número creciente de funcionalidades y desempeñan un papel fundamental en el funcionamiento de los sistemas informáticos.
El objetivo de la asignatura es proporcionar al estudiante una visión global del funcionamiento y la estructura de un sistema operativo, así como de sus principales componentes. A lo largo del curso se profundiza en los conceptos fundamentales relacionados con la gestión de procesos, la planificación, la concurrencia, la sincronización, la comunicación entre procesos y los mecanismos básicos que ofrece el núcleo del sistema operativo. Los detalles específicos de otros subsistemas y módulos se tratan en asignaturas más especializadas del plan de estudios.
Desde el punto de vista práctico, la asignatura incluye actividades y prácticas de programación orientadas a implementar y experimentar con diferentes funcionalidades, mecanismos, políticas y técnicas propias de los sistemas operativos. Este trabajo se complementa con ejemplos y ejercicios que permiten consolidar los contenidos teóricos, comprender su funcionamiento y aplicarlos a la resolución de problemas reales.
Profesores Titulares
Profesores Docentes
Se requieren conocimientos previos de programación, especialmente de algorítmica, estructuras de datos y programación estructurada, así como conocimientos básicos sobre el uso de un sistema operativo. También se espera que el estudiante haya adquirido unos conocimientos mínimos de programación en C, incluidos el uso de punteros y la gestión de memoria dinámica.
Los estudiantes que cursen la asignatura de Sistemas Operativos deberán adquirir los siguientes conocimientos y desarrollar las siguientes habilidades:
- Comprender las funciones de un sistema operativo, su estructura y su relación con el resto de los componentes de un sistema informático.
- Conocer los conceptos, las técnicas y la terminología asociados al funcionamiento, el diseño y la implementación de los principales componentes de un sistema operativo.
- Saber aplicar estos conceptos y técnicas mediante el diseño y el desarrollo de software que implemente mecanismos propios de los sistemas operativos.
- Saber comunicarse correctamente, tanto oralmente como por escrito, utilizando la terminología técnica adecuada.
- Saber diseñar y desarrollar software modular, estructurado, mantenible y adecuadamente documentado.
- Saber analizar y resolver problemas relacionados con los contenidos de la asignatura, tanto individualmente como en equipo.
Durante el curso académico se desarrollarán los siguientes contenidos:
CONTENIDOS CONCEPTUALES
Tema 1. Introducción a los sistemas operativos y al núcleo
1. Fundamentos de los sistemas informáticos
- Componentes básicos de un sistema informático
- Ejecución de instrucciones
- Interrupciones y gestión de múltiples interrupciones
- Multiprogramación
2. El sistema operativo dentro del sistema informático
- Ubicación y función del sistema operativo
- Funciones y servicios de los sistemas operativos
- Evolución de los sistemas operativos
- Principales componentes de un sistema operativo
3. Procesos y ejecución
- Concepto y estados de un proceso
- Representación de los procesos: PCB (Process Control Block)
- Cambio de contexto
- El dispatcher
Tema 2. Planificación de procesos
1. Introducción a la planificación de procesos
2. Criterios y métricas de planificación
3. Algoritmos básicos de planificación en sistemas monoprocesador
- FCFS (First Come, First Served)
- SJF/SPN (Shortest Job First / Shortest Process Next)
- SRT (Shortest Remaining Time)
- Planificación por prioridades
- Round Robin o turno rotatorio
- HRRN (Highest Response Ratio Next)
4. Simulación y análisis comparativo de los algoritmos de planificación
- Configuración de procesos y cargas de trabajo
- Uso del simulador educativo EPSSim
- Interpretación de las métricas obtenidas
- Comparación del comportamiento de los diferentes algoritmos
- Análisis del efecto de los parámetros de planificación
Tema 3. Concurrencia, sincronización y exclusión mutua
1. Concurrencia y compartición de datos
- Ejecución concurrente de procesos
- Condiciones de carrera
- Secciones críticas
2. Exclusión mutua y sincronización
- El problema de la exclusión mutua
- El problema de los productores y consumidores
- Conceptos asociados: inanición (starvation), interbloqueo (deadlock) y equidad (fairness)
3. Semáforos
- Concepto y operaciones
- Utilización de semáforos
- Patrones de sincronización y exclusión mutua
- Semáforos en C
CONTENIDOS PRÁCTICOS
Tema 4. Llamadas al sistema
- Entorno de trabajo
- File descriptors
- Signals
- Threads
- fork, pipes y exec
- Memoria compartida
- Sockets
- select
- Colas de mensajes
- Semáforos
La asignatura tiene un funcionamiento semanal basado en dos sesiones lectivas:
- Primera sesión (2 h): se introducen los conceptos y las herramientas necesarias para desarrollar los contenidos de la asignatura. Las explicaciones se complementan con ejemplos, resolución de ejercicios y discusión de diferentes enfoques de diseño.
- Segunda sesión (2 h): se realiza una sesión práctica en la que los estudiantes, habitualmente en grupo, deben diseñar e implementar en lenguaje C un programa que aplique los conceptos y las herramientas trabajados. La actividad debe entregarse al final de la sesión.
Además, a lo largo del curso se desarrolla una práctica de programación de mayor alcance, estructurada en diferentes fases, que integra los principales contenidos de la asignatura y permite profundizar en el diseño, la implementación, la depuración y la documentación de una aplicación más compleja.
Los métodos utilizados para evaluar la asignatura son los siguientes:
Los criterios de evaluación asociados a los objetivos de la asignatura son los siguientes:
Objetivo 1. Comprender las funciones y la estructura de un sistema operativo
- Identificar y explicar las funciones, los componentes y la estructura básica de un sistema operativo, así como su relación con el hardware y con el resto del sistema informático. [A, B, C, F]
- Utilizar correctamente los conceptos y la terminología propios de la asignatura. [A, B, F, G]
Objetivo 2. Conocer los principales mecanismos y técnicas de los sistemas operativos
- Analizar y resolver problemas de planificación de procesos, interpretando correctamente los algoritmos y las métricas asociadas. [A, B, C, F]
- Identificar y aplicar mecanismos de concurrencia, sincronización y exclusión mutua en problemas con procesos concurrentes. [A, C, E, G]
- Relacionar los diferentes componentes y mecanismos estudiados con el funcionamiento global del sistema operativo. [A, B, F]
Objetivo 3. Aplicar los conocimientos mediante el desarrollo de software
- Diseñar e implementar en lenguaje C programas que utilicen llamadas al sistema y mecanismos propios de los sistemas operativos. [C, E, G]
- Seleccionar y aplicar las técnicas adecuadas para resolver cada problema, justificando las decisiones de diseño adoptadas. [C, E, G]
Objetivo 4. Comunicarse utilizando la terminología técnica adecuada
- Redactar informes y memorias técnicas claros, precisos y adecuadamente estructurados. [D]
- Explicar y defender oralmente el diseño, el funcionamiento y la implementación de las soluciones desarrolladas. [F, G]
Objetivo 5. Desarrollar software modular y documentado
- Implementar programas correctamente estructurados, modulares y con una documentación interna adecuada. [E]
- Elaborar una memoria que describa y justifique la arquitectura, el diseño y el funcionamiento de la implementación. [D, G]
Objetivo 6. Analizar y resolver problemas individualmente y en equipo
- Analizar problemas, proponer alternativas y justificar la solución adoptada. [A, C, E, F, G]
- Trabajar de manera coordinada en equipo, distribuyendo las tareas sin perder el conocimiento global de la solución desarrollada. [D, E, G]
CANALETA, X. (2020). Exercicis i problemes d’examen de sistemes operatius. Publicacions La Salle.
HARBISON, S. P., i STEELE, G. L. (2002). C: A Reference Manual (5a ed.). Prentice Hall.
PETERSON, J. L., i SILBERSCHATZ, A. (1989). Sistemas operativos. Editorial Reverté. ISBN 84-291-2693-7.
SALVADOR, J. (2011). Introducció al llenguatge de programació C. Publicacions La Salle.
SALVADOR, J. (2014). Programació en C per a sistemes UNIX. Publicacions La Salle.
SILBERSCHATZ, A., GALVIN, P. B., i GAGNE, G. (2002). Sistemas operativos. Editorial Limusa. ISBN 968-18-6168-X.
STALLINGS, W. (2005). Sistemas operativos (5a ed.). Pearson Prentice Hall. ISBN 84-205-4462-0.
PERKINS, M., FURZE, L., ROE, J., i MACVAUGH, J. (2024). “The Artificial Intelligence Assessment Scale (AIAS): A Framework for Ethical Integration of Generative AI in Educational Assessment”. Journal of University Teaching and Learning Practice, 21(6). doi:10.53761/q3azde36.
STEVENS, W. R., FENNER, B., i RUDOFF, A. M. (2004). UNIX Network Programming. Volume 1: The Sockets Networking API (3a ed.). Addison-Wesley Professional. ISBN 0-13-141155-1.
STEVENS, W. R., i RAGO, S. A. (2008). Advanced Programming in the UNIX Environment (2a ed.). Addison-Wesley Professional.
TANENBAUM, A. S. (2009). Sistemas operativos modernos (3a ed.). Pearson Educación. ISBN 978-607-442-046-3.