Usted está aquí: Inicio web asignaturas

 

Fichas de asignaturas 2016-17


PROGRAMACIÓN CONCURRENTE Y DE TIEMPO REAL

Asignaturas
 

  Código Nombre    
Asignatura 21714020 PROGRAMACIÓN CONCURRENTE Y DE TIEMPO REAL Créditos Teóricos 3
Título 21714 GRADO EN INGENIERÍA INFORMÁTICA Créditos Prácticos 4.5
Curso   2 Tipo Obligatoria
Créd. ECTS   6    
Departamento C137 INGENIERÍA INFORMÁTICA    

 

Requisitos previos

El alumno debe tener cursadas y aprobadas las asignaturas de primer curso
"Introducción a la Programación" y "Metodología de la Programación". Se deja
constancia explícita de que sin las habilidades mínimas de programación que ambas
proporcionan una vez superadas, no es factible enfrentarse con garantías al
estudio de la concurrencia.

 

Recomendaciones

a)Sería de desear que el alumno dispusiese de un dominio razonable del
castellano, tanto a nivel de expresión oral como escrita, así como del marco
cognitivo-intelectivo y metalingüístico necesario para una correcta lectura,
procesamiento y asimilación de los contenidos que la bibliografía de la
asignatura exige, al ser estos muchos y variados.

b)Igualmente deseable sería el dominio de las reglas elementales de la aritmética
básica, y cierta cultura general, obtenida a través de la lectura de libros de
toda clase, de la prensa escrita, o de ambas.

c) No resultará ocioso el adecuado conocimiento y manejo de las reglas de
urbanidad, para el correcto trato tanto a los compañeros como al profesor.

d)Se recomienda al alumno entregarse al estudio con seriedad, rigor, continuidad
e interés, como si se tuviese una inquebrantable voluntad intelectual y
académica.

e)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á). Ocasionalmente se le proporcionarán unos apuntes (en
castellano), que como mucho debería usar como material de apoyo, pero nunca como
texto base. Se deja constancia clara y explícita de que un correcto estudio y
preparación de la asignatura requerirá la lectura íntegra del material propuesto,
y que en modo alguno limitar la preparación al estudio aislado de los apuntes
garantiza superar la misma, y mucho menos garantiza la adquisición de los
conocimientos deseados.

f)La copia de apuntes en clase ES UNA PÉRDIDA DE TIEMPO: por tanto, los
profesores harán 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, para el hipotético caso en
que el alumno se apreste a estudiar.

g)El alumno debe saber que 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:  PRIMERA:
Lectura y revisión previa de los materiales indicados en el cronograma del curso
para esa clase en concreto.  Semanalmente se establecerá  el conjunto de tópicos
a impartir 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.  SEGUNDA:.
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. El
alumno debe saber además que se encuentra matriculado en una universidad pública
presencial, y que la asistencia a clase forma parte de sus obligaciones como
discente. TERCERA: 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, vuelva al primer apartado.

h)Una asignatura NO se prepara en una semana. NO deje la preparación de los
trabajos a entregar ni la del examen final para el último momento. Probablemente
será inútil. Utilice el cronograma de la asignatura para planificar su esfuerzo,
o 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.

i) Saber una asignatura NO es saber unos apuntes. Nunca lo ha sido. Unos apuntes
son, probablemente y en el mejor de los casos, un resumen de lo explicado por
elprofesor 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 o ejercicio 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 apartado b). 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.

j)La revisión de calificaciones NO es una subasta.  Es  un  medio que la
Universidad pone a su  disposición para que sepa DÓNDE, CÓMO Y POR QUÉ ha
fallado, y proceda a  PLANIFICAR con su profesor la fase posterior de estudio
orientada a subsanar las lagunas que sus conocimientos tengan.  Por tanto, por
favor, no acuda a revisión con la intención de discutir sobre:

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

•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.

•Lo parecido o distinto de los ejercicios del examen a los realizados en clase.
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.

•La verificación de si determinado ejercicio estaba o no en sus apuntes

•La simple pataleta por no haber superado la asignatura. No entienda un suspenso
más que con la siguiente lectura: el trabajo realizado no ha sido válido, no ha
sido suficiente, o ambas cosas. Debe trabajar más. Cualquier otra interpretación
por su parte es un error.

k)Su obligación es estar informado de las circunstancias de la asignatura. Visite
con asiduidad la sección de noticias de la plataforma virtual de la asignatura y
en caso de duda consulte por e-mail a su profesor. No utilice argumentos de la
clase "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.

l)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 de cualquier otro tipo boloñés. Y hágalo
con frecuencia: siga el método de preparación de las clases ya descrito, 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.

m)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.

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

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

o)Sea consciente de sus derechos como alumno, pero también de las obligaciones
que el serlo conlleva. En particular, trate de seguir en todo momento la línea de
conducta que el código ético de la Universidad (Código Peñalver) le aconseja.

 

Profesorado

Nombre Apellido 1 Apellido 2 C.C.E. Coordinador  
Ignacio Javier Pérez Gálvez Contratado N  
ALBERTO GABRIEL SALGUERO HIDALGO PROFESOR SUSTITUTO INTERINO N
Antonio J. Tomeu Hardasmal PROFESOR TITULAR DE UNIVERSIDAD S

 

Competencias

Se relacionan aquí las competencias de la materia/módulo o título al que pertenece la asignatura, entre las que el profesorado podrá indicar las relacionadas con la asignatura.

Identificador Competencia Tipo
C14 Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real. ESPECÍFICA

 

Resultados Aprendizaje

Identificador Resultado
R01 Capacidad de identificar la concurrencia en un problema y de descomponer el mismo en una serie de tareas concurrentes cooperativas debidamente sincronizadas.
R04 Capacidad para desarrollar el intercambio de mensajes entre objetos distribuidos bajo algún middleware, o bien mediante algún API de paso de mensajes.
R03 Capacidad para desarrollar programas concurrentes en algún lenguaje de programación que dé soporte a la concurrencia, con adecuado control de la exclusión mutua y la sincronización que sea necesaria, en base a las primitivas de control de la concurrencia que el lenguaje proporcione. Capacidad para explotar procesadores multicore.
R05 Conocimiento básico del concepto de aplicación de tiempo real, y de algún API –a nivel puramente descriptivo- que proporcione soporte al mismo en el marco de programación general y bajo la misma filosofía utilizada para la consecución de los anteriores resultados
R02 Conocimiento de las principales primitivas teóricas de control de la exclusión mutua y la sincronización entre entidades concurrentes: variables comunes, cerrojos, semáforos, monitores y memoria transaccional

 

Actividades formativas

Actividad Detalle Horas Grupo Competencias a desarrollar
01. Teoría
Exposición de los contenidos de la materia con
ayuda de  diapositivas, junto con la propuesta de
ejercicios de afianzamiento desarrollados en
aula. Descarga desde el Campus Virtual y
ejecución de códigos de prueba y desarrollo de
soluciones a ejercicios de baja complejidad.
24 C14
02. Prácticas, seminarios y problemas
En este grupo de actividad formativa se
realizarán las siguientes actividades:

SEMINARIO 1: Concurrencia con el Lenguaje C++11.

SEMINARIO 2: Introducción a la Programación
Concurrente Multi-core con GPUs.

SEMINARIO 3: Memoria Transaccional Software sobre
la JVM: Clojure.

SEMINARIO 4: Concurrencia con el Lenguaje C#.

RESOLUCIÓN DE PROBLEMAS: ejercicios de
concurrencia y paralelismo en java de mediana
complejidad, y resolución de problemas de
exclusión mutua y sincronización con primitivas
de nivel teórico.
12 C14
03. Prácticas de informática
El alumno resolverá en las clases de prácticas
informáticas un conjunto de ejercicios prácticos
de programación de complejidad media-alta con la
asistencia y el asesoramiento del profesor. Tales
ejercicios configurarán una asignación de
prácticas, siendo su propuesta de carácter
semanal o bisemanal, y su confección y entrega
obligatoria para el alumno.
24 C14
10. Actividades formativas no presenciales
a) Lectura cuidadosa y razonada de las
referencias bibliográficas indicadas por los
profesores.

b) Resolución de los ejercicios y/o problemas de
afianzamiento de contenidos propuestos por los
profesores.

c) Estudio intenso y continuado.
86 C14
12. Actividades de evaluación
Exámenes Finales Teórico y Práctico
4 C14

 

Evaluación

Criterios Generales de Evaluación

APARTADO PRIMERO: CRITERIOS DE CORRECCIÓN Y DESARROLLO DE EXÁMENES

A) DEL EXAMEN TEÓRICO
-El examen teórico será escrito, con una duración mínima de 60 minutos y máxima
de 120 minutos. Dicho examen podrá incluir preguntas tipo test de repuesta simple
o múltiple, preguntas de desarrollo corto, ejercicios o problemas.
-El examen teórico se calificará de 0 a 10 puntos. Se obtiene  Aprobado en el
examen teórico con una calificación igual o superior a cinco puntos.
-Una cuestión tipo test, corta, ejercicio o problema simple,  se consideran
correctos únicamente si la solución final que se proporciona es completamente
correcta. En otro caso se considera incorrecta y no puntúa.
-Una cuestión tipo test, corta, ejercicio o problema de múltiples apartados se
consideran  correctos si todos los apartados que la conforman son correctos. En
cualquier otro caso es incorrecta y no puntúa.

B) DEL EXAMEN PRÁCTICO
-Se realizará en ordenador con una duración mínima de 120 minutos y máxima de 180
minutos. El alumno dará solución mediante algún lenguaje de programación que dé
soporte a la concurrencia a los enunciados que se le planteen.
-El examen práctico se calificará de 0 a 10 puntos. Se obtiene  Aprobado en el
examen práctico con una calificación igual o superior a cinco puntos.
-Las condiciones que una solución a un enunciado de examen  práctico debe cumplir
para considerarse 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 en orden a solucionar el enunciado en cuestión.
c) Los programas elaborados por el alumno, se pueden abrir y procesar con el
compilador del lenguaje utilizado, y realizan un procesamiento técnicamente
correcto,según el enunciado de que se trate. Se entiende por un procesamiento
técnicamente correcto a aquél que corresponde a un código de programa que compila
correctamente sin errores, cuya semántica da soporte a la solución pedida, y que
ha sido escrito de acuerdo a las convenciones de estilo y eficiencia habituales
en programación.

C) DE LAS APORTACIONES AL FORO, GLOSARIO Y WIKI DEL CAMPUS VIRTUAL
-Tendrán carácter individual y podrán realizarse durante el periodo de clases de
la asignatura, pudiendo incluir definiciones, tópicos concretos de la asignatura,
o desarrollos completos de conceptos teóricos o prácticos. Se podrán publicar en
los foros, glosario o wiki del campus virtual de la asignatura.
-Su validación a efectos de ser puntuados exigirá tener un contenido mínimo, ser
técnicamente correctas, y describir con propiedad y un uso correcto del idioma y
–en su caso- de la notación, el elemento de que se trate. Cada aportación
correcta sumará un máximo de 1 punto.El alumno podrá realizar tantas aportaciones
como estime oportuno, si bien el límite práctico de puntuación a obtener en este
apartado es de 10 puntos.

D)DE LAS ASIGNACIONES DE PRÁCTICAS
Semanalmente se propondrá al alumno una asignación de prácticas, que este deberá
resolver y entregar a través del Campus Virtual. Los criterios de corrección (en
su caso) de las mismas, y dada su naturaleza práctica, serán los mismos que los
descritos en el apartado B) anterior para los exámenes prácticos. Estas
asignaciones podrán servir para compensar la calificación del examen final de
prácticas, siempre que se cumplan los criterios descritos en el punto c) del
APARTADO SEGUNDO.

APARTADO SEGUNDO: CRITERIOS DE EVALUACIÓN
a) La calificación final de la asignatura vendrá determinada por la calificación
obtenida en el examen final teórico ponderada al 40%, sumada a la calificación
obtenida mediante las aportaciones a foros, glosario y wiki, ponderada al 10% y
sumada a la calificación obtenida en el examen final práctico ponderada al
50%,siempre que se cumplan todos los criterios siguientes:

-se haya obtenido al menos cinco puntos en el examen final teórico.
-se haya obtenido al menos cinco puntos en el examen final de prácticas.

b) El examen final práctico no será corregido si no se supera el examen  final
teórico, ni tampoco las aportaciones evaluables en foros, glosario y wiki del
campus virtual.
c) Aquél alumno que obtenga menos de cinco puntos (5.0) en el examen final
práctico pero obtenga un mínimo de tres puntos y medio (3.5), podrá compensar la
diferencia y superarlo mediante las asignaciones de prácticas que se habrán ido
entregando durante el curso, siempre que se cumplan los siguientes criterios:  el
100% de las asignaciones han sido entregadas, al menos el 70% de las mismas están
bien resueltas y el alumno ha acreditado una asistencia a las clases prácticas de
al menos el 80% de las horas de clase práctica impartidas. La valoración global
de las asignaciones será por tanto, en su caso, de hasta un máximo de 1.5 puntos
si se entregan en la convocatoria de Febrero, reduciéndose a 0.75 puntos si se
entregan en las de Junio o Septiembre en los respectivos plazos extraordinarios
de entrega.
d)Exclusivamente para las convocatorias de Junio y Septiembre, se habilitará un
periodo de entrega de asignaciones prácticas atrasadas para aquellos alumnos que
no habiendo cumplido con el calendario de entregas, deseen realizar las mismas
previamente a las citadas convocatorias, siendo la reducción de su valoración
global, en su caso, la indicada en la letra c) anterior.

El alumno debe conocer además que la evaluación se regirá por las  siguientes
normas adicionales:

1)En caso de no poder entregar una asignación de prácticas por enfermedad o causa
de fuerza mayor documentalmente justificadas, el profesor indicará al alumno
nueva fecha de entrega. Como se ha indicado, para las convocatorias de Junio y
Septiembre, se habilitará un período de entrega de prácticas atrasadas, para
aquellos alumnos que deseen acogerse al mismo. No obstante lo anterior, el
profesor podrá establece plazos de entrega extraordinarios si lo considera
oportuno.

2) Los exámenes finales de Febrero, Junio y Septiembre se regirán por los
Estatutos de la Universidad de Cádiz y normativa derivada en cuanto a número de
llamamientos y días de revisión de calificaciones se refiere.

3) A toda convocatoria se acude con el temario completo (tanto teórico como
práctico). No se reservarán calificaciones de partes de la asignatura para
convocatorias sucesivas.

4) Para lo no contemplado en estas notas se estará a lo dispuesto en el
Reglamento de Régimen Académico y Evaluación del Alumnado de la Universidad de
Cádiz.

 

Procedimiento de Evaluación

Tarea/Actividades Medios, Técnicas e Instrumentos Evaluador/es Competencias a evaluar
Aportaciones a los foros, glosario y wiki del Campus Virtual de la asignatura MEDIOS: Soporte proporcionado por el Campus Virtual para la generación y distribución de contenidos elaborados por los alumnos. En concreto se utilizarán uno o varios de los siguiente medios: foro, glosario y wiki. TÉCNICA: Desarrollo libre y abierto de contenidos por el alunmno. INSTRUMENTO DE EVALUACIÓN: Revisión por el profesor de las aportaciones, que serán calificadas con hasta un máximo de un punto en función de su extensión y calidad.
  • Profesor/a
Examen final de Prácticas MEDIOS: Computadoras personales, Plataforma Virtual Moodle y software de propósito específico para el desarrollo de la Programación Concurrente y de Tiempo Real. TÉCNICAS: Verificación de la corrección sintática, semántica y de estilo de los programas desarrollados por el alumno. INSTRUMENTOS DE EVALUACIÓN: Examen de prácticas incluyendo ejercicios y/o problemas de programación. El alumno debe escribir y depurar código de programa que dé solución a los ejercicios/problemas planteados, y que deberá entregar mediante el Campus Virtual al finalizar el tiempo asignado al examen práctico. El código deberá compilar correctamente, realizar un procesamiento técnicamente correcto, y haber sido escrito de acuerdo a las normas de estilo y eficiencia habituales en programación.
  • Profesor/a
C14
Examen final teórico MEDIOS: Expresión Escrita. TÉCNICA: Verificación de la corrección de los enunciados plantedos. INSTRUMENTOS DE EVALUACIÓN: Exámenes escritos que pueden incluir algunos de los siguientes elementos: preguntas tipo test de respuesta simple o múltiple, cuestiones de desarrollo corto, demostraciones, ejercicios y problemas.
  • Profesor/a
C14

 

Procedimiento de calificación

La calificación de la asignatura vendrá determinada de acuerdo a la siguiente
expresión:

CALIFICACIÓN=(0.4)*NOTA EXAMEN TEÓRICO+(0.1)*NOTA APORTACIONES AL CAMPUS
VIRTUAL+(0.5)*NOTA EXAMEN DE PRÁCTICAS

NOTA: Dicha ecuación será aplicable única y exclusivamente en el caso de que el
alumno haya obtenido una NOTA IGUAL O SUPERIOR A CINCO PUNTOS EN EL EXAMEN
TEÓRICO y EN EL EXAMEN DE PRÁCTICAS. Si uno de los dos exámenes no se supera, la
calificación final será la obtenida en el examen no superado.

 

Descripcion de los Contenidos

Contenido Competencias relacionadas Resultados de aprendizaje relacionados
            SEMINARIOS:

SEMINARIO 1: Concurrencia con el Lenguaje C++11.
SEMINARIO 2: Introducción a la Programación Concurrente Multi-core con GPUs.
SEMINARIO 3: Memoria Transaccional Software sobre la JVM: Clojure.
SEMINARIO 4: Concurrencia con el Lenguaje C#.
        
C14 R01 R03 R02
            Tema 1: PRINCIPIOS GENERALES DE LA CONCURRENCIA
La era de los procesadores multi-core y many-core (Intel Xeon-Phi, Kepler de nVidia y Cell de IBM). Concurrencia versus
paralelismo. Rendimiento. Speed up. Recursos compartidos y su problemática: entrelazado de instrucciones, condiciones
de concurso, secciones críticas y exclusión mutua. Corrección en Sistemas Concurrentes. Lenguajes concurrentes.
Creación de Entidades Concurrentes. La Taxonomía de Flynn. Multiprocesamiento Simétrico. Conceptos Elementales de
Tiempo Real

        
C14 R01 R02
            TEMA 2: FUNDAMENTOS DE JAVA PARA LA CONCURRENCIA
La JVM. Tipos primitivos, estructuras de control y estructura básica de un programa. Compilación y ejecución. Uso
del API en línea. Documentación del código y generación automatizada de API: el binario javadoc. Wrappers. Clases,
objetos y referencias. Llamada a métodos y paso de argumentos. Diseño de clases. Entrada/salida de carácter básico:
la clase Scanner y otras. Leyendo argumentos desde el terminal. Excepciones: concepto y utilidad. Herencia,
sobreescritura y uso de interfaces. Principios del uso de la biblioteca de contenedores.
        
C14 R01 R03
            TEMA 3: CREACIÓN Y CONTROL DE THREADS.
Creación de threads mediante herencia de la clase Thread e implementación de la interfaz Runnable. Modelo básico de
co-rutina start()-join(). Gestión del ciclo de vida de un hilo: métodos sleep() y yield(). Gestión de ciclo con
métodos derogados de control, y por qué están derogados. API de control de prioridad; los métodos getPriority() y
setPriority(). Mapping prioridades JVM a Windows, Linux y Solaris. Por qué no es posible planificar con prioridades.
Ejecutando tareas de forma asíncrona: las interfaces Callable y Future. Delegando el ciclo de vida de los threads:
ejecutores y pool de threads. Ejecutores predefinidos: SingleThreadPool, FixedThreadPool y CachedThreadPool. Ejecutores
altamente configurables por el programador: la clase ThreadPoolExecutor. Cómo dimensionar un pool de threads según el
número de núcleos de la máquina y la tipología del problema que se tiene que resolver. Pools de threads y mejora
del rendimiento en problemas de cálculo masivo y con latencia de entrada/salida grande: la ecuación de Subramanian,
el coeficiente de bloqueo y cómo emplear ambos en la práctica. Otras ecuaciones de balanceado de carga. Cuándo y
dónde utilizar un pool de threads: servidores, intefaces de usuario, etc.
        
C14 R04
            TEMA 4: MODELOS TEÓRICOS DE CONTROL DE LA CONCURRENCIA
Algoritmos de control con variables comunes. Semáforos. Regiones Críticas. Monitores: concepto, variables de
condición, políticas de señalización. Disponibilidad de primitivas equivalentes en Java: bloques y métodos
synchonized, clase java.util.concurrent.Semaphore y monitores utilizando cerrojos ReentrantLock y Condition.
Disponibilidad de primitivas equivalentes en C++11: las clases mutex y condition_variable.
        
C14 R05
            TEMA 5: CONTROL DE LA CONCURRENCIA EN JAVA CON API ESTÁNDAR
Bloques de código y métodos synchronized. Protocolos de control de la exclusión mutua entre hilos utilizando unos y
otros. Reentrancia. Interbloqueos, y lo fácilmente que se provocan. Sincronización entre hilos: los métodos de la
clase Object wait(), notify() y notifyAll(). El wait-set: necesidad y funcionamiento instrínseco. Limitaciones del
modelo de sincronización y necesidad del uso de condiciones de guarda. Protocolo de diseño de monitores en Java
utilizando el API estándar, métodos sincronizados y condiciones de guarda.
        
C14 R03 R02
            TEMA 6: CONTROL DE LA CONCURRENCIA EN JAVA CON API DE ALTO NIVEL
Familia de objetos con acceso atómico a través del API: paquete java.util.concurrent.atomic. Uso de la clase
Semaphore: métodos acquire() y release(), protocolos de control de exclusión mutua y de sincronización con objetos
de clase Semaphore. Citando a todos los hilos en un punto: clase CyclicBarrier y protocolo de barrera. Ajustando la
granularidad de la sección crítica según convenga: la clase ReentrantLock; API, protocolo de control de exclusión
mutua y sincronización con cerrojos ReentrantLock. Obteniendo variables de condición sobre un cerrojo: la interfaz
Condition, API y uso. Protocolo de diseño de monitores en Java utilizando cerrojos de clase ReentranLock y objetos
Condition. Otros cerrojos disponibles en el API de alto nivel. La vida es bella: utilizando clases contenedoras
autosincronizadas. Novedades introducidas por Java 8 en el API de concurrencia de alto nivel.
        
C14 R03 R02
            TEMA 7: PASO DE MENSAJES EN JAVA CON RMI
El modelo de paso de mensajes: necesidad y utilidad. RMI en Java. Modelando los objetos remotos: la interfaz Remote y
su implementación. Generando resguardos: el precompilador rmic. ¿Y si no generamos resguardos? Descarga dinámica de
resguardos y generación automática de resguardos. El lado del servidor: la clase Namig. Activando un servicio de
nombres donde registrar objetos servidores: el binario del jdk rmiregistry. Registrando un servicio: métodos bind() y
rebind(). El cliente: protocolo de activación, localización del servicio de nombres; obteniendo una referencia al
objeto remoto con el método lookup(). Transfiriendo objetos complejos: la interfaz Serializable. Gestionando la
seguridad: clase RmiSecurityManager y herramienta policytool para diseño de políticas de seguridad. Mejorando el
modelo: clientes con callback. Limitaciones del modelo.
        
C14 R04
            TEMA 8: LA ESPECIFICACIÓN JRT
Principios elementales de un sistema RT. Por qué la especificación de Java Estándar no basta para hacer tiempo real.
La especificación JRT. Nuevos tipos de memoria. Un modelo de planificación expulsivo, con 28 niveles de prioridad, y
que resuelve las inversiones de prioridad. Modelando los objetos que se ejecutan: la interfaz Schedulable. Hilos
RealTimeThread y NoHeapRealTimeThread. Cómo planificar esos hilos: métricas de prioridad primara y secundaria.
Planificadores predefinidos: PriorityScheduler. Planificadores propios mejorados. Gestión de Enventos Asíncronos.
        
C14 R05
            TEMARIO DE PRÁCTICAS:
El alumno desarrollará entre diez y doce asignaciones de carácter semanal o bisemanal,
en las que dará soluciones a las cuestiones planteadas por el profesor en el documento de
asignación. En las clase prácticas se proprorcionará mediante diapositivas o pizarra el
soporte conceptual y técnico necesario para que al alumno afronte la asignación con garantías. Igualmente se pondrá
a disposición de los alumnos,en aquellas asignaciones donde sea necesario, una carpeta en el Campus Virtual con
código que dé soporte al desarrollo de la asignación. Se pondrá especial atención en el desarrollo de soluciones
de múltiples hilos sobre arquitecturas multicore, y en el análisis del rendimiento de las soluciones.

Programa de Prácticas:

P1: Programación Elemental en Java.
P2: Orientación a Objetos Básica en Java.
P3: Herencia e Implementación de Interfaces en Java.
P4: Concurrencia/Paralelismo de Datos de Grano Fino.
P5: Exclusión Mutua con Variables Comunes.
P6: Concurrencia/Paralelismo de Datis de Grano Grueso: La Ecuación de Subramanian.
P7: Mejorando el Rendimiento: Uso de Pool de Threads en Java.
P8: Control de Exclusión Mutua con API Estándar de Java.
P9: Diseño de Monitores con API Estándar de Java.
P10: Control de Exclusión Mutua con API de Alto Nivel de Java.
P11: Paso de Mensajes Interobjeto con RMI en Java.
P12: Distribución de Tareas mediante Paso de Mensajes con RMI.
        
C14 R01 R04 R03 R02

 

Bibliografía

Bibliografía Básica

[Alb15] Albahari, J. y Albahari, B. C# in a Nutshell. The Definitive Reference. O'Reilly, 2015

[Akh06] Akhter, S. y Roberts, J. MultiCore Programming. Incresing Performance Throught Software Multithreading. Intel Press, Digital Edition, 2006.

[Bal16] Balaji, P. (ed.) Programming Models for Parallel Computing. The MIT Press, 2016.

[Ben06] Ben-Ari, M. Principles of Concurrent and Distributed Programming (second edition). Addison-Wesley, 2006.

[Bol09] Bollella, G. y Bruno, E. Real Time Java Programming With Java RTS. SunMicrosystems, 2009.

[Cap12] Capel, M. y Rodríguez, S. Sistemas Concurrentes y Distribuidos: Teoría y Práctica. Copicentro, 2012.

[Coo13] Cook, S. CUDA Programming: A Deverlopers Guide to Parallel Computing with GPUs. Morgan Kaufmann-Elsevier, 2013.

[Fer12] Fernández, J. Java 7 Concurrency Cookbook. Packt Publishing, 2012.

[Fer16] Fernández, J. Mastering Concurrency Programming with Java 8. Packt Publishing, 2016.

[Göe06] Göetz, B., Peierls, T., Bloch, J., Bowbeer, J., Holmes, D. y Lea, D. Java Concurrency in Practice. Addison-Wesley, 2006.

[Gra03] Grama, A. et al. Introduction to Parallel Computing (2nd Edition). Benjamin/Cummings Publishing Company, 2003.

[Oak04] Oaks, S. & Wong, H. Java Threads, 3rd Edition. O’Reilly, 2004.

[Ora14] Java SE 8 Concurrency Utilities. Oracle, 2014. http://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/

[Pal03] Palma, J.T y otros. Programación Concurrente. Thompson Editores, 2003.

[Sub11] Subramanian, V. Programming Concurrency on the JVM: Mastering Synchronization, STM and Actors. The Pragmatic Programmers, 2011.

[Val14] Vallejo, D., González, C. y Albusac, J. Programación Concurrente y Tiempo Real, 2ª Edición. Dpto. de Tecnologías y Sistemas de la Informarción. Universidad de Castilla-La Mancha. En http://www.libropctr.com/downloads/LibroPCTR_2014.pdf

[Wel04] Wellings, A. Concurrent and Real Time Programming in Java. John Wiley &Sons, 2004

[Wil12] Williams, A. C++ Concurrency in Action. Practical Multithreading. Manning, 2012.

 

 

Bibliografía Específica

[Arn01] Arnold, K., Gosling, J. & Holmes, D. El Lenguaje de Programación Java. 
        Addison-Wesley, 2001.
[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.
[Eck06] Eckel, B. Thinking in Java (4th Edition). Prentice Hall, 2006.
[Kal09] Kalin, M. Java Web Services; Up and Running. O’Reilly,  2009.

 

 

Bibliografía Ampliación

[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.
[Nat06] Naftalin, M. & Wadler, P. Java Generics and Collections. O’Reilly, 2006.
[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.
[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.

 

 

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.