Download guía de la asignatura Programación Concurrente

Document related concepts
no text concepts found
Transcript
Guía Particular de Asignatura
II Plan de Innovación y Promoción de la Actividad Docente. Proyecto: Elaboración de las Guías ECTS en las asignaturas
de 2º Curso, adscritas al departamento I.E.S.I.A, en las titulaciones de Ingeniero Técnico en Informática de Gestión y de
Sistemas.
DATOS BÁSICOS DE LA ASIGNATURA
NOMBRE:
Programación Concurrente
CÓDIGO:
17217
TIPO
Obligatoria
AÑO DE PLAN DE ESTUDIOS:
2004
Totales
Teóricos
Prácticos
CRÉDITOS:
6,75
4,5
2,25
L.R.U.
5,40
E.C.T.S.
CURSO:
2º
CUATRIMESTRE: 2º
CICLO:
1º
DATOS BÁSICOS DE LOS PROFESORES
Miguel Ángel Rodriguez Román
NOMBRE:
CENTRO/DEPARTAMENTO:
Diesia
ÁREA:
Lenguajes y Sistemas Informáticos
Nº DE DESPACHO: 65
TELÉFONO:
87372
E-MAIL:
miguel.rodriguez@diesia.uhu.es
URL WEB:
www.uhu.es/mangel.rodriguez
DATOS ESPECÍFICOS DE LA ASIGNATURA
1. Descriptor según BOE
Programación Concurrente y Paralela
2. Situación
2.1. Prerrequisitos
No existen prerrequisitos establecidos.
2.2. Contexto dentro de la titulación
Esta asignatura ubicada en el segundo cuatrimestre de segundo curso requiere
de los conocimientos adquiridos en primero en las asignaturas:
- Metodología de la Programación I
- Estructuras de Datos I
- Arquitectura de Computadores I
Además de los conocimientos adquiridos en la asignatura del primer cuatrimestre
de segundo:
- Metodología de la Programación II
- Estructuras de Datos II
- Sistemas Operativos
- Arquitectura de Computadores II
Finalmente, los conocimientos adquiridos en esta asignatura sirven de base para
las asignaturas de tercer curso:
- Ampliación de Sistemas Operativos
- Arquitectura de Computadores III
- Robótica
2.3. Recomendaciones
Se recomienda haber cursado las asignaturas de primer y segundo curso
indicadas en el apartado anterior antes de comenzar esta asignatura.
3. Competencias que se desarrollan
3.1. Genéricas o transversales
Instrumentales:
Capacidad de análisis y síntesis
Capacidad de organización y planificación
Resolución de problemas
Comunicación oral en la lengua nativa
Personales:
Trabajo en equipo
Habilidades en las relaciones interpersonales
Sistémicas
Razonamiento crítico
Aprendizaje autónomo
Motivación por la calidad
3.2. Específicas
Cognitivas(saber):
Reconocer la problemática de un sistema concurrente
Identificar los puntos críticos en un programa con varios procesos concurrentes
Diferenciar los fundamentos de la programación concurrente y paralela
Conocer las diferentes herramientas para resolver la problemática en sistemas concurrentes
Aprender a desarrollar programas concurrentes en Java
Aprender a validar programas concurrentes mediante redes de peri
Procedimentales/Instrumentales(saber hacer):
Utilizar las diferentes técnicas para implementar programas concurrente
Implementar correctamente programas concurrentes
Implementar programas concurrentes en Java
Actitudinales(ser):
Reconocer y saber abordar un problema concurrente
Tener la capacidad de decidir la técnica a utilizar para un problema concreto
4. Objetivos
Presentar al alumno un paradigma de la programación diferente de la programación secuencial
tradicional, como es la programación concurrente.
Para este fin, los objetivos principales son:
 Establecer los fundamentos de la programación concurrente.
 Estudiar las técnicas y las herramientas para la comunicación y sincronización de procesos
tanto en un entorno con memoria compartida como en un entorno distribuido.
 Implementar programas que necesiten el uso de técnicas de programación concurrente.
 Utilizar el lenguaje de programación JAVA para resolver la problemática en un entorno
concurrente.
 Presentar el lenguaje de programación ADA.
5. Metodología
5.1. Trabajo con presencia del profesor
Clases teóricas
Clases prácticas
Exposiciones y seminarios
Nº de horas
31,50
22,50
3,50
3
Colectivas
Individuales
Realización de actividades académicas dirigidas:
Planificación de un trabajo en grupo 2
Exposición del trabajo en grupo 2
Resolución de problemas en grupos 3
Nº total de horas
67,50
Tutorías especializadas
5.2. Trabajo autónomo del alumno
Estudio de las clases teóricas
Estudio de la clases prácticas
Preparación de las actividades académicas dirigidas
5.3. Realización de exámenes
Realización de exámenes escritos
Realización de exámenes orales
Nº total de horas
Trabajo total del estudiante
Nº de horas
47,25
22,50
18,75
Nº de horas
5
1
6
162,00
6. Técnicas docentes
Clases Teóricas y Problemas de Aula
Clases de Problemas en grupo
Clases de Laboratorio
Planificación de trabajos
6.1. Desarrollo y justificación
Clases teóricas y de problemas de aula
Las 31,50h de clase de teoría se impartirán combinando clases magistrales y problemas al total de
alumnos del grupo de teoría. Durante estas sesiones el alumno adquirirá los conceptos teóricos,
apoyados con ejemplos y ejercicios aclaratorios, que le capacitarán para alcanzar las
competencias establecidas en el apartado 3.2 de esta guía.
Para el desarrollo de las clases se utilizaran transparencias, apoyadas con el uso de la pizarra
cuando sea necesario
Clases de Laboratorio
Las 22,50h de clases prácticas se impartirán en el laboratorio utilizando un ordenador personal para
cada alumno, del total de grupo de prácticas. En estas sesiones cada alumno de forma individual
deberá implementar diferentes problemas concurrentes utilizando Java como lenguaje de
programación. El objetivo de estas sesiones es enfrentar al alumno con un desarrollo práctico que
le permitirá adquirir las competencias procedimentales específicas, así como la mayoría de las
competencias transversales.
Planificación de trabajos
En estas sesiones el profesor servirá de guía a los alumnos a la hora de concretar la realización de un
trabajo. Los alumnos se unirán en grupo de entre 4 y 6 personas para la realización del mismo.
Cada grupo contará con un listado de trabajos que el profesor presentará y se facilitará
información para que cada grupo decida su trabajo. Una vez el grupo tome la decisión de trabajo
a desarrollar debe comunicarlo al profesor con objeto de establecer fecha de entrega. Con este
trabajo se pretende fomentar el trabajo en equipo y favorecer las relaciones interpersonales.
Una vez el trabajo haya sido desarrollado el profesor concretará una fecha para la presentación del
trabajo. Además de para la evaluación del trabajo desarrollado, la presentación tiene como
finalidad enfrentar al alumno con una exposición oral.
Clases de problemas en grupo
Las sesiones de problemas en grupo se realizaran con un número de alumnos reducido (entre 15 y 20
alumnos) de forma que se dividan en dos grupos que trabajaran sobre un mismo problema. En
estas sesiones se planteará un problema concurrente y cada grupo debe dar una solución al
mismo.
Tutorías Especializadas Colectivas
Al final del cuatrimestre, se realizaran dos sesiones de 1,5h para la resolución de dudas y realización
de problemas propuestos por los alumnos.
Exposiciones y Seminarios
Para que los alumnos conozcan otros lenguajes de programación concurrentes se ofrecerá un
seminario sobre el lenguaje de programación ADA.
7. Bloques temáticos
Introducción a la Programación Concurrente
Técnicas y Herramientas para la Programación Concurrente
Validación de Programas Concurrentes
8. Bibliografía
8.1. General
1. J.T. Palma y otros. Programación Concurrente. Tomson (Paraninfo, S.A.), 2003.
2. G.R. Foundations of Multithreaded, Parallel, and Distributed Programming. Addison Wesley,
2000.
3. Stephen J. Hartley. Concurrent Programming. The Java programming language. Oxford
University Press, 1998.
8.2. Específica
1.
2.
3.
4.
5.
6.
7.
8.
9.
Ben Ari. Principles of concurrent and distributed programming. Prentice Hall, 1990.
Alan Burns y Geoff Davies. Concurrent Programming. Addison-Wesley, 1993.
Jorge E. Pérez. Programación Concurrente. Ed. Rueda, 1990.
J. Magee y J. Kramer. Concurrency: State Models and Java Programs John Wiley and Sons.
1999.
Doug Lea. Programación Concurrente en Java: Principios y Patrones de Diseño. AddisonWesley, cop. 2000.
Scott Oaks, Henry Wong. Java threads O'Reilly, 1999.
Fencott, C. Formal Methods for Concurrency. International Thomson Pub. Company, 1996.
Andrew G.R. Concurrent programming: Principles and Practice. The Benjamin Cumming
Publishing Company, 1991.
Alan Burns y Andy Wellings. Concurrent programming in ADA. Cambridge University Press,
1998.
9. Técnicas de evaluación
Examen Teórico-Práctico escrito
Examen de Laboratorio
Evaluación de Trabajos
Evaluación de Problemas
9.1. Criterios de evaluación y clasificación
Examen Teórico-Práctico escrito
- El examen Teórico-Práctico consistirá en una prueba escrita compuesta por un test y dos o
tres problemas prácticos. La puntuación de esta prueba tendrá el 60% del total, repartida en
un 20% para el test y un 40% para los problemas.
- En el test cada pregunta acertada se puntuará positivamente y cada pregunta errónea
negativamente, además se establecerá una puntuación mínima por debajo de la cual no se
alcanzará ninguna puntuación.
- El examen incluirá algunas preguntas y/o problemas sobre el lengueja de programación ADA
impartido como seminario.
Examen de Laboratorio
- Esta prueba consistirá en la implementación en el lenguaje de programación Java de un
problema concurrente. Esta prueba no es valorada de forma parcial, teniendo que alcanzar el
alumno la calificación de apto que le otorará un 20% del total.
Evaluación de trabajos
- Los trabajos realizados en grupo tendrán una calificación máxima del 10% del total de la nota.
La calificación se otorgará a cada alumno que integre el grupo. Para la obtención de la nota el
grupo tendrá que presentar el trabajo al profesor. Inicialmente se dividirá la presentación del
trabajo en varias parte y el profesor decidirá que miembro de grupo presentará cada parte.
Evaluación de Problemas
- Los problemas desarrollados en grupos permiten obtener una calificación del 10% sobre el
total. Una vez el problema ha sido resuelto por el grupo, un portavoz comunica la solución
planteada. El profesor decide que miembro del grupo desarrollará la solución. La nota de esta
prueba se divide en tres partes para cada grupo: un 5% establecido por el profesor, un 2,5%
otorgada por los miembros del grupo y el 2,5% restante por los miembros del otro grupo.
Resumen: 60% ExEscrito + 20% ExLaboratorio + 10% Trabajos + 10% Problemas
10.
Organización docente semanal
(Sólo indicar el número de horas que a ese tipo de sesión va a dedicar el estudiante cada semana)
Nº de
horas
Tutorías
Especializadas
Colectivas
Otras actividades
Sesiones
Prácticas
(problemas)
Sesiones
Prácticas
3ª Semana
1.5
1.5
1.5
0.0
1.5
0.0
1.5
1.5
1.5
0.0
0.0
0.0
0.0
0.0
1.5
0.0
0.0
0.0
4ª Semana
1.5
0.0
1.5
0.0
0.0
2.0
5ª Semana
1.5
1.0
2.0
1.5
2.0
2.0
2.0
1.5
1.5
0.0
1.0
0.0
1.0
1.0
1.0
0.0
1.5
1.5
1.5
1.5
1.5
1.5
1.5
1.5
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
2.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
1.0
Sesiones
Teóricas
Exposiciones y
Seminarios
1er Cuatr.
1ª Semana
2ª Semana
6ª Semana
7ª Semana
8ª Semana
9ª Semana
10ª Semana
11ª Semana
12ª Semana
Exámenes
Horas
13ª Semana
1.5
0.0
1.5
0.0
0.0
2.0
14ª Semana
0.0
0.0
21.5
0.0
0.0
9.0
1.5
1.5
22.5
3.5
0.0
3.5
0.0
3.0
5.5
0.0
1.0
7.0
15ª Semana
Actividad
Temas de
teoría a
tratar
0.0
0.0
0.0
TEMA 2 - 3
0.0
TEMA 3
TEMA 3
Problemas Grupo
0.0
0.0
0.0
0.5
0.0
0.0
0.0
0.0
Exposición
Trabajo grupo
1.0
Problemas Grupo
0.0
0.5
2+4
Planificación
Trabajo grupo
Problemas Grupo
Distribuya el número de horas que ha respondido en el punto 5 en 15 semanas para una asignatura cuatrimestral y 30 para una anual
TEMA 1
TEMA 2
TEMA 3
TEMA 3 - 4
TEMA 4
TEMA 4
TEMA 4
TEMA 4 - 5
TEMA 5
TEMA 5
11.
Temario desarrollado
TEMA 1.- PROGRAMACIÓN CONCURRENTE.
1. Introducción
2. Programación Secuencial, Paralela y Concurrente
3. Objetivos de la Programación Concurrente
4. Requisitos de la Programación Concurrente
5. Propiedades de los Programas Concurrentes
6. El Concepto de Proceso e Hilo
7. Notación Algorítmica. Los Hilos en Java.
8. Ejemplos Típicos de Programas Concurrentes
TEMA 2.- EXCLUSIÓN MUTUA.
1. Introducción
2. El problema de la Exclusión Mutua
3. Intentos de solución
3.1 Primer Intento: Alternancia
3.2 Segundo Intento: Falta de Exclusión
3.3 Segundo Intento: Interbloqueo
3.4 Segundo Intento: Espera Indefinida
4. Algoritmos correctos
4.1 Algoritmo de Dekker
4.2 Algoritmo de Peterson
4.3 Algoritmo de Lamport
4.4 Algoritmo de Dijkstra
TEMA 3.- CONCURRENCIA EN MEMORIA COMPARTIDA.
1. Semáforos
2. Regiones Críticas y Regiones Críticas Condicionales
3. Monitores
4. Recursos o Unidades Protegidas
TEMA 4.- CONCURRENCIA MEDIANTE PASO DE MENSAJES.
1. Introducción
2. Buzones
3. Rendez-vous estilo CSP (canales)
4. Rendez-vous extendido (estilo ADA)
5. Método de Invocación Remota (RMI) en Java
TEMA 5.- ESPECIFICACIÓN FORMAL. VERIFICACIÓN DE PROGRAMAS CONCURRENTES
1. Introducción
2. Redes de Petri
3. Especificación de programas concurrente
4. Verificación de programas concurrentes
12.
Mecanismos de control y seguimiento
Establecidas por la Universidad