0% encontró este documento útil (0 votos)
20 vistas10 páginas

Programación Concurrente y Distribuida RESPUESTAS ALUMNOS

La convocatoria detalla un examen de Programación Concurrente y Distribuida con una duración máxima de 90 minutos y un total de 12 preguntas, que incluyen opciones múltiples y desarrollo. Se especifican criterios de evaluación, incluyendo puntuación positiva y negativa, así como instrucciones sobre el uso de materiales permitidos. Además, se presentan ejemplos de preguntas y respuestas relacionadas con conceptos clave de programación concurrente y multiprocesamiento.

Cargado por

StriloX
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
20 vistas10 páginas

Programación Concurrente y Distribuida RESPUESTAS ALUMNOS

La convocatoria detalla un examen de Programación Concurrente y Distribuida con una duración máxima de 90 minutos y un total de 12 preguntas, que incluyen opciones múltiples y desarrollo. Se especifican criterios de evaluación, incluyendo puntuación positiva y negativa, así como instrucciones sobre el uso de materiales permitidos. Además, se presentan ejemplos de preguntas y respuestas relacionadas con conceptos clave de programación concurrente y multiprocesamiento.

Cargado por

StriloX
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 10

CONVOCATORIA ORDINARIA EXÁMENES PROGRAMACI’ON CONCURRENTE Y

DISTRIBUIDA
Criterios de evaluación Información a rellenar
Duración: …… siendo el 90
máximo 90 minutos.
Materiales que son ACCESO A un editor de texto
necesarios:
ejemplo (documentos que
se pueden abrir, apuntes,
uso de internet o algún
programa adicional)
Puntuación por pregunta: - Diez primeras preguntas: 0.5
siendo el máximo 10 - Pregunta once: 1,5
puntos totales. - Pregunta doce: 3,5

Puntuación negativa por - Las respuestas incorrectas restan 0.15 puntos por pregunta.
respuesta incorrecta:
El valor debe incluir el
signo negativo
Instrucciones del examen: Bienvenido/a al examen de Programación Concurrente y
Explicar a los estudiantes Distribuida.
cómo hay que realizar un
examen, añadir aquí el La prueba consta de 12 preguntas. Las 10 primeras preguntas
encabezado. son de tipo opciones múltiples, en las que sólo una es correcta
y valen 0,5 puntos cada una y La pregunta 11 es de tipo
desarrollo y razonamiento teórico y vale 1,5 puntos. La
pregunta 12 consiste en el desarrollo de un pequeño programa
y vale 3,5 puntos.

EXAMEN:

Type: MC

1. Respecto a las ventajas de la programación multihilo o multitarea. Elige la opción no


correcta.

*a. Compartición del espacio de direcciones

b. Facilidad de comunicación entre hilos

c. Coste de creación y destrucción de hilos.

d. Todas las respuestas anteriores son correctas.

Respuesta.

Compartición del espacio de direcciones (incluye las pilas), es una desventaja.


Tema_2_Programación_Concurrente_y_Distribuida_CLASE, pág. 12

Type: MC

2. ¿Cuál de las siguientes es una ventaja del multiprocesamiento en comparación con el


multihilo?

a) Menor uso de memoria

b) Evita bloqueos

*c) Paralelismo real en tareas limitadas por la CPU

d) Mejor gestión de subprocesos

Respuesta:

c) Paralelismo real en tareas limitadas por la CPU

Explicación:

Multiprocesamiento vs. Multihilo

El multiprocesamiento implica el uso de múltiples procesos, cada uno con su propio espacio de
memoria. Cada proceso se ejecuta de forma independiente, lo que permite un verdadero
paralelismo porque los procesos pueden ejecutarse en diferentes núcleos de CPU
simultáneamente.

El multihilo implica que varios subprocesos se ejecuten dentro del mismo proceso y compartan
el mismo espacio de memoria.

El multiprocesamiento es la capacidad de un procesador para ejecutar varias tareas no


relacionadas simultáneamente. Le permite crear programas que pueden ejecutarse
simultáneamente y usar todo el núcleo de la CPU para una ejecución eficiente de las tareas.

Dado que los procesos no comparten la misma memoria, no pueden modificar la misma
memoria al mismo tiempo, lo que nos evita el riesgo de encontrarnos con un punto muerto o
la posibilidad de corrupción de datos.

Como discutimos en clase, el procesamiento múltiple es posiblemente la opción más


inteligente en caso de que las tareas exijan mucha CPU y no tengan operaciones de E/S o
interacciones del usuario.

Algunos puntos para resumir las diferencias, ventajas y desventajas de


Multiprocesamiento/Multiprocessing y Subprocesos Múltiples/Multihilo/Multithreading:

• Los subprocesos comparten el mismo espacio de memoria, mientras que cada proceso
tiene su propio espacio de memoria.
• Compartir objetos entre subprocesos es más simple, pero se deben de tomar
precauciones adicionales para la sincronización de objetos para garantizar que dos
subprocesos no escriban en el mismo recurso compartido al mismo tiempo y que no
aparezca una condición de carrera.
• La programación de subprocesos múltiples es más propensa a errores que el
multiprocesamiento debido a la sobrecarga de programación adicional para la
sincronización de objetos.
• El proceso de generación de procesos consume más tiempo y recursos que los
subprocesos, ya que tienen una sobrecarga menor que los procesos.
• Los procesos secundarios generados se pueden interrumpir y eliminar, pero los
subprocesos secundarios no. Debemos esperar a que terminen los hilos.

Type: MC

3. En el entorno de la programación multihilo y multiproceso. ¿Qué es el bloqueo de intérprete


global (GIL) en Python?

a) Un bloqueo que impide el uso de múltiples subprocesos

* b) Un mecanismo para garantizar que solo un subproceso ejecute el código de bytes de


Python a la vez

c) Una característica que mejora el rendimiento del uso de múltiples subprocesos

d) Una herramienta de depuración para Python

Respuesta:

b) Un mecanismo para garantizar que solo un subproceso ejecute el código de bytes de Python
a la vez

Esto se explica en el archivo Python_Basico_Programacion_Funcional_CLASE.ipynb y también


las clases en las que se trató el tema de subproceso y multiproceso en Python

Type: MC

4. En el módulo de multiprocesamiento de Python, ¿qué proporciona la clase Pool?

a) Una forma de gestionar y ejecutar una colección de subprocesos

b) Una interfaz para crear memoria compartida

*c) Una forma de gestionar y ejecutar una colección de procesos

d) Un mecanismo para finalizar procesos

Respuesta:
c) Una forma de gestionar y ejecutar una colección de procesos

Esto se explica en el archivo Python_Basico_Programacion_Funcional_CLASE.ipynb y también


las clases en las que se trató el tema de subproceso y multiproceso en Python

Documentación

https://docs.python.org/es/3.10/library/multiprocessing.html#multiprocessing.pool.Pool

Type: MC

5. ¿Qué tipo de tarea es más adecuada para el procesamiento multihilo?

a) Tareas limitadas por la CPU, como la multiplicación de matrices.

* b) Tareas limitadas por E/S, como leer archivos o realizar solicitudes de red.

c) Tareas que requieren varias GPU.

d) Tareas que requieren espacios de memoria aislados.

Respuesta: b)

Esto se ha explicado a lo largo de la asignatura y en el archivo


Python_Basico_Programacion_Funcional_CLASE.ipynb y también las clases en las que se trató
el tema de subproceso y multiproceso.

Type: MC

6. ¿En qué se diferencian los monitores de los semáforos en Java?

a) Los monitores se utilizan para la señalización entre subprocesos, mientras que los semáforos
no pueden hacerlo.

b) Los monitores son mecanismos de hardware, mientras que los semáforos son
construcciones de software.

c) Los monitores permiten que varios subprocesos accedan a un recurso simultáneamente,


mientras que los semáforos no.

* d) Los monitores aplican automáticamente la exclusión mutua, mientras que los semáforos
no.

Respuesta:

d) Los monitores aplican automáticamente la exclusión mutua, mientras que los semáforos no.

Type: MC
7. En el contexto de los estados de un hilo y respecto al estado de bloqueo. Elige la opción
correcta.

*a) Cuando se produce el bloqueo, se guarda el contexto del hilo.

b) Cuando se produce el bloqueo, no se guarda el contexto del hilo.

c) En hilos a nivel de núcleo, bloquea solo el hilo.

d) En hilos a nivel de núcleo, bloquea el proceso entero.

Respuesta:

a) Cuando se produce el bloqueo, se guarda el contexto del hilo.

Tema_2_Programación_Concurrente_y_Distribuida_CLASE, Pág. 20.

Type: MC

8. En el contexto de los estados de un hilo y respecto al estado de desbloqueo. Elige la opción


correcta.

Cuando se desbloquea un hilo ...

a) En hilos a nivel de usuario, siendo el único, el proceso pasa a la cola de bloqueados.

b) Se libera su bloque de control y su pila.

c) El sistema elige uno de los procesos en estado preparado para llevarlo a ejecución.

*d) En hilos a nivel de núcleo, el hilo pasa a la cola de listos

Respuesta

d) En hilos a nivel de núcleo, el hilo pasa a la cola de listos

Tema_2_Programación_Concurrente_y_Distribuida_CLASE

Type: MC

9. Como parte del control asíncrono y los modelos básicos en la comunicación. Cuando se
realiza una primitiva Send, las alternativas de sincronización que pueden surgir en función del
tipo de envío que se realice, son (seleccione la opción no correcta):

a) Invocación remota

* b) Ejecución remota

c) Envío asíncrono

d) Envío síncrono
Respuesta.

b) Ejecución remota, no es correcta.

En función del tipo de envío que se realice, nos encontramos:

Envío asíncrono,

Envío síncrono

Invocación remota

UA2_T09_Control_Asíncrono_CLASE

Type: MC

10. En el envío asíncrono (seleccione la opción correcta):

*a) El emisor no deja de ejecutarse

b) Espera al receptor a que recibe el mensaje

c) Espera al emisor y al receptor

d) Espera al emisor a que envíe

Respuesta

a) El emisor no deja de ejecutarse. El emisor continúa ejecutándose.

Type: E

11. Sean las declaraciones S1, S2 y S3, tales que,

S1 : a = x + y
S2 : b = z + 1
S3 : c = a - b
Compruebe si dos declaraciones S2 y S3 satisfacen las condiciones de Bernstein.
Razone formalmente su respuesta. No se trata sólo de una explicación, sino de un
razonamiento formal que demuestre la respuesta.

Respuesta:

R(S2) = {z}
W(S2) = {b}
R(S3) = {a, b}
W(S3) = {c}

1. R(S2) ∩ W(S3) = {z} ∩ {c} = { }


2. W(S2) ∩ R(S3) = {b} ∩ {a, b} = {b}
3. W(S2) ∩ W(S3) = {b} ∩ {c} = { }

Por lo tanto, S2 y S3 no pueden ejecutarse simultáneamente, es decir, no se cumplen


las condiciones de Bernstein.

Type: E

12. Escriba un programa Java que utilice dos hilos para escribir simultáneamente en una
variable global y utilice monitores Java para asegurarse de que solo uno de los hilos escriba en
el archivo al mismo tiempo para evitar la corrupción de datos en la variable. El programa tiene
que utilizar los monitores de Java, synchronized, wait y notify para sincronizar ambos hilos.

- El primer hilo escribe un número en la variable y cuando termina, le comunica al segundo hilo
que la variable global está libre.

- El segundo hilo, después de ser notificado por el primer hilo, lee el valor contenido en la
variable y lo muestra a través de la consola.

- El primer hilo esperar 2 segundos y simular la producción de datos.

- El programa escribe y lee del 1 al 5 (el proceso se repite 5 veces).

IMPORTANTE

Con el fin de unificar criterios de elaboración y corrección, el programa habrá de cumplir los
siguientes criterios:

- El programa tiene de compilar correctamente y sin errores.

- El programa se compilará con el comando: javac MonitorJava.java

- El programa se ejecutará con el comando: java MonitorJava


EJEMPLO DE SALIDA DEL PROGRAMA

Thread 1: Informacion escrita = 1

Thread 2: Informacion leída = 1


Thread 1: Informacion escrita = 2

Thread 2: Informacion leída = 2


Thread 1: Informacion escrita = 3

Thread 2: Informacion leída = 3

Thread 1: Informacion escrita = 4


Thread 2: Informacion leída = 4

Thread 1: Informacion escrita = 5


Thread 2: Informacion leída = 5

Intercambio de información entre variables completado.

Respuesta

Ejemplo de una posible solución

class SharedResource {
private int data; // Variable global compartida
private boolean dataAvailable = false; // Flag para controlar el
consumo de la informacion

// Metodo para que el Thread 1 escriba la informacion desde la


variable compartida
public synchronized void writeData(int value) {
while (dataAvailable) {
try {
wait(); // Espera hasta que la informacion ha sido
consumida
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
data = value; // Escribe en la variable compartida
System.out.println("Thread 1: Informacion escrita = " + data);
dataAvailable = true; // Marca la informacion como disponible
notify(); // Notifica al Thread 2 que la informacion esta
disponible
}

// Metodo para que el Thread 2 lea la informacion desde la


variable compartida
public synchronized int readData() {
while (!dataAvailable) {
try {
wait(); // Espera hasta que la informacion este
disponible
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
System.out.println("Thread 2: Informacion leída = " + data);
dataAvailable = false; // Marca le informacion de la variable
como consumida
notify(); // Notifica al Thread 1 que la variable esta libre
return data;
}
}

public class MonitorJava {


public static void main(String[] args) {
SharedResource sharedResource = new SharedResource();

// Thread 1: Escribe informacion en la variable compartida


Thread producer = new Thread(() -> {
for (int i = 1; i <= 5; i++) {
sharedResource.writeData(i); // Escribe la informacion
en la variable
try {
Thread.sleep(2000); // Simula la
producción/llegada de la informacion
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
});

// Thread 2: Lee la informacion depositada en la variable


compartida
Thread consumer = new Thread(() -> {
for (int i = 1; i <= 5; i++) {
sharedResource.readData(); // Lee la informacion de la
variable
}
});

// Harranca los hilos


producer.start();
consumer.start();

// Espera a que finalicen los hilos


try {
producer.join();
consumer.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Intercambio de información entre variables
completado.");
}
}

También podría gustarte