Información general


Tipo de asignatura: obligatoria

Coordinador: Alfonso Palacios González

trimestre: Segundo trimestre

Créditos: 6

Profesorado: 

Enric Sesa Nogueras

Idiomas de impartición


Las clases están en catalán. La mayor parte de la documentación (incluidos los enunciados de prácticas y exámenes) están en inglés. 

Competencias


competencias básicas
  • B2_Que los estudiantes sepan aplicar sus conocimientos en su trabajo o vocación de una forma profesional y tengan las competencias que demuestran mediante la elaboración y defensa de argumentos y la resolución de problemas dentro de su área de estudio

  • B5_Que los estudiantes hayan desarrollado aquellas habilidades de aprendizaje necesarias para emprender estudios posteriores con un alto grado de autonomía

Competencias específicas
  • EFB5_Conocimiento de la estructura, organización, funcionamiento e interconexión de los sistemas informátis, los fundamentos de su programación y su aplicación para la resolución de problemas propios de la ingeniería

  • EIS1_Capacidad para desarrollar, mantener y evaluar servicios y sistemas software que satisfagan todos los requisitos del usuario y que se comporten de forma fiable y eficiente, sean asequibles de desarrollar y mantener y cumplan normas de calidad, aplicando las teorías, principios, métodos y prácticas de la ingeniería del software

  • EIS4_Capacidad de identificar y analizar problemas y diseñar, desarrollar, implementar, verificar y documentar soluciones software sobre la base de un conocimiento adecuado de las teorías, modelos y técnicas actuales

competencias transversales
  • T1_Que los estudiantes conozcan un tercer idioma, que será preferentemente el inglés, con un nivel adecuado de forma oral y por escrito, de acuerdo con las necesidades que tendrán las graduadas y graduados en cada titulación

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.

Esta asignatura debería cursarse después de haber superado la asignatura Sistemas Operativos

 

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 solicitará a los estudiantes que resuelvan y ejercicios. 

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),
  • NIC7
  • 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 (Pr, 50%) y de un examen final (Ex, 50%)

 

QF = Ex si Ex< 4

QF = 0.5·Ex + 0.5·Pr si Ex ≥ 4


Los estudiantes con QF < 5 podrán realizar un examen de recuperación que sustituirá a la primera calificación Ex en el cálculo de QF. En caso de tener que realizar el examen de recuperación, las calificaciones finales en el intervalo [5, 7.5) serán redondeadas a 5. Las calificaciones finales en el intervalo [7.5, 10] serán redondeadas a 7.


Es responsabilidad del alumno evitar el plagio en todas sus formas. En caso de detectar un plagio, independientemente de su alcance, en alguna actividad evaluativa (incluidas las prácticas), se aplicará el artículo 8 de la normativa de evaluación que comporta el suspenso automático de la asignatura sin posibilidad de recuperación. Además, el profesor comunicará a la Jefa de Estudios la situación para que tome medidas aplicables en materia de régimen sancionador. En el contexto de esta asignatura, plagio también significa utilizar y/o adaptar código que no se haya desarrollado de forma totalmente individual (o en el seno del grupo en el caso de actividades grupales). Facilitar el código que da lugar al plagio es también una forma de plagio y será tratado por igual. De forma resumida podemos decir que las actividades evaluativas deben resolverse de forma estrictamente no colaborativa (en el caso de actividades en grupo la colaboración no puede trascender el seno del grupo). 

 

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.