Usted está aquí: Inicio web asignaturas

 

Fichas de asignaturas 2013-14


PROGRAMACIÓN CONCURRENTE Y DISTRIBUIDA

Asignaturas
 

  Código Nombre    
Asignatura 1710034 PROGRAMACIÓN CONCURRENTE Y DISTRIBUIDA Créditos Teóricos 2.5
Descriptor   CONCURRENT AND DISTRIBUTED PROGRAMMING Créditos Prácticos 2.5
Titulación 1710 INGENIERÍA TÉCNICA EN INFORMÁTICA DE GESTIÓN Tipo Optativa
Departamento C137 INGENIERÍA INFORMÁTICA    
Curso      
Créditos ECTS 4      

Para el curso Créditos superados frente a presentados Créditos superados frente a matriculados
2007-08 100.0% 67.7%

 

ASIGNATURA OFERTADA SIN DOCENCIA

 

Pulse aquí si desea visionar el fichero referente al cronograma sobre el número de horas de los estudiantes.

Profesorado

Antonio Tomeu Hardasmal (coordinador)

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
roporcionará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 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.
3.9 API Java de Alto Nivel para la Concurrencia

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 Tiempo Real (3 horas)

Actividades

ASIGNATURA EN EXTINCIÓN SIN DOCENCIA

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):  

Criterios y Sistemas de Evaluación

A) DE LOS EXÁMENES TEÓRICOS ESCRITOS
-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
-Se realizará en ordenador.
-El examen práctico se calificará de 0 a 10.
-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


La evaluación  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.

 

El presente documento es propiedad de la Universidad de Cádiz y forma parte de su Sistema de Gestión de Calidad Docente. En aplicación de la Ley 3/2007, de 22 de marzo, para la igualdad efectiva de mujeres y hombres, así como la Ley 12/2007, de 26 de noviembre, para la promoción de la igualdad de género en Andalucía, toda alusión a personas o colectivos incluida en este documento estará haciendo referencia al género gramatical neutro, incluyendo por lo tanto la posibilidad de referirse tanto a mujeres como a hombres.