Apellidos: Nombre: Matrícula: UNIVERSIDAD POLITÉCNICA DE MADRID

Documentos relacionados
Apellidos: Nombre: Matrícula:

Prueba final, parte 2 - Clave a Concurrencia Segundo semestre Universidad Politécnica de Madrid

Prueba objetiva 2 (4F1M) - Clave a

Prueba objetiva 2 - Clave b

Prueba objetiva 2 - Clave a Concurrencia Primer semestre Grado en Ingeniería Informática. Universidad Politécnica de Madrid

Prueba objetiva 2 - Clave a

Examen de Programación Concurrente - Clave: a Junio 2008 Departamento de Lenguajes, Sistemas Informáticos e Ingeniería del Software.

Concurrencia Monitores. Guillermo Román Díez

Programación concurrente en Java

CLAVE EXAMEN: a cd. c u r s o r = c u r s o r. g e t S i g u i e n t e ( ) ; p o s i c i o n ++;

Especificando interacción con recursos compartidos

2. Indica cuál de las siguientes afirmaciones es cierta:

APELLIDOS, Nombre: // Resto de s e r v i c i o s p ú b l i c o s e n t r e l o s que s e e n c u e n t r a n i n s e r t a r y // b o r r a r //...

Uso de recursos compartidos

Examen concurrencia Nov 2011

Grados Ing. Inf. y Mat. Inf. Noviembre 2011 Algoritmos y Estructura de Datos Página 1 de 6

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Concurrencia. Guillermo Román Díez

Concurrencia Prácticas 1 y 2

dit Programación concurrente Sincronización condicional UPM

Recursos compartidos con paso de mensajes (EN CONSTRUCCIÓN: NO IMPRIMIR)

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

Algoritmos y Estructuras de Datos Tema 2: Diseño de Algoritmos

Especificando interacción con recursos compartidos (EN CONSTRUCCIÓN: NO IMPRIMIR)

Arquitecturas cliente/servidor

CAPÍTULO 3. PROCESOS VS. HILOS

Primitivas de Sincronización

Examen escrito de Programación 1

Lección 6: Ejemplos de programación con semáforos

Concurrencia. Primitivas IPC con bloqueo

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Estructuras de Datos. 14 de junio de Apellidos

Tema 6. Threads: programas multitarea

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Grado en Ingeniería Informática. Estructura de Datos y Algoritmos, Grupo 84M, 2014/ de Marzo de

Natalia Partera Jaime Alumna colaboradora de la asignatura

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Fundamentos de los Sistemas Operativos

Cuadernillo de ejercicios cortos Concurrencia. Curso

Curso Informática Lección 4. Instrucciones de control

Fac. de Informática / Escuela Univ. Informática SISTEMAS OPERATIVOS Examen Primer Parcial 5 de mayo de 2007

Concurrencia Condiciones de Carrera. Guillermo Román Díez

Hoja de ejercicios cortos Concurrencia Segundo semestre

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º Nombre y apellidos: Nota:

Estructuras de control selectivas

Informática Ingeniería en Electrónica y Automática Industrial

ISO Tema 8,

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Lección 7: Sincronización de procesos mediante monitores

UPM Concurrencia en Java

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

Estructuras de control Agosto de Facultad de Ingeniería. Universidad del Valle

Soluciones a ejercicios de paralelismo y concurrencia

TEMA 3. Árboles. Objetivos. Contenidos. Bibliografía. Básica

UNIDAD 3 MEMORIA COMÚN. El problema de exclusión mutua

Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; }

SOLUCIONES. Universidad de Las Palmas de Gran Canaria Escuela Universitaria de Informática Facultad de Informática

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Modelo de Cómputo. Programación concurrente

1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS

Examen escrito de Programación 1

Guillermo Román Díez

Recursos compartidos con paso de mensajes (EN CONSTRUCCIÓN: NO IMPRIMIR)

/** * Raíz del árbol de contactos presentes en el directorio */ private. /** * Número de contactos en el directorio */ private int numcontactos;

Concurrencia, exclusión mutua y sincronización. Capítulo 5 HungriaBerbesi

Secciones críticas y exclusión mutua

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Depto. Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid ETSI Telecomunicación Fundamentos de Programación 15 de diciembre de 2011

* * * * SOLUCIONES * * * *

Lección 3 Sentencias de control

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas

Examen de Estructuras de Datos y Algoritmos (Ingeniería Informática)

Práctica 5. Fecha límite de entrega: viernes, 14 de diciembre

EXAMEN PROGRAMACIÓN 21 de Septiembre de 2007 INGENIERÍA INFORMÁTICA Primera parte: Cuestiones 1,5 horas

Soluciones Ejercicios Tema 7. Cambio de Signo Pila (3/3) if (!p.esvacia()) { d i l cambiasignopila(p); this.apilar(new Integer(-dato));

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

L15: Resources II. Grado en Ingeniería Informática Grado en Matemáticas e Informática Universidad Politécnica de Madrid.

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

Estructura de Datos y de la Información

a. Cuántas veces se ejecuta la instrucción System.out.println? b. Cuál es el diagrama de flujo correspondiente a este fragmento?

Nombre alumno: Ventajas: Inconvenientes:

dit UPM Tema 2: Concurrencia /threads (java) Análisis y diseño de software José A. Mañas

Programación de Sistemas Concurrentes y Distribuidos 1 a Convocatoria curso 12/13

Java Threads. Sistemas Distribuidos Rodrigo Santamaría

Sebastián García Galán

Cada examen debe superarse con al menos un 4 para hacer media.

1. (1 punto) Dado el siguiente fragmento de programa:

Interbloqueo. Concurrencia: Interbloqueo e Inanición

2ª Parte: Problemas (5 puntos sobre 10)

EXCLUSIÓN MUTUA ENTRE HILOS. TEMA 5: Control de la Concurrencia en Java (API Estándar) Sintaxis para Bloques de Código Sincronizado

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Laboratorio de Arquitectura de Redes. Sentencias de control en lenguaje C

Tema 12: Programación multihilo

UE#04 PROBLEMAS DE ANÁLISIS DE CASOS CONTROL DE ALTERNATIVAS

TEMA 5. ESTRUCTURAS DE CONTROL: BUCLES.

package uniandes.cupi2.traductor.servidor; import java.io.serializable; import java.util.arraylist;

Transcripción:

Apellidos: Nombre: Matrícula: Concurrencia (parte 2)/clave: a Curso 2014/2015-2 o semestre (junio 2015) Grado en Ingeniería Informática / Grado en Matemáticas e Informática UNIVERSIDAD POLITÉCNICA DE MADRID NORMAS: Este es un cuestionario que consta de 7 preguntas. Todas las preguntas son de respuesta simple excepto la pregunta 7 que es una pregunta de desarrollo. La puntuación total del examen es de 10 puntos. La duración total es de una hora. El examen debe contestarse en las hojas de respuestas. No olvidéis rellenar apellidos, nombre y número de matrícula en cada hoja de respuesta. Sólo hay una respuesta válida a cada pregunta de respuesta simple. Toda pregunta en que se marque más de una respuesta se considerará incorrectamente contestada. Toda pregunta incorrectamente contestada restará del examen una cantidad de puntos igual a la puntuación de la pregunta dividido por el número de alternativas ofrecidas en la misma. Cuestionario (1 punto) 1. Sea un CTAD que incluye dos métodos, inc() y dec(), y que es especificado como sigue: C-TAD IncDec OPERACIONES ACCIÓN inc: ACCIÓN dec: SEMÁNTICA DOMINIO: TIPO: IncDec = Z INICIAL: self = 0 CPRE: self 0 inc() POST: self = self pre + 1 CPRE: self 0 dec() POST: self = self pre 1 Alguien, al implementar el recurso mediante monitores, ha decidido implementar la comprobación de la CPRE de inc() y dec() con un while como se muestra a continuación: private int self; void inc() { mutex.enter(); while (self > 0) { cinc.await(); self ++; mutex.leave(); void dec() { mutex.enter(); while (self < 0) { cdec.await(); self --; mutex.leave(); void desbloqueo() { if (self <=0 && cinc. waiting() >0) { cinc.signal(); else if(self >=0 && cdec. waiting() >0){ cdec.signal(); Un thread ejecutando inc() y bloqueado en la condition cinc podría quedarse bloqueado nuevamente tras ser despertado. Un thread ejecutando inc() y bloqueado en la condition cinc comprobará innecesariamente la CPRE tras ser despertado, pero no volverá a bloquearse. (1 punto) 2. Suponed el CTAD e implementación de la pregunta anterior, y que solo un thread ejecuta la operación dec(). Un thread ejecutando dec() puede sufrir inanición. Todas las invocaciones tanto de inc() como de dec() terminarán, en todas las ejecuciones. Ninguna de las anteriores.

2014/2015 - Segundo Semestre Concurrencia 2/6 (1 punto) 3. Dada la siguiente clase que implementa el CTAD de la pregunta 1 usando JCSP: public void run() { public class C implements CSProcess { private Any2OneChannel chinc; private Any2OneChannel chdec; private int self = 0; static final int INC = 0; static final int DEC = 1; public void inc() { chinc. out(). write( null); self ++; final Guard[] puertos = new AltingChannelInput [2]; puertos[ INC] = chinc.in(); puertos[ DEC] = chdec.in(); final Alternative servicios = new Alternative( puertos); boolean[] sinccond = new boolean [2]; int petindex; while (true) { sinccond[ INC] = self <= 0; // inc sinccond[ DEC] = self >= 0; // dec petindex = servicios. fairselect( sinccond); public void dec() { chdec. out(). write( null); self --; switch( petindex) { case INC: chinc.in().read(); break; case DEC: chdec.in().read(); break; Se trata de una implementación correcta del recurso compartido. Se trata de una implementación incorrecta del recurso compartido (1 1 / 2 puntos) 4. Considere tres threads ejecutando el siguiente código: while( true) { ch1. out(). write( null); ch2.in().read(); while( true) { ch1.in().read(); ch2. out(). write( null); ch1.in().read(); ch3. out(). write( null); while( true) { ch1. out(). write( null); ch3.in().read(); Considere que no hay ningún otro thread ejecutando. (Sugerencia: usa la última página para dibujar el grafo de canales y threads.) El programa no sufre interbloqueos. El programa puede sufrir interbloqueos en algunas ejecuciones. El programa se bloqueará necesariamente en todas las ejecuciones.

Apellidos: Nombre: Matrícula: (1 1 / 2 puntos) 5. Partimos de la especificación formal de un recurso compartido mostrada en la izquierda, donde alguien ha decidido implementarlo mediante monitores con el código de la derecha: C-TAD Turno void cambia( int t) { mutex.enter(); OPERACIONES ACCIÓN cambia: Turno[e] SEMÁNTICA DOMINIO: TIPO: Turno = 0 1 INICIAL: self = 0 CPRE: t = self cambia(t) POST: self = (self pre + 2 1) if( self!= t) cond[t].await(); self = ( self + 1) % 2; senalenviada = false; for( int i = 0; i < 2 &&!senalenviada; i ++) if( self!= i) { cond[i].signal(); senalenviada = true; mutex.leave(); Se pide señalar la respuesta correcta: El recurso podría quedar bloqueado, ya que puede hacer signals sobre conditions que no lo necesitan. Se podrían hacer signals que despertasen hilos cuya CPRE no se cumple. Ambas son ciertas (1 punto) 6. Supóngase un objeto c de una clase C en la que se han definido los métodos o y p, declarados como synchronized. Supóngase también que un thread t entra en un bucle infinito mientras ejecuta el código de c.o(). En cada iteración de este bucle infinito se llama wait(). Cualquier otro thread distinto de t que intente ejecutar c.p() quedará bloqueado para asegurar la exclusión mutua. Cualquier otro thread distinto de t que intente ejecutar c.p() no quedará bloqueado porque la exclusión mutua afecta sólo a las llamadas a c.o(). Cualquier otro thread distinto de t que intente ejecutar c.p() no quedará bloqueado porque el wait() del bucle infinito soltará el mutex del objeto c.

2014/2015 - Segundo Semestre Concurrencia 4/6 (3 puntos) 7. A continuación os proporcionamos la especificación de un recurso compartido que implementa la adquisición simultánea de pares de tokens adyacentes escogidos de un vector circular de tokens. Las operaciones adquirir y soltar reciben un índice válido del vector de tokens. La operación adquirir(i) corresponde a la adquisición de los tokens en las posiciones i e i + 1 (o 0 si i + 1 es igual al número total de tokens). La operación soltar(i) libera los tokens de las posiciones i e i + 1. Un proceso que invoca adquirir tendrá que bloquearse si alguno de los tokens necesarios está asignado. C-TAD AnilloTokens OPERACIONES ACCIÓN adquirir: Indice[e] ACCIÓN soltar: Indice[e] SEMÁNTICA DOMINIO: TIPO: AnilloTokens = Indice B TIPO: Indice = {0... N 1 INVARIANTE: {i Indice self(i) mod 2 = 0 INICIAL: i Indice self(i) CPRE: self(i) self((i + 1) mod N) adquirir(i) POST: self = self pre {i Cierto {(i + 1) mod N Cierto PRE: self(i) self((i + 1) mod N) CPRE: Cierto soltar(i) POST: self = self pre {i Falso {(i + 1) mod N Falso Se pide: completar la implementación por monitores de este recurso. (En la siguiente página.) IMPORTANTE: No implementar el chequeo de las PRE.

Apellidos: Nombre: Matrícula: public class AnilloTokensMonitor implements AnilloTokens { private final int N; // N: para el tamanno del anillo private boolean anillo[]; private Monitor mutex; private Cond cadquirir[]; private AnilloTokensMonitor () { public AnilloTokensMonitor (int n) { // n: tamanno del anillo public void adquirir (int i) { // No implementar la PRE! // accedemos en if ( ) { // CPRE anillo[i] = true; anillo[(i+1) % N] = true; public void soltar (int i) { anillo[i] = false; anillo[(i+1) % N] = false; private void desbloqueo () { // desbloqueo generico // liberamos // No implementar la PRE! // accedemos en // CPRE: cierto // desbloqueo generico // liberamos for ( ) { if ( ) {

2014/2015 - Segundo Semestre Concurrencia 6/6 (Página intencionadamente en blanco, puede usarse como hoja en sucio.