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