Información general


Tipo de asignatura: obligatoria

Coordinador:

trimestre:2

Créditos: 6

Profesorado: Enric Sesa Nogueras

Descripción


En esta asignatura se introducen, desde una vertiente eminentemente práctica, los conceptos, problemas y prácticas más relevantes de la programación concurrente.

Si por motivos relacionados con la Covidien-19 la asignatura tuviera que impartir en modalidad no presencial o en alguna modalidad que representara una disminución sensible de la presencialidad, la metodología de las sesiones se adaptará a estas circunstancias para continuar garantizado el necesario equilibrio teórico-práctico. El objetivo último de esta adaptación será el de preservar al máximo la consecución de los conocimientos y de las competencias especificadas en este plan docente.

Resultados de aprendizaje


Esta asignatura contribuye a algunos de los resultados de aprendizaje especificados para la materia a la que pertenece (Aplicaciones distribuidas). Concretamente, al acabar la asignatura el estudiante deberá ser capaz de

  • RA1: Diseñar, escribir, probar, depurar, documentar y mantener código en un lenguaje de alto nivel para resolver problemas de programación aplicando esquemas algorítmicos y utilizando estructuras de datos.
  • RA2: Conocer la necesidad de la concurrencia en programación, los problemas lógicos asociados y las principales soluciones.
  • RA3: Conocer y saber utilizar las construcciones habituales en los lenguajes de programación para gestionar la concurrencia.
  • RA4: Describir los paradigmas más relevantes de concurrencia, paralelismo y sistemas distribuidos.
  • RA5: Describir el problema de la interferencia destructiva y sus efectos. Describir diferentes soluciones a la necesidad de exclusión mutua (semáforos, monitores ...)
  • RA6: Describir la situación de bloqueo mutuo (deadlock) y las condiciones asociadas.
  • RA7: Describir las propiedades de seguridad (safety) y vivacidad (liveness).
  • RA8: Describir la arquitectura cliente / servidor
  • RA9: Implementar diseños concurrentes en un lenguaje de programación de alto nivel que ofrezca herramientas específicamente dirigidas a la programación concurrente / paralela.
  • RA10: Razonar de manera formal y / o semiformal sobre la corrección de un diseño concurrente.
  • RA11: Determinar los factores que inciden negativamente en la seguridad y fiabilidad de un sistema hardware / software y minimizar sus efectos.

 

Metodología de trabajo


La asignatura estará basada en una metodología de clase magistral en la que se insertarán actividades de naturaleza práctica. También habrá algunas sesiones de laboratorio que serán de carácter eminentemente práctico. A menudo, durante las sesiones, se pedirá a los estudiantes que resuelvan y entreguen ejercicios. Estos ejercicios serán una parte sustancial de la evaluación de la asignatura.

contenidos


1.- Conceptos fundamentales

  • Programas, procesos, e hilos
  • Parel·lelisme vs. concurrencia
  • arquitecturas

2.- Implementación de procesos e hilos

  • Hilos en Java: la clase Thread y la interfaz Runnable
  • Ciclo de vida de un hilo

3.- Interferencia y el problema de la sección crítica

  • interferencia
  • exclusión mutua
  • Algoritmos que garantizan la exclusión mutua

4.- Herramientas

  • Test & Set
  • semáforos
  • Monitores

5.- Deadlock, safety & liveness

6.- Sistemas distribuidos

Actividades de aprendizaje


Se pone a disposición de los estudiantes diversas actividades de naturaleza eminentemente práctica (ejercicios cortos, problemas) que son la base de las actividades de aprendizaje de la asignatura. Algunas de estas actividades los estudiantes las tendrán que resolver de manera no presencial siguiendo las indicaciones del (los) docente (s) y también serán trabajadas en clase, ya sea como ejemplos en las sesiones de teoría, ya sea en las sesiones de laboratorio. Algunas de estas actividades tendrán carácter optativo mientras que otros tendrán carácter obligatorio dado que tendrán peso en el sistema evaluativo de la asignatura. Todas las actividades, tanto las obligatorias como las optativas serán concebidas para alcanzar las conocimientos teórico-prácticos de la asignatura. 

Con el objetivo de recoger evidencia del logro de los resultados de aprendizaje esperados se realizarán las siguientes actividades de carácter evaluativo:

  • Tres prácticas dirigidas a recoger evidencia de los resultados de aprendizaje de carácter más práctico: RA1, RA2, RA3, RA9 y RA10.

A nivel competencial estas tres prácticas, que mayoritariamente se deberán desarrollar en tiempo no presencial, inciden en todas las competencias comunes y específicas de la asignatura, especialmente en cuanto a la aplicación práctica del conocimiento que estas competencias mencionan (cuando se procede, se indica entre paréntesis los aspectos más relevantes de cada competencia a los que la asignatura contribuye):

  • CIN1 (desarrollar software asegurando su fiabilidad y seguridad),
  • CIN3 (hábitos de trabajo efectivos en los entornos de desarrollo de software)
  • CIN5 (mantener software),
  • CIN6 (aplicar procedimientos algorítmicos),
  • CIN7
  • CIN8 (construir y mantener aplicaciones de forma robusta),
  • CIN13 (conocimiento y aplicación de las herramientas necesarias para el almacenamiento)
  • EFB5 (fundamentos de la programación paralela / concurrente)
  • EIS1 (desarrollar sistemas software fiables aplicando principios métodos y prácticas de la ingeniería del software)
  • EIS4

 

  • Múltiples ejercicios, problemas y cuestionarios distribuidos a lo largo del curso y realizados durante las sesiones de clase. Con ellos se pretende recoger evidencia de todos los resultados de aprendizaje, con especial énfasis en aquellos que tienen un carácter más teórico: RA4, RA5, RA6, RA7, RA8 y RA11 pero sin descartar el resto. A nivel competencial, este conjunto de pruebas pretenden incidir en todas las competencias comunes y específicas de la asignatura, salvo CIN3 que es propia de las tareas de carácter más aplicado.

 

Para superar (aprobar) las actividades evaluativas, los estudiantes deberán demostrar

  • Que han adquirido los conocimientos teóricos relativos a los contenidos de la asignatura y que su comprensión les permite llevarlos a la práctica [MECES-2 punto a, punto c]
  • Que pueden desarrollar soluciones a problemas que, si bien pueden ser similares a otros vistos anteriormente, presentan aspectos que son nuevos [MECES-2 punto f]

En relación a las competencias básicas asignadas a la asignatura, éstas quedan cubiertas especialmente en cuanto a los aspectos que se explicitan:

  • CB2: resolución de problemas dentro de su área de estudio.
  • CB5: desarrollo de habilidades de aprendizaje necesarias para estudios posteriores (acceso autónomo a documentación, hábitos de trabajo efectivos)

Finalmente, y en cuanto a la competencia transversal asociada a la asignatura (CT1: conocimiento tercera lengua) esta se trabaja a partir de las fuentes documentales que los estudiantes deben consultar, dado que todas ellas se encuentran en inglés. Todo el material escrito de la asignatura (notas, enunciados de problemas, enunciados de prácticas, ...) se distribuye exclusiva y únicamente en inglés.

Sistema de evaluación


La calificación final de la asignatura (QF) se calculará en función de la calificación de las prácticas de laboratorio (40%) y los ejercicios realizados durante el curso (60%)

 

Ca: calificación media de los ejercicios del curso

Pr: Calificación media de las prácticas

QF: Calificación final de la asignatura

 

QF = Ca si Ca <4

QF = 0.6· Ca + 0.4· Pr si Ca ≥ 4


Los estudiantes con QF <5 podrán realizar un examen de carácter "final" y recuperatorio. La calificación final (QF) máxima en caso de tener que hacer este examen será de 5.


Cualquier actividad realizada de manera fraudulenta o sin respetar las normas que para ella se especifiquen será valorada con 0 puntos y podrá comportar una calificación final (FM) de 0 puntos. Esto incluye, pero no se limita a, la copia y el plagio de prácticas y ejercicios independientemente del rol desarrollado (origen o destino).

 

El curso 20/21 y debido a las restricciones esperadas (y otros posibles) relacionadas con la Covidien-19 la calificación Ca obtendrá de un único examen final. El peso de esta calificación en la nota final será del 50%. El peso de Pr pasará a ser también del 50%. La formula para calcular la calificación final no variará.

Bibliografía


básico

Ben-Ari, M .. Principles of concurrente and distributed programming. 2006. Essex: Pearson, 2006. ISBN 9780321312839.

Palma Méndez, José Tomás et al ,. Programación concurrente. Madrid: International Thomson, 2003. ISBN 8497321847.

Complementario

Magee, Jeff; Kramer, Jeff. Concurrency: state modelos & Java programs. 2nd ed. Chichester: John Wiley & sonidos, 2006. ISBN
0470093552.