¿Cuáles de las siguientes situaciones se asemejaría a un problema de
inanición en un partido de fútbol? Un jugador saca de banda antes de que se lo indique el árbitro. El balón se marcha a las gradas, pero nadie lo devuelve y el partido no puede
continuar. Hay un jugador al que nunca se le pasa el balón, por lo que no puede
participar. El portero tiene el balón en sus manos y un jugador del equipo rival intenta
quitárselo para meter gol. ¿A qué clase de problemas corresponden los términos exclusión mutua,
interbloqueo activo e interbloqueo pasivo? La exclusión mutua es un problema de seguridad, el interbloqueo activo es un
problema de seguridad y el interbloqueo pasivo es un problema de viveza. La exclusión mutua es un problema de seguridad, el interbloqueo
pasivo es un problema de seguridad y el interbloqueo activo es un
problema de viveza. La exclusión mutua es un problema de viveza, el interbloqueo activo es un
problema de seguridad y el interbloqueo pasivo es un problema de viveza. La exclusión mutua es un problema de viveza, el interbloqueo activo es un
problema de viveza y el interbloqueo pasivo es un problema de seguridad. Un sistema monoprocesador... Es un sistema en el que los procesos se ejecutan de manera paralela y
donde cada procesador puede acceder a una memoria común y
procesamiento distribuido. Es un sistema en el que los procesos se ejecutan de manera
concurrente y en la que todos que estos comparten la misma memoria. Es un sistema en el que los procesos se ejecutan de manera concurrente y
en la que todos que estos pueden acceder a una memoria distinta. Es un sistema en el que los procesos se ejecutan de manera concurrente y
donde cada procesador puede acceder a una memoria común y
procesamiento distribuido. Supongamos que disponemos del siguiente conjunto de instrucciones:
S1-> a = a +b
S2-> b = a +1
S3-> y = b -2
Aplicando las condiciones de Bernstein, seleccione la respuesta correcta: Las instrucciones S1 y S2 se pueden ejecutar concurrentemente. Las instrucciones S1 y S3 se pueden ejecutar concurrentemente. Las instrucciones S2 y S3 se pueden ejecutar concurrentemente Ninguna instrucción puede ejecutarse concurrentemente debido a que no se
cumplen las condiciones de Bernstein. ¿Cuál de las siguientes definiciones NO corresponde a una propiedad de
seguridad en la corrección de programas concurrentes? El sistema hace progresos, pero existen procesos que no obtienen
tiempo de CPU para avanzar. Si un proceso adquiere un recurso, otros procesos que quieran utilizarlo
esperarán a que sea liberado. Espera infinita de los procesos a un evento que no ocurrirá. Garantizar la espera de un proceso a la ocurrencia de un evento necesario
para continuar su ejecución. En base a la definición de proceso, señale la correcta: Proceso es una actividad asíncrona susceptible de ser asignada a un
procesador. Proceso es una actividad síncrona susceptible de ser asignada a un
procesador. Proceso es una actividad estática susceptible de ser asignada a un
procesador. Ninguna es correcta. Un programa paralelo es: Un conjunto de acciones que pueden ser ejecutadas simultáneamente. Un tipo de programa concurrente diseñado para ejecutarse en un
sistema multiprocesador. Un tipo de programa que está diseñado para ejecutarse en un sistema
distribuido. Un conjunto de acciones que pueden ser ejecutadas paralelamente. Para que dos conjuntos de instrucciones Si y Sj se puedan ejecutar
concurrentemente, se tiene que cumplir que: L(Si) ∧ E(Sj) = Ø
E(Si) ∧ L(Sj) = Ø
E(Si) ∧ E(Sj) = Ø L(Si) ∧ E(Sj) = Ø
L(Si) ∧ L(Sj) = Ø
E(Si) ∧ E(Sj) = Ø L(Si) ∧ E(Sj) = Ø
E(Si) ∧ L(Sj) = Ø
L(Si) ∧ L(Sj) = Ø L(Si) ∧ E(Sj) = Ø
E(Si) ∧ L(Sj) = Ø
E(Si) ∧ E(Sj) != Ø. ¿Por qué los algoritmos de Peterson y Dekker no funcionarían en un
ordenador moderno? Debido a que los ordenadores modernos utilizan arquitectura ARM6. Porque estos algoritmos tienen fallos en su estructura, por lo que no
funcionarían para ordenadores antiguos tampoco. Debido a que los procesadores modernos no garantizan que las
instrucciones se ejecuten en orden. Debido a que estos algoritmos son una solución hardware que no se
implementa en los procesadores modernos. ¿Qué algoritmo elimina el problema de la espera ocupada? Algoritmo de Peterson. Algoritmo de Lamport. Algoritmo de Dekker. Ninguno de ellos. ¿Cuál de las siguientes NO es una propiedad de seguridad? Exclusión mutua. Inanición. Interbloqueo pasivo. Condición de sincronización. Las propiedades de seguridad en programas concurrentes son: Exclusión mutua, interbloqueo activo e inanición. Exclusión mutua, interbloqueo pasivo y condición de sincronización. Exclusión mutua, inexistencia de interbloqueos e interbloqueo pasivo. Orden parcial de ejecución de instrucciones e indeterminismo. ¿Cuales son las propiedades de viveza? Interbloqueo activo, inanición y exclusión. Condición de sincronización e interbloqueo pasivo. Interbloqueo activo e inanición. Interbloqueo activo e interbloqueo pasivo. Un programa diseñado para ejecutarse en una red de procesadores
autónomos que no comparten memoria común es: Un programa paralelo. Un programa distribuido. Un programa concurrente. Un programa multiprocesador. ¿Qué significa que un programa sea concurrente? Un programa concurrente es aquel que define un conjunto de acciones
que pueden ser ejecutadas simultáneamente. Un programa concurrente es un programa diseñado para ejecutarse en un
sistema multiprocesador. Un programa concurrente es un tipo de programa paralelo que está diseñado
para ejecutarse en un sistema distribuido, es decir, en una red de
procesadores autónomos que no comparten una memoria común. Un programa concurrente no puede ser distribuido. Un programa concurrente Está diseñado específicamente para ejecutar dos acciones simultáneas. Está diseñado específicamente para ejecutarse en un sistema distribuido. Está diseñado para ejecutar un conjunto de acciones simultáneamente. Ninguna de las anteriores es correcta. Para saber si un programa se puede ejecutar concurrentemente se emplea: Las condiciones de Bernstein . El algoritmo de Peterson. El algoritmo de Dekker. TestAndSet. Cuál de estas no es una condición para que se produzca la exclusión
mutua: Un proceso que quiera entrar en la sección crítica, si no hay pugna por entrar
a ella, debe poder entrar. Un proceso, siempre que quiera, podrá entrar en la sección crítica. No se debe producir una situación de interbloqueo pasivo. El tiempo que un esta un proceso en la sección crítica lo hará en un tiempo
finito. En el desarrollo de la ejecución de un programa concurrente, ¿Cuándo se
produce una situación de interbloqueo? Cuando un proceso debe esperar por la ocurrencia de un evento para poder
seguir ejecutándose. Cuando el sistema en su conjunto hace progresos, pero existe un grupo de
procesos que nunca progresan pues no se les otorga tiempo de procesador
para avanzar. Cuando un proceso adquiere un recurso y otros procesos deben esperar a
que sea liberado. Cuando todos los procesos están esperando porque ocurra un evento
que nunca se producirá. Un proceso que está accediendo a un recurso que no puede ser accedido
por nadie más de forma concurrente se dice que se encuentra... En su sección condicional. En el estado listo. En su sección crítica. En espera ocupada. ¿Cuál de estas NO es una de las razones por las que los algoritmos de
Dekker o Peterson pueden no funcionar en un ordenador con un procesador
moderno? Incoherencia de caché. Deshabilitación de interrupciones.test Ejecución fuera de orden. Optimizaciones del compilador. ¿A quién se le debe de dar la prioridad para ejecutar la sección crítica
cuando acabe la actual? Da igual a quien se dé la prioridad, por lo tanto de forma aleatoria. Según el número que proporciona el reloj lógico de Lamport, cuanto mayor,
más prioridad. Según el número que proporciona el reloj lógico de Lamport, cuanto
menor, más prioridad. Ninguna de las otras respuestas es correcta. La instrucción testAndSet (a, b)... Es propia de lenguajes de alto nivel y se emplea para solucionar problemas
de exclusión mutua. Es una instrucción propia de Java, usada para impedir problemas de
inanición. Es una instrucción de bajo nivel para construir soluciones a la exclusión
mutua. Es una instrucción propia de Java, usada para solucionar el problema de la
exclusión mutua. ¿A qué nos referimos con “spinlocks”? Es un tipo de algoritmo que contiene espera ocupada . Es un tipo de algoritmo caracterizado por no tener espera ocupada. Es una técnica software capaz de solucionar los problemas de espera
ocupada. Es una técnica hardware capaz de solucionar los problemas de espera
ocupada. ¿Qué problema presentan los siguientes procesos si se ejecutan
concurrentemente? Se produce un interbloqueo pasivo. Se produce una violación de la exclusión mutua (pueden estar los dos en la
sección crítica al mismo tiempo). Estos procesos tienen el problema de la espera ocupada. No ocurre ningún problema de los descritos entre ellos. ¿Cuál de las siguientes afirmaciones es correcta según el código
mostrado? (La variable “sc” está inicializada a “libre”). Se puede producir un interbloqueo. Ambos procesos puede que accedan al mismo tiempo a la sección
crítica. Hasta que uno de los procesos no salga de la sección crítica, el proceso
restante nunca podrá ejecutarla. Ninguna de las otras respuestas. Cuántos hilos se ejecutan en el siguiente código: 1 hilo de ejecución. 2 hilos de ejecución. 3 hilos de ejecución. 4 hilos de ejecución. ¿Qué instrucciones pueden ser ejecutadas por 2 threads al mismo tiempo? s3 y s4. s2 y s5. s2 y s4. s3 y s5. ¿Cuáles de las siguientes líneas NO se pueden ejecutar concurrentemente
suponiendo que e1 y e2 son instancias de Example y o1 es el mismo para
ambas? e1.s1 y e1.s1 e1.s5 y e2.s5 e1.s2 y e2.s2 e1.s4 y e1.s2. ¿Qué afirmación es cierta con respecto al siguiente fragmento de código? El thread nunca pasará a formar parte del conjunto de espera ya que la
condición siempre se inicializa a cierta. Es posible que se produzca un interbloqueo. Si la condición no es cierta, el thread pasará a formar parte del conjunto
de espera, abandonando el cerrojo adquirido sobre el objeto. Cuando le
despierten, volverá a evaluar la condición. Al estar los dos métodos sincronizados, el thread que hace que la variable
condición obtenga el valor true mediante el método
hacerCondicionVerdadera() nunca podrá despertar al thread encargado de
evaluar la condición. Si un thread ha sido liberado por ejecución de notify(), ¿en qué estado se
encontraba previamente?: Bloqueado. Dormido. Espera por wait(). Espera por synchronized. Indica cuál de estas características de los Threads Daemon es falsa: Tienen la más baja prioridad y se ejecuta cuando ningún otro thread se está
ejecutando. Algunos thread Daemon son ejecutados automáticamente cuando un
programa está en ejecución. Tienen la más baja prioridad y se ejecutan cuando algunos threads se
están ejecutando en segundo plano. El thread Daemon hereda del thread que lo crea, por lo que no puede
cambiarse una vez que se ejecuta. ¿Es obligatorio que el método wait() esté dentro de un bucle while? Da igual poner while o if. No, porque entonces sería espera ocupada. No siempre, ya que algunas aplicaciones no necesitan reevaluar la
condición y bastaría con un simple if, aunque se recomienda el uso del
while. Si, porque no siempre se cumple la condición y hay que volver a evaluarla.
. Dado el siguiente código:¿Cuál de las siguientes respuestas es correcta? La “e” se puede imprimir con la “b” de manera concurrente, es decir, sin
exclusión mutua. Se puede imprimir de manera concurrente la “e” con la “a”, es decir, sin
exclusión mutua. La “a” se puede imprimir de manera concurrente con la “c”, es decir, sin
exclusión mutua. Se puede dar el caso de imprimir “cbd” (en este orden). ¿Cuál es la diferencia principal entre una estructura de datos bloqueantes
y no bloqueantes? Las estructuras bloqueantes no permiten su uso en programas de más de un
hilo, mientras que las no bloqueantes sí lo permiten. Las estructuras no bloqueantes permiten la acción simultánea sobre ellas de
varios hilos al mismo tiempo, mientras que las bloqueantes se bloquean ante esta circunstancia, para proteger la integridad de los datos.
Una estructura será bloqueante o no en función de los hilos que actúen sobre
ellas, inicialmente no hay diferencias. Las estructuras bloqueantes bloquean los hilos cuyas operaciones no
pueden realizarse inmediatamente, mientras que las no bloqueantes
lanzan una excepción o valor especial en esos casos. ¿Cuál de las siguientes ejecuciones podría ser una salida en pantalla para
este código? (Los semáforos se inicializan a 0) “ACBDFEG” CDABFEG” “CFGDABE” “ABCDEFG”. Al realizar la operación c.await() en un monitor: El thread pasa al final del wait set del monitor. El thread pasa al final del entry set del monitor. El thread pasa al wait set de la variable condición c. El thread pasa al entry set de la variable condición c. ¿Qué tipo de semántica de la operación signal tiene un mayor esfuerzo de
programación para el programador? Retorno Forzado (DR). Desbloquear y Esperar (DE). Desbloquear y Espera urgente (DU). Desbloquear y Continuar (DC). ¿Cómo se garantiza la exclusión mutua en los monitores? Mediante una variable de tipo Condition (Condición). Mediante el uso de Locks. Mediante el uso de la palabra clave synchronized. Mediante el uso del await y signal, poniendo entre ambas instrucciones el
código que se desee ejecutar en exclusión mutua. La operación signal en Java utiliza una semántica: Desbloquear y Continuar (DC). Retorno forzado (DR). Desbloquear y espera urgente (DU). Desbloquear y esperar (DE). Los problemas solucionados con semáforos también se pueden resolver
con... Streams. Sockets. Monitores. JavaRMI. Los monitores en relación con los semáforos: Son más óptimos que los semáforos. Son herramientas de más bajo nivel de programación. Son herramientas de más alto nivel con una estructura que ayuda a la
corrección del programa. Permiten resolver más problemas que los semáforos. ¿Cuál de las siguientes afirmaciones es FALSA? Los semáforos son mecanismos de bajo nivel, no estructurados y que pueden
dar lugar a errores transitorios. El Sistema Operativo garantiza que las operaciones ‘acquire’ y al ‘release’ se
ejecutan de forma indivisible. Los monitores tienen distinta capacidad de expresión que los
semáforos, es decir, cualquier problema de semáforos no puede ser
resuelto con monitores. Todos los métodos de los monitores se ejecutan en exclusión mutua para
garantizar la integridad del programa. ¿Cuándo puede ejecutarse d en P2? Nunca, ya que no tienen ninguna relación los algoritmos. Sólo si P3 ha ejecutado a o P1 ha ejecutado e. Sólo si P3 ha ejecutado f y P1 ha ejecutado b. Cuando P2 ha ejecutado c. Para que el proceso P1 no pueda ejecutar b hasta que P2 haya ejecutado c,
¿Qué han de valer inicialmente t y s? t = 0; s = 1 t = 1; s = x t = 1; s = 0 t = 0; s = x. Escoge la respuesta correcta que define el comportamiento de la
instrucción acquire(s): if s>0 then
s=s-1
else bloquear proceso; if s>=0 then
s=s-1
else bloquear proceso; if s>=0 then
s=s+1
else bloquear proceso; if s<0 then
s=s-1
else bloquear proceso;. Cuando hablamos de “Desbloquear y Continuar” en la operación signal,
nos referimos a: Se desbloquea a un proceso de la cola condición y el desbloqueador sale
inmediatamente del monitor, terminando la ejecución del método. Nos
aseguramos que la condición no cambia. El desbloqueador cede el monitor al proceso desbloqueado. El
desbloqueador se bloquea en la cola del monitor. Nos aseguramos que la
condición no cambia. Se desbloquea a un proceso de la cola de condición, el desbloqueador sale
inmediatamente del monitor y se sigue ejecutando el método del proceso
desbloqueador. Se desbloquea a un proceso de la cola de condición, pero se sigue
ejecutando el método del proceso desbloqueador. Señala la respuesta correcta sobre los semáforos: Es un mecanismo estructurado. Tanto la exclusión mutua como la sincronización se implementan
usando el mismo par de primitivas. Los programas que utilizan semáforos son fáciles de mantener. No todos los problemas solucionados con semáforos pueden ser
solucionados también con monitores. ¿Cuál de las siguientes opciones NO es un mecanismo de sincronización
de threads? CyclicBarrier Fork/Join Phaser Exchanger. ¿El mecanismo que nos permite sincronizar los hilos al final de cada una
de los pasos en las que está dividida una tarea es? Fork/Join Exchanger CyclicBarrier Phaser. CountDownLatch es un mecanismo de sincronización avanzada donde: Todos los hilos se esperan mutuamente hasta llegar a un punto en común. Uno o más hilos esperan hasta que otro u otros hilos finalicen sus
operaciones. Los hilos pueden intercambiar elementos entre ellos. Sólo funciona cuando los hilos son del mismo tipo (pertenecen a la misma
clase). En el siguiente código, indique cuál de las siguientes afirmaciones es
verdadera: Si se ejecuta el metodo2, no se puede ejecutar el metodo1. Hasta que 5 threads no hayan ejecutado c1.await no se imprimirá por
pantalla el mensaje “c1 ejecutándose”. Hasta que 7 threads no hayan ejecutado c1.await no se imprimirá por pantalla
el mensaje “c1 ejecutándose”. Falta synchronized en los dos métodos para que funcione. ¿Qué sucede en la clase CyclicBarrier? Un conjunto de threads reutilizables arrancan a la vez o se esperan
entre sí en un punto concreto para conseguir un objetivo determinado. Los threads de la clase se emparejan e intercambian elementos entre pares
de hilos. Un conjunto de threads se esperan entre sí en un punto concreto hasta que
una serie de operaciones hayan sido realizadas y el valor del contador haya
llegado a 0. Ninguna es correcta. Cual no es una característica de las operaciones sobre streams: Se puede encadenar su uso. La iteración sobre los elementos de un stream es externa a través de
iteradores. Son fácilmente paralelizables. Si intentamos recorrer un stream dos veces obtendremos un error. ¿En qué situación es muy aconsejable utilizar la clase CyclicBarrier? Cuando queremos que un conjunto de threads o hilos (esclavos) esperen
hasta que otro thread (jefe) realice un proceso o se lo indique, sin poderse
ejecutar hasta entonces. Cuando queremos que dos threads o hilos se sincronicen en un punto y,
cuando ambos lleguen a dicho punto intercambien un objeto. Cuando queremos que un número predeterminado de threads “se
esperen” los unos a los otros en un determinado punto para continuar
con su ejecución. Cuando queremos que un máximo de cinco y un mínimo de dos threads o
hilos “se esperen” los unos a los otros en un determinado punto para
continuar con su ejecución. ¿Qué hace el siguiente código? (suponga que films es una colección no
vacía): Almacena en una lista los títulos de todas las películas que duren menos de 2
minutos. Almacena en una lista los títulos de las películas que duren menos de 2
minutos, saltándose 5 de esas películas. Almacena en una lista toda la información de las películas que duren menos
de 2 minutos saltándose 5 de esas películas. Almacena en una lista los títulos de las películas que duran menos de 2
minutos después de pasados 5 segundos. Señala la respuesta correcta con respecto a Fork/Join: Invocando execute (Task) sobre un ForkJoinPool tiene un
comportamiento asíncrono, es decir, el hilo que lo invoca sigue
ejecutándose sin esperar a que termine la tarea Task. Invocando execute (Task) sobre un ForkJoinPool tiene un comportamiento
síncrono, es decir, el hilo que lo invoca no se sigue ejecutando hasta que no
termine la tarea Task. Invocando execute (Task) sólo se podrá hacer sobre un ForkJoinTask, ya que
la utilización de ForkJoinPool provocaría errores en la ejecución Invocando execute (Task) sobre un ForkJoinPool puede tener un
comportamiento asíncrono o síncrono, depende de si Task implementa
RecursiveTask ó ActionTask. ¿Cuál de los siguientes mecanismos NO es un mecanismo de
sincronización avanzado? Exchanger. Phaser. CountDownLatch. Executor. Si estamos usando threads que usan Executor, y queremos que devuelvan
un resultado. Tenemos que usar: La clase Future y la clase Phaser. Las interfaces Future y Runnable. Las interfaces Runnable y Callable. Las interfaces Callable y Future. ¿Qué pool de threads realiza el famoso algoritmo de “Divide y vencerás”? ThreadPoolExecutor. ScheduledThreadPoolExecutor. ForkJoinPool. SynchronousQueue. Consideremos un jefe de equipo con varios subordinados. Los
subordinados no pueden empezar hasta que el jefe de equipo se lo permita.
Por otra parte, el jefe de equipo tiene que esperar a que sus subordinados
hayan terminado. ¿Qué clase de Java sería la más idónea para su
sincronización? CyclicBarrier. ForkJoin. SynchronousQueue. CountDownLatch. ¿Cuál de las siguientes afirmaciones acerca de las operaciones sobre
streams es incorrecta? Pueden encadenarse las operaciones. Es fácil paralelizar las operaciones. Los elementos de un stream reciben una iteración interna. Pueden ser recorridos varias veces. ¿Qué función tiene el siguiente código? (Suponemos un código escrito en
java):
(int a, int b) -> a + b; Se trata de una función lambda que suma dos valores (a y b). Suma dos valores (a y b) pero no se trata de una función lambda. Se trata de un stream que suma dos valores (a y b). Se trata de una función lambda concurrente. Señala la correcta: Una interfaz funcional es aquella que sólo tiene un método. El método filter de la interfaz Predicate en el siguiente código elimina de la
lista aquellos elementos que son igual a 2:
List <Integer> listaNumeros = filter (Arrays.asList (1,2,3), a->a.equals(2)); Ninguna de las otras opciones es correcta. Una interfaz funcional es aquella que tiene más de un método. Partiendo el ejemplo del proyecto BooksAlumnos y de que tenemos el
siguiente código, queremos formar otra nueva lista que contenga los títulos de
aquellos de tal forma que sus precios sean mayores de 20. También deseamos
ignorar los 3 primeros libros y queremos hacer uso de la utilidad que
presentan los streams. ¿Cuál de los siguientes fragmentos de códigos
tendríamos que usar para ello? List<String> listaLibros = books.stream().filter(l -> l.getPrecio() >
20).map(Book::getTitulo).collect(collectors.toList()); List<String> listaLibros = books.stream().skip(2).filter(l -> l.getPrecio() >
20).map(Book::getTitulo).collect(Collectors.toList()); List<String> listaLibros = books.stream().skip(3).filter(l -> l.getPrecio() >
20).map(Book::getTitulo).collect(Collectors.toList()); List<String> listaLibros = books.stream().skip(3).filter(l -> l.getPrecio() >
20).collect(collectors.toList());. Señala la respuesta correcta: “En los sockets UDP...” la clase DatagramPacket nos permite empaquetar datos para enviarlos y la
clase ServerSocket establecerá la conexión cliente/servidor. la clase Socket establecerá la conexión al servidor desde la parte del cliente y
la clase ServerSocket será la encargada de establecer la conexión
servidor/clientes (conexión pasiva). la clase DatagramPacket será la encargada del envío y recepción de
paquetes (datagramas) y la clase DatagramSocket será la que se ocupe
de gestionar los sockets para que sea posible enviar y recibir
datagramas. la clase ServerSocket establecerá la conexión al cliente desde la parte del
servidor y la clase Datagram será la que se encargue de gestionar los
paquetes de envío y recepción. En la comunicación directa simétrica: El receptor no indica explícitamente de quién espera recibir el mensaje pero
el emisor si indica a quién desea enviar el mensaje. Ni el emisor ni el receptor indican explícitamente a quién o de quién desea
enviar o recibir el mensaje. El emisor y el receptor indican explícitamente a quién o de quién desea
enviar o recibir el mensaje. Ninguna de las otras opciones es correcta. Un Socket es: Una abstracción software para representar puntos finales de conexión
entre dos máquinas. Una abstracción hardware para representar puntos finales de conexión entre
más de dos máquinas. El cable que une dos máquinas entre las que me quiero conectar y a través
del cual fluyen los bits en forma de paso de mensaje. Ninguna de las anteriores. Indica la respuesta correcta sobre las comunicaciones asimétricas: Los procesos se tienen que nombrar explícitamente, tanto emisor como
receptor. Este modelo no se adapta bien al paradigma Cliente/Servidor. Una de las ventajas con respecto a las comunicaciones simétricas es la
seguridad. El receptor recibe un mensaje formado por el contenido y un
identificador. ¿Que tienen en común invocación remota y RPC? Es síncrono, bidireccional y bueno para aplicaciones cliente/servidor. Es síncrono, bidireccional y malo para aplicaciones cliente/servidor. Es asíncrono, unidireccional y bueno para aplicaciones cliente/servidor. Es asíncrono, bidireccional y bueno para aplicaciones cliente/servidor. Indique la afirmación correcta: En el paso de mensaje asíncrono cuando un proceso A quiere enviar un
mensaje a un proceso B, el proceso A se bloquea a la espera de que el
proceso B esté listo a recibir. En el paso de mensaje síncrono existe un buzón donde un proceso A puede
enviar un mensaje a un proceso B y el proceso A deja el mensaje en dicho
buzón para que B lo reciba. En el paso de mensaje asíncrono si no existe un mensaje en el buzón, el
proceso que recibe los mensajes no se bloquea. En el paso de mensaje síncrono si un proceso A envía un mensaje, pero
el proceso B no está aún listo para recibirlo, el proceso A se bloquea a
la espera de que el proceso B esté listo. Seleccione la respuesta correcta: La invocación remota es un modelo de comunicación asíncrona que se basa
en intercambio de mensajes y bidireccional. La invocación remota es un modelo de comunicación síncrona que se
basa en intercambio de mensajes y bidireccional. La invocación remota es un modelo de comunicación síncrona que se basa
en intercambio de mensajes y unidireccional. La invocación remota es un modelo de comunicación asíncrona que se basa
en intercambio de mensajes y unidireccional. La invocación remota, a diferencia de RPC(Remote Procedure Call): Con remoto se hace referencia la ejecución en diferente procesador. Con remoto se hace referencia a la ejecución de diferentes procesos. Solo puede implementarse si se realiza en diferentes ordenadores. Ninguna de las anteriores. En los sockets UDP, el flujo de datos es: Aleatorio. Unidireccional. Síncrono. Responde a un modelo RPC. ¿En qué tipo de comunicación se usa una forma de comunicación
request-reply? Invocación remota o rendezvous extendido o cita extendida. Comunicación asíncrona. Rendezvous o cita simple. Ninguna de las otras respuestas es correcta. Generalmente si vamos a utilizar una aplicación de videoconferencias, está
utilizará sockets TCP debido a: La mayor velocidad que tienen con respecto a los UDP. Su seguridad al enviar los mensajes y que estos lleguen con mayor fiabilidad. Generalmente se utilizarían sockets UDP en este tipo de aplicaciones. Que no es necesario que se asegure la integridad de los mensajes. ¿En qué tipo de sockets el flujo de datos es bidireccional? En los sockets TCP. En los sockets UDP. En los sockets UDP y TCP. Ni en los sockets TCP ni en los UDP. Si lo que buscamos es envío de información integra y un orden de llegada
de mensajes. ¿Qué utilizaremos? Sockets UDP. Tanto Sockets UDP como Sockets TCP. Sockets TCP. Ni en Sockets UDP ni en Sockets TCP. Señala la opción que NO es una característica de los sockets TCP: Se garantiza la llegada de la información y, además, en orden. Su comportamiento se puede asemejar al de una llamada telefónica. Es posible que haya pérdidas de datagramas en el envío. Orientado a conexión y streams. Si quisiéramos establecer una conexión fuertemente tipada y síncrona que
utilizarías: Canal (Channel). Buzón (Mailbox). La dos anteriores son válidas. Ninguna de las dos. ¿Qué tipo de información transportan los sockets? Bytes Streams Sockbits Lambdas. Seleccione la respuesta correcta: Los sockets TCP utilizan datagramas para el envío/recepción. Los sockets UDP garantizan más fiabilidad que los sockets TCP. En los sockets TCP no es necesario utilizar la operación close(). En los sockets UDP no se garantiza la llegada de todos los datagramas. ¿En una comunicación asíncrona, si el mailbox del receptor se encuentra
vacío justo en el momento en que el emisor envía un mensaje, qué ocurrirá
sabiendo que el receptor había utilizado el recibir anteriormente? Que el receptor se desbloquee y el emisor se bloquee. Que el emisor no se bloquee y el receptor se desbloquee. Que el receptor siga bloqueado y el emisor no se bloquee. Que el receptor siga bloqueado y el emisor se bloquee. Cuál es una característica de los protocolos UDP: Orden en el envío de mensajes. Integridad de la información. La comunicación es muy rápida. Se garantiza la llegada de todos los paquetes. ¿Cuál de éstas es una característica de los sockets UDP? Los datos llegan en paquetes independientes. La entrega de datos está garantizada. Una vez la conexión se establece, se produce al intercambio de los datos. Los datos llegan en el mismo orden que se emitieron. ¿Cuál es estas afirmaciones NO ocurre en los protocolos de tipo TCP? Se asegura la llegada de los paquetes de datos, es decir, es más fiable pero
más lento. La llegada de los bytes no debe ser necesariamente en orden. Primero se establece la conexión entre los sistemas y después se transmiten
los datos. El protocolo TCP está orientado a la conexión. Seleccione aquel conjunto de características propias de los sockets TCP: Llegada de todos los datos garantizada, llegada de los datos en orden,
la conexión es establecida y los datos intercambiados. Llegada de todos los datos garantizada, llegada de los datos en orden, la
información es intercambiada mediante datagramas o paquetes
independientes. Llegada de todos los datos no garantizada, llegada de los datos no
necesariamente en orden, la conexión es establecida y los datos
intercambiados. Llegada de todos los datos garantizada, llegada de los datos no
necesariamente en orden, la conexión es establecida y los datos
intercambiados. ¿Cómo es la inicialización de un DatagramPacket y en dónde se usa un
DatagramPacket? new Packet(datos, datos.length, clientIPAddress, clientPort); se usa en TCP. new DatagramPacket(datos, datos.length, clientIPAddress, clientPort);
se usa en UDP. new DatagramPacket(datos, datos.length, clientIPAddress, clientPort); se usa
en TCP. new Packet(datos, datos.length, serverIPAddress, serverPort); se usa en
UDP. ¿Cuál de éstos no es un objetivo de Java RMI? Integrar el modelo concurrente en java. Mantener la semántica entre objetos locales y remotos. Preservar la seguridad otorgada por Java. Realizar callbacks entre servidor y cliente. Registro es un servicio estático que está establecido en cada nodo en el
cual: Los clientes se registran con un nombre al entrar en el servidor. El servidor registra los nombres de los clientes que han entrado en el
servidor. Se encuentran las interfaces. Los servidores se registran con un nombre para que los clientes puedan
localizarlo. Cuales de estas características no son propias de los objetos migratorios: Son objetos que están en un host diferente de aquel en el que fueron
creados. Nunca pueden ser serializables. Pueden moverse por la red. Todas las anteriores son propias de los objetos migratorios. Continúe la frase: En migración de objetos en Java RMI los objetos
migrantes... Se encuentran en el mismo host donde han sido creados. Se encuentran en un distinto host donde han sido creados, además han
de ser serializables para poder “moverse por la red” y ser ejecutados en
otro host. Son invocados remotamente. Se encuentran en un distinto host donde han sido creados, además han de
ser no serializables para poder “moverse por la red” y ser ejecutados en otro
host. Se quiere localizar el servicio “virtualProcess” en una máquina remota
cuya ip es 62.202.156.128. Suponemos que usa el registro RMI estándar, y que
dicho registro escucha las peticiones en el puerto 1099. ¿Cuál de las
siguientes opciones localizará el servicio correctamente? Naming.lookup(“//62.202.156.128:1099/virtualProcess”); Naming.lookup(“rmi://62.202.156.128:1099/virtualProcess”); Naming.lookup(“//62.202.156.128/virtualProcess”, 1099); Naming.lookup (virtualProccess,” 62.202.156.128”,1099);. Imaginemos un objeto “O” (con sus atributos y métodos) el cual
implementa una interfaz “IObjeto”, la cual extiende de la clase Serializable. Si
migramos dicho objeto “O” de un Cliente a un Servidor, que parte de él se
migra: Sólo sus atributos. Ninguna es correcta. Nada, se ejecuta en el Cliente. Tanto atributos como métodos. ¿Qué es un callback? Es un protocolo del nivel de transporte basado en el intercambio de
datagramas. Es un método de comunicación asíncrona, que reenvía el mensaje si no
recibe respuesta. Se produce cuando un método remoto recibe por parámetro un objeto
local y hace una llamada a ese objeto local. Ninguna de las otras respuestas es correcta. En JavaRMI llamamos “Triángulo Mágico” a: El conjunto de Cliente, Servidor y Registro. El conjunto de Cliente, Servidor e Interfaz. El conjunto de Cliente, Servidor y Aplicación. No existe ese concepto en JavaRMI. En problema del acuerdo bizantino debe estar sujeto a las siguientes
condiciones: Byzantine failure (debe de haber fallos en ciertos nodos para que se pueda
resolver el problema), el Acuerdo (todos los procesos que no fallen deben
tomar una decisión) e Inicialización (todos los procesos que no fallen deben
volver a inicializarse con su mismo valor). Acuerdo (todos los procesos que no fallan deben estar de acuerdo en el
mismo valor), Crash failure (si se producen fallos en algunos nodos debe de
seguir funcionando) y Terminación (todo proceso que falle debe tomar ciertas
decisiones). Acuerdo (todos los procesos que no fallan deben estar de acuerdo en el
mismo valor), Validez (si el proceso líder no falla, entonces el valor
acordado por el resto de los procesos debe ser el inicial del líder),
Terminación (todo proceso que no falle debe tomar una decisión). Desacuerdo (si hay desacuerdo por parte de los procesos secundarios debe
inicializarse de nuevo el proceso líder), Inicialización (una vez inicializado en
caso de fallo, el proceso líder debe de emitir una decisión contraria) y Validez
(los nodos han de evitar comportamientos anómalos). En el algoritmo de los relojes lógicos de Lamport... Los relojes son contadores que asocian un determinado valor numérico
C(x) a todos los eventos que se producen en el sistema, donde si X à Y,
entonces C(X) < C(Y). Los relojes son contadores que asocian un determinado valor numérico C(x)
a los eventos de envío de mensajes que se producen en el sistema, donde si
X à Y, entonces C(X) <= C(Y). Los relojes son contadores que asocian un determinado valor numérico C(x)
a los eventos que se producen en el sistema, donde si X à Y, entonces C(X)
<= C(Y). Los relojes son contadores que asocian un determinado valor numérico C(x)
a los eventos de recepción de mensajes que se producen en el sistema,
donde si X à Y, entonces C(X) < C(Y). ¿Cuál de las siguientes NO es una propiedad que deba cumplir un
algoritmo para ser descentralizado? Los nodos sólo toman decisiones en base a su información local. Ningún nodo debe mantener toda la información que necesita el algoritmo. El fallo de un nodo impide que el algoritmo progrese. No se debe asumir la existencia de ningún reloj físico global. Dada la siguiente representación:
Seleccione la respuesta correcta: b se ejecuta antes que f e se ejecuta antes que b Ninguna de las otras respuestas es correcta e y c tienen algún tipo de asociación. Respecto a los relojes lógicos, señale la afirmación falsa: Podemos afirmar que a ocurre antes que b y por ello antes que g. Podemos afirmar que f ocurre antes que e y por ello e antes que c. Podemos afirmar que c ocurre ocurre después que f y por tanto antes que h. Podemos afirmar que b ocurre antes de e y por tanto antes que h. El algoritmo del anillo es un algoritmo para conseguir exclusión mutua de
carácter distribuido en el que... Los nodos se mandan mensajes entre sí para saber si pueden acceder a la
sección crítica. Se elige un nodo líder que coordina el acceso a la entrada de la sección
crítica mediante mensajes de solicitud y concesión. Los nodos acceden a la sección crítica haciendo uso de un token que
“circula” entre los nodos. Los nodos pueden acceder a la sección crítica cuando consiguen un token
que solicitan al resto de nodos que no quieren entrar en su sección crítica. En el problema de “los generales bizantinos” (consenso), ¿qué significa
la condición de Acuerdo? Todos los procesos que no fallan deben de estar de acuerdo en el
mismo valor. Todos los procesos que fallan deben de estar de acuerdo en el mismo valor. Todos los mensajes deben de ir en la misma dirección para así evitar
colapsar un nodo. En cuanto tres nodos estén de acuerdo, hay consenso. Teniendo los siguientes relojes vectoriales (a[1,2,1], b[2,2,6], c[2,3,0],
d[4,3,5]) podemos concluir que: a ocurrió antes que c b es concurrente con a c ocurrió antes que d b ocurrió antes que c. En exclusión mutua distribuida... Descentralizada: el que tiene el token es el líder. En anillo: hay un líder en el medio de todos los nodos dictando quién entra en
la sección crítica. Centralizada: el líder una vez libera a un nodo de la sección crítica, tiene que
ir uno por uno para ver quien ha solicitado entrar en la sección crítica. Descentralizada: un nodo necesita el aprobado de todos los nodos para
entrar en la sección crítica. ¿Es posible conseguir una sincronización perfecta en relojes físicos? Sí, y también en los relojes lógicos. No, ni tampoco en los relojes lógicos. Sí, pero no en los relojes lógicos No, pero sí en los relojes lógicos, al menos preservando el orden de los
eventos. ¿Cuáles de los siguientes problemas no es relevante en la programación
distribuida? Alternancia estricta. Exclusión Mutua. Detección de terminación. DEtección de Deadlock. ¿Qué propiedad debe cumplir un algoritmo para que se considere
descentralizado? Se asume la existencia de un reloj físico común o alguna otra fuente precisa
del tiempo global. El fallo de un nodo impide que el algoritmo progrese. Si se detecta que no
llega el envío de un mensaje, el algoritmo para y no puede seguir enviando
mensajes a los siguientes nodos de la lista. Los procesos toman las decisiones a partir de la información disponible en
forma amplia y global, es decir, no hace falta que los sistemas se encuentren
en la misma ubicación. Ningún nodo debe mantener toda la información que necesite el
algoritmo, sino que se debe distribuir entre todas las máquinas. ¿A qué tipo de sistema dan solución los algoritmos de consenso? Sistemas síncronos. Sistemas asíncronos. Tanto a sistemas asíncronos como síncronos. No dan solución a ningún tipo. Seleccione la respuesta correcta sobre Relojes lógicos: Indican el orden en que suceden ciertos eventos, no el instante real en
que suceden. Resultan inútiles para muchos tipos de aplicaciones distribuidas. Marcan la hora de forma más precisa que los relojes físicos. Ninguna de las respuestas es correcta. En los algoritmos de consenso: El problema de los fallos bizantinos no se puede resolver en los algoritmos de
consenso. El problema de los fallos bizantinos se puede resolver cuando el
número de nodos totales en el sistema >= 3t+1 siendo t el número de
nodos que fallan. El problema de los fallos bizantinos se puede resolver cuando el número de
nodos totales en el sistema < 3t+1 siendo t el número de nodos que fallan. No se puede resolver ese problema. Seleccione la opción que es FALSA con respecto a la sincronización de
relojes físicos mediante el Algoritmo de Cristian: Sirve para sincronizar el reloj local de un ordenador cliente con el reloj local
de un ordenador servidor. El ordenador servidor dispone de un reloj muy preciso, incluso puede estar
sincronizado con otros aún más precisos. En determinadas situaciones, ambos relojes pueden retroceder en el
tiempo. La sincronización requiere intercambio de mensajes. En los relojes lógicos (indique la falsa): Se relacionan en una relación “ocurre antes”. Todos los nodos están de acuerdo en que primero ven un evento a y después
un evento b. No es una relación transitiva Establece un orden parcial entre eventos de un sistema. Respecto a los llaveros o wallets de bitcoins, marque la correcta: Cada usuario puede tener todas las claves privadas que necesite, en cambio,
sólo puede tener una clave pública para proteger sus bitcoins. Cada usuario puede tener una clave privada (que será su DNI) e infinitas
claves públicas para proteger sus bitcoins. Cada usuario puede una clave privada e infinitas claves públicas para
proteger sus bitcoins. Cada usuario puede tener una clave privada y una clave pública (que será su
DNI) para proteger sus bitcoins. En la solución descentralizada de la exclusión mutua: Un nodo que quiere entrar en la sección crítica debe pedir permiso al nodo
coordinador. Un nodo que quiere entrar en la sección crítica debe pedir permiso al
resto de nodos Un nodo que quiere entrar en la sección crítica sólo debe pedir permiso al
nodo que está en la sección. Si un nodo quiere entrar en la sección crítica no pide permiso ya que sabe
cuándo está ocupada y, por tanto, si puede o no usarla. ¿Qué es un crash failure? Cuando un nodo deja de funcionar. Cuando un nodo tiene un comportamiento anómalo. Cuando un nodo no para de mandar mensajes de forma aleatoria a todos los
nodos. Cuando un nodo no para de mandar mensajes a otro nodo. ¿Qué solución es válida para el siguiente reloj vectorial? V(a)=[1,0], V(b)=[2,0], V(c)=[3,1], V(d)=[1,1], V(e)=[3,2], V(f)=[3,3] V(a)=[1,0], V(b)=[2,1], V(c)=[3,1], V(d)=[1,1], V(e)=[2,3], V(f)=[3,3] V(a)=[1,0], V(b)=[2,1], V(c)=[3,1], V(d)=[1,1], V(e)=[3,2], V(f)=[3,3] V(a)=[1,0], V(b)=[2,0], V(c)=[3,1], V(d)=[1,1], V(e)=[2,3], V(f)=[3,3]. En el algoritmo de exclusión mutua para anillos... El nodo que posee el token puede entregarlo al siguiente nodo antes de
finalizar su sección crítica (SC). El nodo que obtenga el token podrá entrar en la sección crítica (SC). Si un nodo quiere entrar en la sección crítica podrá hacerlo
independientemente de que haya obtenido el token. Si un nodo no dispone del token en un momento determinado entonces
nunca podrá entrar en la sección crítica. En blockchain, cuando se realiza una transacción, ¿cuál es el proceso
realizado por los mineros que están escuchando? Apuntan en el bloque la cabecera, basándose en el hash del bloque anterior,
apuntan la transacción realizada en el cuerpo del bloque, y tratan de
responder a una incógnita. Apuntan la cabecera, basándose en el hash del bloque anterior, apuntan
la transacción realizada en el cuerpo del bloque, y tratan de responder a
una incógnita, informando a los demás mineros si lo consigue. Apuntan la cabecera, basándose en el hash del bloque anterior y apuntan
una transacción hacia sí mismo. Buscan la solución a una incógnita aplicando las fórmulas disponibles. En exclusión mutua con solución descentralizada: Existe un nodo coordinador. La coordinación se resuelve mediante envíos a los nodos adyacentes. No existe un nodo coordinador. La coordinación se resuelve mediante envíos a unos nodos predeterminados
(líderes). Te han encargado diseñar y programar una pequeña simulación de
carreras de en la que participarán 20 vehículos, cada uno de ellos con
características diferentes. Suponiendo que cada uno de esos vehículos son
threads y que no queremos que la carrera termine hasta que todos los
participantes hayan cruzado la línea de meta, ¿qué mecanismo sería más
adecuado? CyclicBarrier Fork/Join Executor CountDownLatch.
|