Guía docente de Sistemas Concurrentes y Distribuidos (2961124)

Curso 2022/2023
Fecha de aprobación: 20/06/2022

Grado

Grado en Ingeniería Informática

Rama

Ingeniería y Arquitectura

Módulo

Formación Específica de Rama

Materia

Sistemas Operativos, Sistemas Distribuidos y Redes

Curso

2

Semestre

1

Créditos

6

Tipo

Obligatoria

Profesorado

Teórico

  • José Miguel Mantas Ruiz. Grupo: B
  • Manuel Noguera García. Grupo: A
  • Carlos Ureña Almagro. Grupo: C
  • Pedro Villar Castro. Grupo: D

Práctico

  • Luis Gonzaga Baca Ruiz Grupos: 2 y 3
  • Miguel Lastra Leidinger Grupo: 9
  • José Miguel Mantas Ruiz Grupos: 10, 4, 5 y 6
  • Ana María Sánchez López Grupos: 1 y 7
  • Pedro Villar Castro Grupos: 11 y 8

Tutorías

José Miguel Mantas Ruiz

Email
  • Primer semestre
    • Lunes de 11:30 a 13:30 (Etsiit 3ª P Despacho 20)
    • Miércoles de 16:30 a 18:30 (Etsiit 3ª P Despacho 20)
    • Jueves de 11:30 a 13:30 (Etsiit 3ª P Despacho 20)
  • Segundo semestre
    • Martes de 10:30 a 13:30 (Etsiit 3ª P Despacho 20)
    • Jueves de 10:30 a 13:30 (Etsiit 3ª P Despacho 20)

Manuel Noguera García

Email
  • Primer semestre
    • Viernes de 10:30 a 13:30 (Etsiit Desp. 22 3ª Planta)
  • Segundo semestre
    • Miércoles de 11:30 a 13:30 (Etsiit Desp. 22 3ª Planta)
    • Jueves de 10:30 a 11:30 (Etsiit Desp. 22 3ª Planta)
    • Viernes de 10:30 a 13:30 (Etsiit Desp. 22 3ª Planta)

Carlos Ureña Almagro

Email
  • Primer semestre
    • Martes de 11:30 a 13:30 (Etsiit 3ª P Despacho 34)
    • Miércoles de 11:30 a 13:30 (Etsiit 3ª P Despacho 34)
    • Jueves de 11:30 a 13:30 (Etsiit 3ª P Despacho 34)
  • Segundo semestre
    • Martes de 11:30 a 13:30 (Etsiit 3ª P Despacho 34)
    • Miércoles de 11:30 a 13:30 (Etsiit 3ª P Despacho 34)
    • Jueves de 11:30 a 13:30 (Etsiit 3ª P Despacho 34)

Pedro Villar Castro

Email
  • Primer semestre
    • Martes de 10:00 a 13:00 (Etsiit 3ª P Despacho 39)
    • Jueves de 09:30 a 12:30 (Etsiit 3ª P Despacho 39)
  • Segundo semestre
    • Martes de 10:00 a 13:00 (Etsiit 3ª P Despacho 39)
    • Miércoles de 10:00 a 13:00 (Etsiit 3ª P Despacho 39)

Luis Gonzaga Baca Ruiz

Email
  • Primer semestre
    • Martes de 09:00 a 13:00 (Edificio Auxiliar D 1.2)
    • Miércoles de 09:00 a 11:00 (Edificio Auxiliar D 1.2)
  • Segundo semestre
    • Lunes de 10:30 a 13:30 (Edificio Auxiliar D 1.2)
    • Miércoles de 11:00 a 14:00 (Edificio Auxiliar D 1.2)

Miguel Lastra Leidinger

Email
  • Primer semestre
    • Martes de 09:30 a 13:30 (Etsiit 3ª P Despacho 33)
    • Miércoles de 15:00 a 17:00 (Etsiit 3ª P Despacho 33)
  • Segundo semestre
    • Jueves
      • 11:30 a 13:30 (Etsiit 3ª P Despacho 33)
      • 15:30 a 17:30 (Etsiit 3ª P Despacho 33)
    • Viernes de 10:30 a 12:30 (Etsiit 3ª P Despacho 33)

Ana María Sánchez López

Email
  • Primer semestre
    • Martes de 11:30 a 13:30 (Etsiit 3ª P Despacho 24)
    • Miércoles de 08:30 a 12:30 (Etsiit 3ª P Despacho 24)
  • Segundo semestre
    • Martes de 10:30 a 13:30 (Etsiit 3ª P Despacho 24)
    • Miércoles de 10:30 a 13:30 (Etsiit 3ª P Despacho 24)

Prerrequisitos y/o Recomendaciones

Los alumnos no tendrán que tener asignaturas, materias o módulos aprobados como requisito indispensable para cursar el módulo. No obstante se recomienda la superación de los contenidos y adquisición de competencias de las materias de formación básica, teniendo especial importancia la superación de las materias de:

  • Fundamentos de Programación.
  • Fundamentos de software.
  • Metodología de la Programación.

Breve descripción de contenidos (Según memoria de verificación del Máster)

  • Exclusión mutua, sincronización y comunicación entre procesos.
  • Propiedades de seguridad y vivacidad.
  • Algoritmos para modelos basados en memoria compartida y paso de mensajes.
  • Semáforos y monitores.
  • Bibliotecas de programación concurrente y distribuida.
  • Técnicas para el diseño de aplicaciones de tiempo real.

Competencias

Competencias Generales

  • CG06. Capacidad para concebir y desarrollar sistemas o arquitecturas informáticas centralizadas o distribuidas integrando hardware, software y redes.

Competencias Específicas

  • CE12. Conocimiento y aplicación de los procedimientos algorítmicos básicos de las tecnologías informáticas para diseñar soluciones a problemas, analizando la idoneidad y complejidad de los algoritmos propuestos.
  • CE14. Capacidad para analizar, diseñar, construir y mantener aplicaciones de forma robusta, segura y eficiente, eligiendo el paradigma y los lenguajes de programación más adecuados.
  • CE17. Conocimiento y aplicación de las características, funcionalidades y estructura de los Sistemas Distribuidos, las Redes de Computadores e Internet y diseñar e implementar aplicaciones basadas en ellas.
  • CE20. Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real.

Competencias Transversales

  • CT03. Capacidad para el uso y aplicación de las TIC en el ámbito académico y profesional. 

Resultados de aprendizaje (Objetivos)

  • Comprender la importancia de la programación concurrente en las aplicaciones de hoy en día.
  • Identificar las principales características de los distintos tipos de sistemas concurrentes que existen.
  • Conocer y entender los problemas que plantea el desarrollo de programas concurrentes y que no aparecen en la programación secuencial.
  • Entender los conceptos de sincronización y exclusión mutua entre procesos.
  • Identificar las propiedades de seguridad y vivacidad que un sistema concurrente debe cumplir y ser capaz de razonar si dichas propiedades se cumplen.
  • Conocer los principales modelos de programación concurrente, paralela y distribuida.
  • Adquirir experiencia y conocimiento en los mecanismos de sincronización y comunicación que se utilizan en la actualidad para desarrollar programas concurrentes tanto para sistemas de memoria compartida como para sistemas distribuidos.
  • Entender el funcionamiento de semáforos y monitores como mecanismos de sincronización para memoria compartida y comprender cómo se pueden resolver problemas de programación concurrente usando monitores.
  • Ser capaz de desarrollar algoritmos para sistemas basados en memoria compartida y para sistemas distribuidos que resuelvan problemas modelo en programación concurrente.
  • Conocer y ser capaz de usar bibliotecas y plataformas estandarizadas para la implementación de programas concurrentes basados en memoria compartida y para sistemas distribuidos.
  • Conocer las técnicas más destacadas para el diseño de sistemas de tiempo real.

Programa de contenidos Teóricos y Prácticos

Teórico

Tema 1. Introducción a la Programación Concurrente

  1. Conceptos básicos y motivación.
  2. Modelo abstracto de la Programación Concurrente. Consideraciones sobre el hardware.
  3. Exclusión mutua y sincronización.
  4. Propiedades de sistemas concurrentes.
  5. Verificación de programas concurrentes.
  6. Resolución de ejercicios.

Tema 2. Algoritmos y mecanismos de sincronización basados en memoria compartida

  1. Introducción a la sincronización en sistemas con memoria compartida
  2. Algoritmos básicos de exclusión mutua en sistemas con memoria compartida.
  3. Soluciones hardware para la exclusión mutua. Cerrojos.
  4. Semáforos. Estructura y operaciones.
  5. Monitores como mecanismo de alto nivel. Definición y características. Semántica de las señales de los monitores. Implementación de monitores.
  6. Resolución de ejercicios.

Tema 3. Sistemas basados en paso de mensajes

  1. Mecanismos básicos en sistemas basados en paso de mensajes.
  2. Modelos y lenguajes de programación distribuida.
  3. Bibliotecas de paso de mensajes y patrones de interacción.
  4. Mecanismos de alto nivel en sistemas distribuidos. RPC y RMI.
  5. Resolución de ejercicios.

Tema 4. Introducción a los sistemas de tiempo real

  1. Concepto de sistema de tiempo real. Medidas de tiempo y modelo de tareas.
  2. Planificación de tareas periódicas con asignación de prioridades.
  3. Modelos generales y específicos de tareas.
  4. Resolución de ejercicios.

Práctico

Seminarios/Talleres:

  • Seminario práctico 1: Introducción a la programación multihebra usando semáforos.
  • Seminario práctico 2: Introducción a la programación multihebra con monitores.
  • Seminario práctico 3: Introducción al uso de una interfaz de paso de mensajes.

Prácticas de Laboratorio:

  • Práctica 1: Resolución de problemas de sincronización con semáforos.
  • Práctica 2: Programación de monitores con hebras.
  • Práctica 3: Programación de aplicaciones distribuidas.
  • Práctica 4: Programación de tareas periódicas con prioridades.

Bibliografía

Bibliografía fundamental

  • J. T. Palma, C. Garrido, F. Sánchez, A. Quesada. Programación Concurrente. Thomson-Paranifo. 2003.
  • G. R. Andrews. Foundations of Multithreaded, Parallel, and Distributed Programming. Addison Wesley, 2000.
  • F. Almeida, D. Gimenez, J. M. Mantas, A.M. Vidal . Introduccion a la Programacion Paralela. Paraninfo Cengage Learning, 2008.
  • A. Burns, A. Wellings. Sistemas de Tiempo Real y Lenguajes de Programación (3ª Edición). Addison Wesley, 2003.
  • A. Wiliams. C++ Concurrency in Action, 2nd Edition. Manning Publications. 2019

Bibliografía complementaria

  • C. Breshears. The Art of Concurrency: A Thread Monkey's Guide to Writing Parallel Applications. O'Reilly Media. 2009.
  • N.A. Lynch. Distributed Algorithms. Morgan Kaufmann. 1996.
  • George Coulouris, Jean Dollimore, Tim Kindberg, Gordon Blair. Distributed Systems: Concepts and Design (5ª Edición). Addison-Wesley, 2011.
  • V. Kumar , A. Grama, A. Gupta, G. Karypis. Introduction to Parallel Computing. Benjamin/Cummings Publishing Company, 2003

Enlaces recomendados

A principio de curso se avisará de la plataforma web y páginas web auxiliares donde se encontrarán los enlaces recomendados para la asignatura.

Metodología docente

  • MD01. Lección Magistral (Clases Teóricas-Expositivas) 
  • MD02. Actividades Prácticas (Resolución de Problemas, Resolución de Casos Prácticos, Desarrollo de Proyectos, Prácticas en Laboratorio, Taller de Programación, Aula de Informática, Prácticas de Campo). 

Evaluación (instrumentos de evaluación, criterios de evaluación y porcentaje sobre la calificación final)

Evaluación Ordinaria

Todo lo relativo a la evaluación se regirá por la Normativa de evaluación y calificación de los estudiantes vigente en la Universidad de Granada.

Preferentemente, la evaluación se ajustará al sistema de evaluación continua del aprendizaje del estudiante siguiendo el artículo 7 de la anterior Normativa.

Se utilizarán alguna o algunas de las siguientes técnicas de evaluación:

  • Para la parte teórica se realizarán un mínimo de dos sesiones de evaluación y un máximo de tres, así como entregas de ejercicios sobre el desarrollo y los resultados de las actividades propuestas.
  • Para la parte práctica se realizarán sesiones de evaluación prácticas en el laboratorio, resolución de problemas y desarrollo de proyectos (individuales o en grupo), y se valorará el trabajo desarrollado por los alumnos teniendo en cuenta las entregas de sus informes/memorias, o en su caso, las entrevistas personales con los mismos sobre dicho trabajo.
  • En el caso de la evaluación continua, los seminarios se podrán evaluar teniendo en cuenta la asistencia, los problemas propuestos que hayan sido resueltos y entregados por los alumnos, en su caso, las entrevistas efectuadas durante el curso y la presentación oral de los trabajos desarrollados.

La calificación global corresponderá por tanto a la puntuación ponderada de los diferentes aspectos y actividades que integran el sistema de evaluación. Por tanto, el resultado de la evaluación será una calificación numérica obtenida mediante la suma ponderada de las calificaciones correspondientes a una parte teórica, una parte práctica y, en el caso de la evaluación continua, una parte relacionada con el trabajo autónomo de los alumnos, los seminarios impartidos y el aprendizaje basado en proyectos. La adaptación del sistema de evaluación general propuesto a las características de esta asignatura, con indicación explícita del peso de la evaluación de cada actividad formativa, se ajustará a lo indicado en la siguiente tabla:

Porcentajes de evaluación

Actividades formativas Ponderación
Parte Teórica 65%
Parte Práctica 35%
Otros (seminarios, entregas de ejercicios, ...) Hasta un 5%

Para aprobar la asignatura es necesario tener una calificación numérica superior o igual a 5 (sobre 10). No obstante, además del requisito anterior, se establece como requisito adicional para superar la asignatura que tanto la calificación correspondiente a la parte teórica como la correspondiente a la parte práctica sean mayores o iguales a 4 (sobre 10).

El sistema de calificaciones se expresará mediante calificación numérica de acuerdo con lo establecido en el art. 5 del R. D 1125/2003, de 5 de septiembre, por el que se establece el sistema europeo de créditos y el sistema de calificaciones en las titulaciones universitarias de carácter oficial y validez en el territorio nacional.

Evaluación Extraordinaria

La evaluación extraordinaria constará de dos pruebas de evaluación, una para la parte teórica y otra para la parte práctica, con las características que se indican a continuación:

  • Evaluación de teoría: los estudiantes realizarán una única prueba escrita que constará de preguntas de teoría, preguntas tipo test y problemas relacionados con el temario de la asignatura.
  • Evaluación de prácticas: los estudiantes realizarán una prueba en el laboratorio que constará de ejercicios o casos prácticos de programación basados en el temario de prácticas de la asignatura.

La ponderación de cada parte en la nota final será del 65% (parte teórica) y el 35% (parte práctica). Para aprobar la asignatura se deben cumplir cada uno de estos tres requisitos:

  • La nota de la prueba de teoría es igual o superior al 40% del máximo de dicha prueba.
  • La nota de la prueba de prácticas es igual o superior al 40% del máximo de dicha prueba.
  • La suma (ponderada) de ambas notas es igual o superior al 50% del máximo posible de dicha suma

Evaluación única final

La evaluación única final constará de dos pruebas de evaluación, una para la parte teórica y otra para la parte práctica, con las características que se indican a continuación:

  • Evaluación de teoría: los estudiantes realizarán una única prueba escrita que constará de preguntas de teoría, preguntas tipo test y problemas relacionados con el temario de la asignatura.
  • Evaluación de prácticas: los estudiantes realizarán una prueba en el laboratorio que constará de ejercicios o casos prácticos de programación basados en el temario de prácticas de la asignatura.

La ponderación de cada parte en la nota final será del 65% (parte teórica) y el 35% (parte práctica). Para aprobar la asignatura se deben cumplir cada uno de estos tres requisitos:

  • La nota de la prueba de teoría es igual o superior al 40% del máximo de dicha prueba.
  • La nota de la prueba de prácticas es igual o superior al 40% del máximo de dicha prueba.
  • La suma (ponderada) de ambas notas es igual o superior al 50% del máximo posible de dicha suma