Fichas de asignaturas 2008-09
CÓDIGO | NOMBRE | |
Asignatura | 1711045 | PROGRAMACIÓN CONCURRENTE Y DISTRIBUIDA |
Descriptor | CONCURRENT AND DISTRIBUTED PROGRAMMING | |
Titulación | 1711 | INGENIERÍA TÉCNICA EN INFORMÁTICA DE SISTEMAS |
Departamento | C137 | LENGUAJES Y SISTEMAS INFORMATICOS |
Curso | ||
Duración (A: Anual, 1Q/2Q) | 2Q | |
Créditos ECTS | 4 |
Créditos Teóricos | 2,5 | Créditos Prácticos | 2,5 | Tipo | Optativa |
Para el curso | 2007-08: | Créditos superados frente a presentados | 100.0% | Créditos superados frente a matriculados | 90.5% |
- Análisis y síntesis de contenidos técnicos - Lectura comprensiva y escritura comprensible - Determinación del ámbito de la solución de un problema - Elección del nivel de abstracción de solución de un problema - Capacidad de planificación temporal de tareas - Elaboración de juicios críticos sobre contenidos - Capacidad de elaborar documentación técnicamente correcta
Cognitivas(Saber):
-Conocer el léxico estándar habitualmente utilizado en concurrencia. -Identificar la presencia de la concurrencia en un problema dado. -Protocolos básicos para el control de la concurrencia -Diseñar soluciones multihebradas -Diseñar soluciones distribuidas
Procedimentales/Instrumentales(Saber hacer):
-Redactar documentos de contenido técnico de acuerdo a una normas de redacción específicas y con unos estándares mínimos de calidad. -Programar en lenguaje java con una competencia razonable -Utilizar el compilador JCreator y las herramientas proporcionadas por el Java Development Standard Kit como herramientas básicas de desarrollo. -Implantar programas en java que utilicen múltiples hilos de ejecución. -Sincronizar y controlar programas java en exclusión mutua de varios hilos en ejecución. -Comunicar objetos java situados en máquinas diferentes mediante el uso de sockets en java. -Escribir código java para aplicaciones distribuidas simples utilizando como tecnología de soporte java/rmi con un dominio razonable de sus herramientas: rmiregistry, policytool y rmic. -
Actitudinales:
-Autoaprendizaje e independencia de criterio. -Conciencia crítica sobre el trabajo propio bien hecho. -Conciencia de la necesidad del esfuerzo y el trabajo personal como medio de lograr los objetivos fijados. -Conciencia de la necesidad de cumplir en tiempmo y forma con plazos prefijados, normas de redacción y entrega de productos, etc. -Conciencia de la necesidad de cumplir con las obligaciones en materia de asistencia a clase, trabajo personal, rendimiento y espíritu universitario que la legislación universitaria actualmente en vigor impone a sus alumnos.
La asignatura, teniendo en cuenta los alumnos a los que va dirigida, creemos que debe tener como objetivo entrar en los conceptos fundamentales que soportan los modelos de programación concurrente y distribuido, más allá del nivel del simple paradigma teórico de programación. Cabe plantear por tanto los siguientes objetivos con carácter muy general: a)Aprender con una profundidad y amplitud razonables el lenguaje de programación Java, con especial énfasis en los aspectos del lenguaje ligados a la concurrencia, y en los mecanismos de sincronización y control de entidades concurrentes que incorpora. b)Conocer los problemas planteados por que el hecho de que haya múltiples tareas en ejecución concurrente en un sistema, compitiendo por recursos compartidos, desde una perspectiva de memoria común y distribuida. c)Conocer las distintas soluciones que pueden darse a estos problemas, con diferentes grados de abstracción, introduciendo una visión de verificación formal. d)Aprender lo más básico de los modelos de programación distribuida desde un enfoque netamente práctico a nivel de sockets yde RMI y de modelos de objetos distribuidos utilizando el lenguaje Java como soporte.
Tema 1: Introducción a la Programación Concurrente y Distribuida (2 horas) 1.1 Concepto de Programación Concurrente. 1.1.1 Concepto de proceso y programa concurrente. 1.1.2 Definición de Programación Concurrente. 1.1.3 Justificación de la Programación Concurrente. 1.1.4 Modelo abstracto de Programación Concurrente. 1.1.5.1 Atomicidad y entrelazado de instrucciones. 1.1.5.2 Independencia del entorno de ejecución. 1.1.5.3 Irrepetibilidad de la secuencia de instrucciones. 1.1.5.4 Velocidad de ejecución: hipótesis de progreso finito. 1.2 Sincronización y Exclusión Mutua. 1.2.1 Notaciones para expresar la concurrencia. 1.2.1.1 Creación estática. 1.2.1.2 Creación dinámica. 1.2.1.3 El mecanismo fork-join. 1.2.1.4 La sentencia cobegin-coend. 1.2.1.5 Hilos Concurrentes. 1.2.2 Exclusión Mutua. 1.2.2.1 Los sistemas con memoria común y su problemática. 1.2.2.2 Necesidad de la exclusión mutua. 1.2.3 Sincronización. 1.3 Propiedades de corrección de los sistemas concurrentes. 1.3.1 Corrección Parcial. 1.3.2 Corrección Total. 1.3.3 Condiciones de Corrección de Djikstra. 1.4 Arquitecturas hardware para la Concurrencia. Tema 2: Fundamentos de Java para la Concurrencia (8 horas) 2.1. La Plataforma J2SE. 2.1.1 Unicode. Bytecodes. Java Virtual Machine. Compilación JIT. 2.1.2 Herramientas: javac, java, javadoc, appletviewer, rmic, rmiregistry, policytool, idlj, orbd, tnameserv 2.2 Fundamentos de Java 2.2.1 Estructura de un programa en Java. Ejemplos. 2.2.2 Clases, Campos y Métodos. 2.2.3 Instrucciones. 2.2.4 Estructuras Iterativas. 2.2.5 Estructuras Selectivas. 2.2.6 Tipos de Datos y Declaraciones. Clases de Envoltura. 2.2.7 Operadores y Expresiones. 2.2.8 E/S de carácter. 2.2.9 La unidad de biblioteca: paquetes. 2.2.10 Generando documentación: javadoc. 2.3. Clases y Orientación a Objetos. 2.3.1 Abstracción y Encapsulación de Datos. 2.3.2 Arrays y Cadenas de Caracteres. 2.3.3 Llamada a Métodos y paso de Argumentos. 2.3.4 E/S básica en Java. 2.3.5 Manejo básico de error. Excepciones. Jerarquía de Excepciones. 2.3.6 Modelo de Herencia en Java. 2.3.7 Breves notas sobre sobreescritura, sobrecarga y ligadura dinámica. 2.3.8 Interfaces. Implementación de interfaces. 2.4. Construcciones en Java. Clases Contenedoras. 2.4.1 Construcción avanzada de clases. Ejemplos. 2.4.2 Conversiones de tipo. 2.4.3 Construcción de un TDA lista circular. 2.4.4 Construcción de un TDA lista enlazada. 2.4.5 Asignación y gestión de almacenamiento. 2.5.6 Clases contenedoras de Interés: AbstractMap, ArrayList, Vector, Stack, HashMap, Collection y otras. Tema 3: Programación Concurrente en Java (6 horas) 3.1 Revisión del concepto de Hilo. Hilos en Java. 3 .2 Programación con hilos: creación y control. 3.2.1 Creación por Herencia de la clase Thread. 3.2.2 Creación por Implementación de la interfaz Runnable. 3.2.3Control de Hilos: run(), start(), join(), interrupt(), stop (), suspend(), sleep(). 3.3 Exclusión mutua entre hilos: métodos e instrucciones synchronized. 3.4 Sincronización: la clase Object: métodos wait(), notify() y notifyAll(). 3.5 Protocolos de la Concurrencia en Java. 3.5.1 Diseño de una clase semáforo. 3.5.2 Protocolo de Exclusión Mutua. 3.5.2 Protocolo de Sincronización. 3.5.3 Protocolo de Barrera Simple y Múltiple. 3.5.4 Protocolo del Productor-Consumidor. 3.6 Terminación de hilos. 3.7 E/S entre hilos. 3.8 Implementación de Monitores en Java. 3.8.1 Revisión del Concepto de Monitor. 3.8.2 Esquema General: sintaxis y semántica. 3.8.3 Ausencia de Var. de Condición. Condiciones de Guarda. El wait-set. 3.8.4 Uso correcto de los métodos wait() y notifyAll(). 3.8.5 Una técnica de diseño de monitores en Java. Tema 4: Programación Distribuida (6 horas) 4.1 Conceptos de Programación Distribuida 4.2 Mecanismos de Programación Distribuida 4.2.1 Remote Procedure Call. 4.2.2 Breve repaso de Conceptos. 4.2.3 Programación Distribuida de Bajo Nivel: sockets 4.2..4.0 Concepto de sockets 4.2.4.1 Introducción a los sockets en Java. 4.1.1 La clase ServerSocket. 4.2.4.1.2 La clase Socket. 4.3 Programación Distribuida con RMI en Java 4.3.1 Comparación de RMI con RPC. 4.3.2 Interfaces Remotas. Precompilador rmic. 4.3.3 Arquitectura de RMI: Stubs y Skeletons. 4.3.4 Generando resguardos: rmic. 4.3.5 Registro del servicio: rmiregistry. 4.3.6 Uso del Objeto Remoto. 4.3.7 Marshalling de objetos: la interfaz Serializable. 4.3.8 Seguridad: policytool. Tema 5: Introducción a la Programación de Dispositivos Móviles (2 horas) 5.1 Programación Java en telefonía móvil y PDA: J2ME. 5.1.1 Arquitectura de J2ME. 5.1.2 Máquina virtuales ligeras: CVM y KVM. 5.1.3 Configuraciones y Perfiles. 5.2 Concepto de MIDLET. 5.2.1 Ciclo de vida de un MIDLET. 5.2.2 API para programación de MIDLETS. 5.3 Configuraciones y Perfiles de interés en telefonía móvil desde J2ME. 5.3.1 CLDC y su API. 5.3.2 MIDP 2.0 y su API. 5.4 Aspectos Prácticos. 5.4.1 El Wireless Tool Kit. 5.4.2 Presentación del código de un MIDLET. 5.4.3 Compilación. 5.4.3.1 Compilación. 5.4.3.2 Preverificación. 5.4.3.3 Enpaquetamiento. 5.4.3.4 KToolBar en WTK. Tema 6: Introducción a la Programación Paralela (1 hora) 6.1 Modelos de Máquinas Paralelas. 6.2 Modelos de Programación Paralelos. 6.3 Métodos de programación. 6.3.1 Partición de datos. 6.3.2 Partición de funciones. 6.4 PVM (Parallel Virtual Machine). 6.5 jPVM (Java Parallel Virtual Machine).
El desarrollo de los contenidos teóricos se llevará a cabo mediante clases teóricas, con el apoyo de medios (proyector de transparencias o cañón de proyección) cuando sea necesario. En temas concretos se insistirá en el uso de una metodología formal con el objeto de transmitir al alumno la idea de que toda solución debe probarse correcta antes de ser implementada. Los contenidos prácticos irán precedidos de introducciones en la propia aula de prácticas, donde el profesor dará a los alumnos el soporte de programación necesario para abordar los casos prácticos con garantías. Los códigos objeto de análisis podrán ser descargados por el alumnos desde el web de la asignatura y compilados. Posteriormente, deberán desarrollar el código que de solución a los casos prácticos bajo ciertas especificaciones que se harán públicas a lo largo del curso.
Nº de Horas (indicar total): 100
- Clases Teóricas: 25
- Clases Prácticas: 25
- Exposiciones y Seminarios:
- Tutorías Especializadas (presenciales o virtuales):
- Colectivas:
- Individules:
- Realización de Actividades Académicas Dirigidas:
- Con presencia del profesorado:
- Sin presencia del profesorado:
- Otro Trabajo Personal Autónomo:
- Horas de estudio: 48
- Preparación de Trabajo Personal:
- ...
- Realización de Exámenes:
- Examen escrito: 2
- Exámenes orales (control del Trabajo Personal):
|
A) DE LOS EXÁMENES TEÓRICOS ESCRITOS, MEMORIAS DE PROBLEMAS Ó TEORÍA Y SIMILARES -Se calificarán de cero a diez puntos. Se obtiene Aprobado con una calificación igual o superior a cinco puntos. -Cada enunciado incluirá la calificación que se le atribuye entre corchetes. -Una pregunta teórica o problema se considera correcto únicamente si la solución que se proporciona es completamente correcta. En otro caso se considera incorrecta. -Una pregunta teórica o problema de múltiples apartados se considera correcto si todos los apartados que lo conforman son correctos. En cualquier otro caso es incorrecto y no puntúa. B) DEL EXAMEN PRÁCTICO Y DE LAS ASIGNACIONES DE PRÁCTICAS -Se realizará en ordenador. -El examen práctico se calificará con APTO O NO APTO. Se obtiene APTO cuando al menos el 50% de los enunciados del examen son correctos. -Las condiciones que una solución a un enunciado de examen debe cumplir para ser considerada correcta son: a) Los ficheros subidos a través del Campus Virtual que conforman el examen práctico se ajustan al número, formato y nomenclatura de nombres explicitados por el profesor en el documento de examen. b)El contenido de los ficheros es el especificado por el profesor en el documento de examen. c)Para ficheros elaborados con JFLAP (en su caso), se pueden abrir y procesar con el software citado, y realizan un procesamiento técnicamente correcto, según el enunciado de que se trate. d)Para ficheros elaborados en lenguaje java (en su caso), la compilación y ejecución son correctas, y el procesamiento es técnicamente correcto, según el enunciado de que se trate. SISTEMAS Y TÉCNICAS DE EVALUACIÓN Se aplicará el sistema de evaluación continua de los alumnos por defecto. Los alumnos que por motivos personales o laborales renuncien al mismo podrán acogerse a la prueba final, pero deberán comunicar por escrito al profesor su renuncia al sistema de evaluación continua. Siendo la asignatura del segundo cuatrimestre, este modelo se aplicará exclusivamente durante su periodo lectivo. En convocatorias posteriores (Septiembre, Febrero) el alumno deberá concurrir a los exámenes teórico y práctico de la asignatura con el temario completo. La evaluación continua constará de los siguientes apartados: a) Asistencia y participación, objetivables mediante aportaciones al foro, glosario o wiki de la asignatura. Hasta 4 puntos. b) Memoría de Teoría: El alumno desarrollará una memoria de teoría de acuerdo a las especificaciones que se harán públicas a lo largo del curso. Hasta 6 puntos. c) Asignaciones de Prácticas: semanal o bisemanalmente se propondrá al alumno una asignación práctica, compuesta de un conjunto de enunciados a resolver mediante el lenguaje java. El alumno desarrollará el código que dé solución a la asignación, de acuerdo a las especificaciones hechas públicas por el profesor en el documento correspondiente, y subirá los ficheros resultantes a través del campus virtual. Cada asignación se calificará con APTO o NO APTO. Se obtiene APTO global en prácticas si se han entregado todas las asignaciones, superándose al menos el 60% de las mismas. La calificación por evaluación continua será suma de las calificaciones obtenidas en los apartados a) y b), siempre que se haya obtenido APTO en el apartado c) Aquellos alumnos que superen la parta teórica y no la práctica o al contrario, podrán concurrir a los exámenes ordinarios de la convocatoria de Junio y superar la parte pendiente. La evaluación ordinaria constará de un examen teórico por escrito y otro práctico sobre computador y la calificación se obtendrá por aplicación de la siguiente ecuación: CALIFICACIÓN = (0.4*CT)+(0.6*CP) siendo CT la nota del examenes teórico y CP la calificación del examen práctico.
RECURSOS BIBLIOGRAFICOS BÁSICOS [Arn01] Arnold, K., Gosling, J. & Holmes, D. El Lenguaje de Programación Java. Addison-Wesley, 2001. [Ben90] Ben-Ari, M. Principles of Concurrent and Distributed Programming. Prentice-Hall,1990. [Bre95] Breshears, C. A Beginner?s Guide to PVM-Parallel Virtual Machine. Publicación electrónica del Joint Institute for Computational Science, 1995. [Col94] Coulouris, G., Dollimore, J. and Kindberg, T. Distributed Systems. Concept and Design. 2nd ed., Addison-Wesley, 1994. [Eck00] Eckel, B. Piensa en Java. Prentice Hall, 2002. [Hil00] Hilderink, G., Broenink, J., Bakkers, A. & Schaller, N. Communicating Threads for Java. Draft, disponible en formato electrónico en: http://www.ce.utwente.nl/javapp/downloads/CTJ_A4.pdf [Hoa85] Hoare. C.A.R. Communicating Sequential Processes. Prentice-Hall, 1985. [Lea01] Lea, Doug. Programación Concurrente en Java. Addison-Wesley, 2001. [Mul93] Mullender, S (ed.) Distributed Systems, Second Edition. Addison- Wesley, 1993. [Mur89] Murata, T Petri Nets: Properties, Analysis and Applications. Proceedings IEEE vol. 77, no. 4. April, 1989. [Orf02] Orfali, R., Harkey, D. & Edwards, J. Cliente/Servidor y Objetos. Guía de Supervivencia. Oxford University Press, 2002. [Orf98] Orfali, R. & Harkey, D. Client/Server Programming with Java and Corba John Wiley and Sons, Inc. 1998. [Pal03] Palma, J.T y otros. Programación Concurrente. Thompson Editores, 2003. [Per90] Pérez, J.E. Programación Concurrente. Editorial Rueda, 1990. [Pri03] Prieto, Manuel J. Curso de J2ME. Disponible en formato electrónico. 2003. [Rif92] Rifflet, J.M. Comunicaciones en Unix. McGraw-Hill, 1992. [Rob96] Robbins, K. & Robbins, S. Practical Unix Programming: A Guide to Concurrency, Communication and Multithreading. Prentice Hall, 1996. [Sun03] Sun mycrosystems. Wireless Tool Kit, Version 2.1. Java 2 Platfom Micro Edition. Sun Mycrosystems, 2003. Disponible en http://java.sun.com [Tan93] Tanenbaum, A.S. Sistemas Operativos Modernos. Prentice-Hall, 1993. [Vin97] Vinoski, S. CORBA: Integrating Diverse Applications Within Distributed Heterogeneus Environments. IEEE Communications Magazine, Vol. 35, No 2, February 1997. [Wan00] Wang, P. Java. International Thompson Editores, 2000. RECURSOS BIBLIOGRAFICOS DE CONSULTA [And91] Andrews, G.R. Concurrent Programming : Principles and Practice. Benjamin-Cummings, 1991. [Arm96] Armstrong, J., Virding, R., Wiksröm, C. and Williams. M. Concurrent Programming in Erlang. Prentice-Hall, 1996. [Bac93] Bacon, J. Concurrent Systems: an integrated approach to operating systems, database, and distributed systems. Addison-Wesley, 1993. [Bak96] Baker, L. and Bardley, J. Parallel Programming. McGraw-Hill, 1996. [Bar96] Barbosa, V.C. An Introduction to Distributed Algorithms. The Mit Press, Scientific and Engineering Computation Series, 1996. [Bir84] Birrell, A.D. and Nelson, B.J. Implementing remote procedure calls. ACM Trans. on Computer Systems, 2 (1), 88-95, 1984. [Bur93] Burns, A. Concurrent Programming. Addison-Wesley, 1993. [Fos95] Foster, I. Designing and Building Parallel Programs: Concepts and Tools for Parallel Software Engineering. Addison-Wesley, 1995. [Geh88] Gehani, N. and McGettrick, A. Concurrent Programming. Addison-Wesley, 1988. [Gos91] Goscink, A. Distributed Operating Systems: the Logical Design. Addison- Wesley, 1991. [Hin95] Hinchey, M. Concurrent Systems: formal development in CSP. McGraw- Hill, 1995. [Hul94] Hulle, M., Crookes, D. and Sweeney, P. Parallel Processing: The Transputer and Its Applications. Addison-Wesley, 1994. [Kle96] Kleiman, S., Shah, D. and Smaalders, B. Programming with Threads. Prentice-Hall, 1996. [Lan93] Langsford, A. and Moffett, J. Distributed Systems Management. Addison- Wesley, 1993. [Lew96] Lewis, B. and Berg, D. J. Threads Primer : A Guide to Mutithread Programming. Prentice-Hall, 1996. [Man88] Mani, K and Jadayev, M. Parallel Programming Design : a foundation. Addison-Wesley, 1988. [Mil94] Milner, R. Communication and Concurrency. Prentice-Hall, 1994. [Shu97] Shuey, R. and Spooner, D. The Arquitcture of Distributed Computer Systems. Addison-Wesley, 1997. [Sno92] Snow, C. R. Concurrent Programming. Cambridge University Press, 1992. [Wil95] Wilson, G. V Practical Parallel Programming. The Mit Press, Scientifica and Engineering Computation Series, 1995. [Wil96] Wilson, G.V. and Lu, P. Parallel Programming Using C++. The Mit Press, Scientific and Engineering Computation Series, 1996.
Pulse aquí si desea visionar el fichero referente al cronograma sobre el número de horas de los estudiantes.
El presente documento es propiedad de la Universidad de Cádiz y forma parte de su Sistema de Gestión de Calidad Docente.