Usted está aquí: Inicio web asignaturas

Fichas de asignaturas 2007-08


  CÓDIGO NOMBRE
Asignatura 1710034 PROGRAMACIÓN CONCURRENTE Y DISTRIBUIDA
Titulación 1710 INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN
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

 

Profesorado
Ignacio Pérez Blanquer (coordinador)
Objetivos
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, de canales, de RPC y de modelos
de objetos distribuidos utilizando el lenguaje Java como soporte.
Programa
Tema 1. Conceptos fundamentales

1.1.  Introducción
1.2.  Concepto de programación concurrente
1.2.1.  Programa y proceso
1.2.2.  Concurrencia.
1.2.3.  Programación concurrente
1.3.  Beneficios de la programación concurrente
1.3.1.  Velocidad de ejecución
1.3.2.  Solución de problemas inherentemente concurrentes
1.4.  Concurrencia y arquitecturas hardware
1.4.1.  Sistemas monoprocesador
1.4.2.  Sistemas multiprocesador
1.5.  Especificación de ejecución concurrente
1.6.  Características de los sistemas concurrentes
1.7.  Problemas inherentes a la programación concurrente
1.7.1.  Exclusión mutua
1.7.2.  Condición de sincronización
1.8. Corrección de programas concurrentes



Tema 2.  Introducción al lenguaje Java. (I)

2.1. Carácterísticas del lenguaje Java.
2.2. Compilación y ejecución de programas.
2.2.1. Compilador Java.
2.3. Variables y constantes.
2.4. Operadores y precedencia de operadores en Java.
2.5. Expresiones y sentencias.
2.5. Sentencias de control de flujo.
2.6. Sentencias de bucle.
2.7. Clase System.
2.8. Secuencias de escape.


Tema 3. Clases en Java (II)

3.1. Arbol de clases. Tipos de clases.
3.2. Declarar, inicializar y utilizar un objeto en Java.
3.3. Referenciar variables de un objeto.
3.3.1. Sentencia “static”.
3.4. Un primer objeto en Java.
3.5. Eliminar objetos Java.
3.6. Inner class.
3.7. Interfaces.
3.7.1. Clases anónimas.


Tema 4. Paquetes. (III)

4.1. Sentencia Import.
4.2. Archivos JAR.
4.3. Classpath.
4.4. Creación de paquetes. Árbol paquetes o subpaquetes.
4.5  La clase “Objetc”.
4.6. Conversión de tipos.
4.7. Algunas clases importantes: Math, Integer, Random, String Tokenizer,
Runtime.


Tema 5. Aproximación a la solución de los problemas de la programación
concurrente

5.1. Introducción
5.2. Tipos de sincronización y su solución.
5.2.1.  Exclusión mutua
5.2.2  Condición de sincronización
5.2.3.  Soluciones a los dos tipos de sincronización
5.3. La  Espera-Ocupada para la exclusión mutua
5.3.1.  Algoritmos no eficientes
5.3.2.  Algoritmo de Dekker.
5.3.3.  Algoritmo de Peterson
5.3.4.  Algoritmo incorrecto de Hyman
5.3.5.  Algoritmo de Eisenbag-McGuire.
5.3.6.  Algoritmo de Lamport.
5.4. Soluciones hardware


Tema 6. Vectores y matrices.  (IV)

6.1.  Secuencias de variables.
6.2.  Matrices unidimensionales.
6.3.  Matrices bidimensionales.
6.3.1.  Clase Vector.
6.3.2.  Interface Enumeration
6.3.3.  Hashmap


Tema 7. Herencia: Subclases y superclases. Errores y excepciones. (V)
7.1. La herencia simple.
7.1.1. ¿Qué variables miembro hereda una subclase?
7.2. Escribir clases, atributos y métodos finales.
7.3. Clases y métodos abstractos.
7.4. Jerarquía de composición.
7.5. La jerarquía de las excepciones.
7.6. Uso de try, match y finally.
7.6.1. Pila de llamadas.
7.7. Lanzamiento de excepciones.
7.8. Captura de excepciones más genéricas.
7.9. Crear excepciones.


Tema 8. Procesos e hilos (VI)

8.1. Procesos
8.1.1.  Ciclo de vida de un proceso
8.1.2.  Disposición en memoria de un proceso
8.2.  Declaración de procesos
8.2.2.  Estados de un proceso.
8.2.3.  La gestión de procesos.
8.2.4.  Planificación de procesos.
8.3. Hilos
8.3.1.  Estándares de hilos
8.3.2.  Implementación de hilos
8.3.3.  Planificación de hilos
8.4. Hilos en Java
8.4.1.  Hilos y objetos
8.4.2.  Creación de hilos
8.4.3.  Objeto autónomo en un hilo
8.4.4.  Estados de un hilo en Java
8.4.5.  Planificación y Prioridades
8.4.6.  La clase Thread


Tema 9. Semáforos

9.1. Introducción
9.2. Definición de semáforo
9.3. Resolución de problemas usando semáforos
9.3.1.  Exclusión mutua y condición de sincronización.
9.3.2.  Problemas clásicos
9.4.  Implementación de semáforos
9.4.1.  Implementación de semáforos como variables enteras..
9.4.2.  Implementación de semáforos como variables enteras
no negativas
9.5. Sincronización en Java
9.3.1. Exclusión mutua en Java
9.5.2. El caso de las variables volátiles
9.5.3. Condición de sincronización en Java
9.5.4. lmplementaci6n de semáforos con las primitivas de Java
9.6. Inconvenientes del mecanismo de los semáforos


Tema 10: Monitores.

10.1. Introducción.
10.2. Definición de monitor.
10.3. Sincronización de monitores.
10.4. Resolución de problemas usando monitores.
10.5 Implementación de monitores con semáforos.
10.6. Monitores en Java.


Tema 11: Introducción a la Programación Distribuida

11.1. Conceptos de Programación Distribuida.
11.2. Mecanismos de la Programación Distribuida.
11.3. Modelos de objetos distribuidos.
11.4. RMI en Java.
Metodología
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.
Criterios y Sistemas de Evaluación
La evaluación tendrá en cuenta aspectos teóricos y prácticos, aunque
se pondrá un especial énfasis en la capacidad que el alumno adquiera para la
resolución de problemas mediante programas concurrentes.
La parte teórica se evaluará mediante una prueba objetiva que se
desarrollará por escrito. Esta parte teórica constara de una serie de
preguntas en formato “cuestión” para aplicar los conocimientos adquiridos.
Podrá formar parte esencial de la evaluación la elaboración por parte del
alumno de, al menos, un trabajo planteados por el profesor y desarrollados de
acuerdo con los objetivos y metodologías estudiados en la asignatura.

Durante el curso se hará un seguimiento especial y la consiguiente
valoración de aquellos alumnos que por su dedicación continuada e interés por
la asignatura merezcan una consideración particular en cuanto a evaluación y
calificación.

La parte práctica pesará en la calificación final entre un 60 y un
70%, y la parte teórica entre un 40 y un 30%. Aunque cifras sólo son
aproximadas.
Recursos Bibliográficos
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.

RECURSOS DE INFORMACIÓN
Son recursos disponibles en forma de páginas web en Internet. Se encuentran
recogidos mediante enlaces en la sección ?Enlaces? de la página web de la
asignatura.
El url directo a estos recursos es:

http://webs.ono.com/lenguaje.java

El presente documento es propiedad de la Universidad de Cádiz y forma parte de su Sistema de Gestión de Calidad Docente.