etsisi.upm.
es 9 de junio 2023 Programación Concurrente y Avanzada
Segundo Parcial. Prácticas. TEST A. Tiempo: 40 m
Nombre ......................................................................
Primeras 3 letras del 1º Apellido
Apellidos ......................................................................
Conteste a las preguntas en la siguiente tabla. Solo se corregirán las respuestas que figuren en la tabla.
Cada pregunta tiene una sola opción válida, con valor de 1 punto sobre 10. La contestación errónea a
una pregunta penaliza 1/3 de punto sobre 10.
Preg. 1 2 3 4 5 6 7 8 9 10
Resp.
Sea el siguiente programa en JBACI:
program Examen;
MONITOR Incognita;
VAR value : INTEGER;
notbusy : CONDITION;
PROCEDURE X;
BEGIN
IF (value = 0) THEN WAITC(notbusy) ELSE value := value - 1;
END;
PROCEDURE Y;
BEGIN
IF (EMPTY(notbusy)) THEN value := value + 1 ELSE SIGNALC(notbusy);
END;
BEGIN { initialization code }
value := 1;
END; // of monitor
var n: integer = 0;
procedure inc(i: Integer);
begin
X;
n := n + i;
Y;
end;
begin
cobegin
inc(1); inc(2); inc(3); inc(4)
coend;
writeln(n);
end.
1
1) ¿Cuál es el máximo número de procesos que simultáneamente pueden estar esperando en
la cola de la condición notbusy?
a) 1.
b) 2.
c) 3.
d) 4.
2) Un proceso que está ejecutando el procedimiento X:
a) Nunca puede ser expulsado de la CPU puesto que dejaría bloqueado el monitor.
b) Puede ser expulsado si el planificador del sistema operativo así lo decide, aunque el
monitor quedaría libre para que otro proceso pueda entrar.
c) Puede ser expulsado si el planificador del sistema operativo así lo decide, aunque el
monitor quedaría bloqueado.
d) Puede ser expulsado, aunque iría directamente a la cola asociada a la variable
notbusy.
3) Si el proceso inc(1) está ejecutando X y el proceso inc(2) quiere ejecutar Y:
a) Se permite a inc(2) ejecutar Y ya que no hay exclusión sobre la variable n.
b) El proceso inc(2) se bloquea y pasa a la cola de espera asociada con la variable notbusy.
c) El proceso inc(2) puede ejecutar Y mientras inc(1) está ejecutando X, ya que X e Y son
operaciones distintas.
d) El proceso inc(2) se bloquea en la cola de entrada al monitor hasta que el monitor quede
libre.
4) En cuanto a la operación WAITC(notbusy) del programa anterior:
a) El proceso que la invoca, abandona la región crítica del monitor y espera en la cola
asociada a la variable notbusy.
b) El proceso que la invoca pasa a la cola de entrada del monitor a la espera de que la
condición notbusy sea cierta.
c) El proceso que la invoca hace espera activa hasta que la condición notbusy sea cierta
bloqueando el acceso al monitor.
d) El proceso que la invoca abandona inmediatamente el monitor y pasa a ejecutarse uno
de los procesos que estaban esperando en la cola asociada con la condición notbusy.
5) Respecto al programa anterior, indique cuál de las siguientes afirmaciones es cierta (solo
hay una cierta):
a) Es posible que un proceso se bloquee en la cola asociada con la variable condición para
siempre.
b) El último proceso en acabar siempre será inc(4).
c) Puede haber una condición de carrera en el acceso a la variable n.
d) No hay condición de carrera en el acceso a la variable value.
6) En el ejercicio 3 de la práctica de actores se pedía implementar con actores un circuito
combinacional con dos puertas AND y una OR. Alguien ha sugerido una solución en la que si
el primer mensaje que le llega al actor que representa la puerta OR es un valor lógico 1, no
hace falta esperar al otro mensaje. ¿Cuál de las siguientes afirmaciones es cierta respecto a
la solución sugerida?
a) El actor está obligado a esperar a que lleguen los dos mensajes.
b) El actor no está obligado a esperar a que llegue el otro mensaje para calcular el resultado.
c) Si el actor calcula la salida sin esperar el otro mensaje y termina ejecutando
context.stop(self), bloqueará indefinidamente al actor que falta por enviarle el mensaje.
d) Si un actor envía un mensaje a otro actor que ya ha terminado, el primero también
termina.
7) En relación con la operación de envío tell (!), indique cuál de las siguientes afirmaciones es
cierta:
a) Se pueden perder mensajes.
b) Los mensajes pueden llegar duplicados.
c) Si un actor A envía a un actor B los mensajes m1 y m2, el actor B puede recibir esos
mensajes en cualquier orden.
d) Un actor puede decidir, de entre los que están en su buzón, cuál es el siguiente que
quiere procesar.
8) En relación con la operación de envío tell (!), indique cuál de las siguientes afirmaciones es
cierta:
a) El envío siempre es síncrono.
b) El envío a veces es síncrono y otras veces asíncrono.
c) El envío siempre es asíncrono.
d) El actor que envía siempre debe esperar que lo reciba el actor destinatario.
9) En relación con la jerarquía de actores, indique cuál de las siguientes afirmaciones es cierta:
a) Un actor puede tener varios padres.
b) Un actor puede enviarle un mensaje (msg) a su padre invocando la operación:
actor.parent.name ! msg.
c) Un actor puede enviarle un mensaje (msg) a todos sus hijos invocando la operación:
for (c <- context.children) c ! msg.
d) Un actor puede seguir existiendo, aunque su actor padre ya no exista.
10) En relación con la jerarquía de actores, indique cuál de las siguientes afirmaciones es cierta:
a) Un actor puede enviar un mensaje a cualquier actor del sistema si conoce su nombre.
b) Un actor solo puede enviar mensajes a su padre o a sus hijos.
c) Un actor puede enviar un mensaje a cualquier actor del sistema si conoce su URL
(referencia).
d) Un actor solo puede recibir mensajes de su padre.
Preg. 1 2 3 4 5 6 7 8 9 10
Resp. c c d a d b a c c c