Usted está aquí: Inicio web asignaturas

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%

 

Profesorado
Antonio Tomeu Hardasmal (coordinador y profesor de teoría)
Profesor de prácticas: pendiente de contratación
Situación
Prerrequisitos
La asignatura es completamente autocontenida, y en consecuencia, el conjunto
de prerrequisitos necesarios para cursarla con garantías es mínimo.
Consideramos aconsejable que el alumno haya cursado y superado las asignaturas
Introducción a la Programación y Metología de la Programación, e igualmente
Sistemas Operativos. Es también aconsejable tener nociones básicas de
orientación a objetos.
Contexto dentro de la titulación
Optativa de Tercer curso.
Recomendaciones
Se hacen al alumno las siguientes recomendaciones:

1) Más vale un mal libro que muchos buenos apuntes: por tanto, para cada tema
concreto del curso se le propondrán como material de revisión/trabajo/estudio
un mínimo de dos y un máximo de cuatro capítulos de referencias concretas (en
inglés, claro está). También se le proporcionarán unos apuntes (en
castellano), que como mucho debería usar como material de apoyo, pero nunca
como texto base.

2) La copia de apuntes en clase ES UNA PÉRDIDA DE TIEMPO: por tanto, como
profesor haré lo posible para que no tenga que copiar apuntes en clase,
proporcionándole en la página de la asignatura con carácter previo a su
explicación todo el material necesario para la preparación de la misma. En
consecuencia, si copia apuntes, es porque es usted un copiador compulsivo;
pero sepa que distraen su atención y suelen ser fuente de errores en el
estudio posterior, ya que lo que se copia mal se estudia peor.

3) Una clase comienza antes de ser explicada y continua tras ser explicada: o
lo que es lo mismo, llegar a clase a ver qué nos cuenta hoy este buen señor es
un error. La mecánica de trabajo que les recomiendo a lo largo del curso para
preparar una clase debe seguir las siguientes fases:

1. Lectura y revisión previa de los materiales indicados en el cronograma
del curso para esa clase en concreto. Dicho cronograma estará disponible en la
página virtual del curso cuando comience este. En él se establecerá la fecha
(aproximada) donde se impartirá cada tópico del temario oficial, el material
de lectura para esa clase en concreto, los problemas recomendados para
ejercitar los contenidos teóricos explicados, y en ocasiones alguna tarea
adicional de interés.

2. Asistencia a clase. Dado que no necesita tomar apuntes, preste atención
a los desarrollos y explicaciones del profesor, y relaciónelos con lo
previamente leído por usted. Tome notas de la dudas o discrepancias que le
surjan, para su posterior discusión en la propia clase o en una tutoría
individualizada.

3. Tras la clase, repase los contenidos de la misma, entiéndalos y aclare
con el profesor los conceptos que no estén claros. Póngalos en práctica con
los problemas de la relación que corresponda, y conéctelos con los contenidos
a desarrollar en la próxima clase. Es decir, GO TO apartado 1.

3) Una asignatura NO se prepara en una semana. NO deje la preparación del
mismo para los últimos días. Probablemente será inútil. Pida ayuda a su
profesor para planificar el tiempo y su preparación de cara al examen final
con antelación. Si no lo hace, el único perjudicado será usted.

5) Saber una asignatura NO es saber unos apuntes. Unos apuntes son,
probablemente y en el mejor de los casos, un resumen de lo explicado por el
profesor en clase, lo cual a su vez será un resumen de lo revisado por el
profesor en la bibliografía específica. Por tanto, olvide aquello de "me sé
los apuntes pero me han suspendido", o "esto no estaba en los apuntes, sino en
tal libro" o "este problema no se parece a  ninguno que hayamos hecho en
clase". Si usted  SABE la materia, estará preparado para aplicarla a
situaciones nuevas y desconocidas. Y ello pasa por haber manejado bibliografía
tal y cómo se indica en el criterio 1. Saber los apuntes es una condición
necesaria para aprobar, pero no suficiente. Por tanto, si usted sabe sus
apuntes, NO SABE la materia. Y recuerde que SABER no es MEMORIZAR.

6) La revisión de calificaciones NO es una subasta. La directriz que debe
motivarle a solicitar y revisar sus calificaciones es saber DÓNDE, CÓMO Y POR
QUÉ ha fallado, y PLANIFICAR con su profesor la fase posterior de estudio
orientada a subsanar esos fallos. Por tanto, por favor, no acuda a revisión
con la intención de discutir sobre:

1. Los criterios de corrección, ya que estos los define su profesor, y
no es ni puede ser algo sujeto a negociación.

2. La distribución de la puntuación entre los diferentes enunciados de los
ejercicios del examen, ya que su profesor sabe qué es más importante que usted
haya aprendido, y cómo evaluar ese aprendizaje, y ajustará esa distribución en
consecuencia. El que considere que esa distribución le perjudica es un error,
ya que habrá sido aplicada por igual a sus compañeros, y además lo que hará
será demostrar que no tiene claros aquellos conceptos que son más relevantes.

3. Lo parecido o distinto de los ejercicios del examen a los realizados en
clase. (Ver principio 5)  Un examen no tiene por qué parecerse a lo ya
ejercitado. Los ejercicios de clase  le CAPACITAN para dominar los conceptos.
Los exámenes DEMUESTRAN que usted sabe aplicar esos conceptos aprendidos a
situaciones novedosas o simplemente diferentes a las estudiadas.

4. La verificación de si determinado ejercicio estaba o no en sus apuntes
(Ver principio 5)

5. La simple pataleta por no haber superado la asignatura. No entienda un
suspenso más que con la siguiente lectura: el trabajo realizado ha sido
válido, pero no suficiente. Debe trabajar más. Cualquier otra interpretación
por su parte es un error (Ver principio 10)

7) Procure estar informado. Visite con asiduidad la sección de noticias del
web de la asignatura y en caso de duda consulte por e-mail a su profesor. No
utilice argumentos de "no sabía nada..." o "no me he enterado de que.." para
excusar un fallo. Recuerde que ES su obligación y su responsabilidad  estar
enterado.

8) Utilice la tutoría. Es el único medio por el cual el profesor puede
ofrecerle una enseñanza de carácter individualizado. Por tanto, aproveche la
tutoría, en sus versiones presencial, electrónica, o vía el foro de la
asignatura. Y hágalo con frecuencia: siga el método descrito en el principio 3
y visite a su profesor cada vez que tenga dudas. Con carácter ordinario, un
mínimo de una visita al profesor cada tres semanas debería ser normal para
usted. Si hay dificultades, tan a menudo como necesite.

9) NO se quede con una duda. Es muy habitual entre nuestros alumnos que cuando
les surge una duda se queden con ella hasta el mismo momento del examen.
Luego, durante la revisión reconocen: "sí, esto no me quedó claro, pero..."
EVITE estos comportamientos. En una asignatura como esta, el progreso con
garantías hacia nuevos contenidos implica haber asimilado correctamente los
contenidos previos.

10) El profesor es su juez, NO es su verdugo. Mi labor en el momento de
evaluarle se limitará a juzgar la cantidad y calidad del esfuerzo realizado
por usted. Cualquier otro aspecto es irrelevante.

11) Participe en clase. Plantee sus dudas, y fomente la discusión entre sus
compañeros y con el profesor. Ello contribuirá de forma positiva a su
evaluación continua, y hará la dinámica académica más rica. Además,
contribuirá positivamente a su crecimiento personal.

12. Sea consciente de sus derechos como alumno, pero también de las
obligaciones que el serlo conlleva.
Competencias
Competencias transversales/genéricas
- 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
Competencias específicas
  • 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.
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 yde RMI y de modelos
de objetos distribuidos utilizando el lenguaje Java como soporte.
Programa
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).
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.
Distribución de horas de trabajo del alumno/a

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):  
Técnicas Docentes
Sesiones académicas teóricas:Si   Exposición y debate:No   Tutorías especializadas:No  
Sesiones académicas Prácticas:Si   Visitas y excursiones:No   Controles de lecturas obligatorias:No  
Criterios y Sistemas de Evaluación
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 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.



Cronograma

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.