Quiz
Preguntas Tipo Test PCTR
Erstelle ein kostenloses Konto, um dieses Quiz zu beenden
Speichere deinen Fortschritt und sieh dir dein Endergebnis an.
oder mit deiner E-Mail registrieren
Schon ein Konto? Anmelden
Fragen in diesem Quiz (177)
1El multiprocesamiento simétrico, contemplado en la jerarquía de Flynn en el nivel MIMD...
- AEngloba a arquitecturas multicore
- BEngloba a arquitecturas multicore y manycore
- CEngloba a arquitecturas multicore, manycore, a excepción los clusters de procesadores
- DEn realidad todo lo anterior es cierto. El multiprocesamiento simétrico es tan general como para englobar a todas las tipologías de máquinas que disponen de múltiples cores de ejecución, con independencia de su número y organización.
2Los hilos creados por otro hilo
- ANo necesitan implementar acceso a exclusión mutua para compartir recursos
- BNo necesitan exclusión mutua siempre y cuando el padre acceda a dichos recursos en exclusión mutua
- CSiempre deben acceder a los recursos compartidos en exclusión mutua
- DNinguna es correcta
3Cada hilo comparte con su hilo padre
- AContador de programa
- BContador de programa y la pila de llamadas
- CLa pila de llamadas y las variables estáticas
- DNinguna es correcta
4El entrelazado de instrucciones
- ASolo se produce entre hilos, pero no entre procesos
- BSolo se produce en arquitecturas multinucleo
- CSe produce en sistemas concurrentes y paralelos
- DNo se producen cuando se ejecutan instrucciones del sistema operativo
5¿Cuál es el número máximo de clases que pueden heredar de la clase Thread en una aplicación en Java?
- ANo hay limite
- BSolo una clase puede heredar de Thread. El resto deben implementar la interfaz Runnable
- CSolo una, si se desea compartir información entre los hilos a través de variables estáticas
- DTodas las clases deben heredar de la clase Thread
6El acceso en exclusión mutua a los recursos compartidos
- AProduce aplicaciones menos eficientes
- BProduce aplicaciones más eficientes
- CNo afecta al rendimiento de las aplicaciones
- DProduce aplicaciones más eficientes cuando se utilizan primitivas de sincronización reentrantes
7Si se aplica en Java la instrucción H.notify()
- ALa señal se perderá si el hilo H no se encuentra bloqueado.
- BLa señal se perderá si no hay ningún hilo en el Wait Set asociado a la variable H.
- CSe incrementa en una unidad el número de veces que se puede realizar H.wait() sin que el hilo se quede bloqueado.
- DNinguna es correcta.
8Dadas dos variables A y B en Java, que apuntan a la misma dirección de memoria (A=B)
- ACada una de ellas dispondrá de su propio Wait Set asociado
- BCada una de ellas dispondrá su propio Wait Set asociado si ambas son de tipo Object
- CAmbas variables comparten el mismo Wait Set asociado
- DAmbas variables comparten el mismo Wait Set asociado pero solo si ambas son de tipo Object
9Los métodos bloqueantes que se pueden aplicar sobre un hilo en Java son:
- Ajoin,suspend
- Bjoin, wait, yield
- CSleep, join, wait
- DSleep, join, wait, suspend
10Los hilos que se ejecutan en un pool de hilos no requieren de un acceso en exclusión mutua a los recursos compartidos
- ACuando se utiliza un pool de tipo CachedThreadPool
- BCuando se utiliza un pool de tipo FixedThreadPool
- CCuando se utiliza un pool de tipo SingleThreadExecutor
- DNinguna es correcta
11Los protocolos de exclusión mutua basados en soluciones software
- ASolo funcionan correctamente si se accede en exclusión mutua a las variables compartidas
- BSolo funcionan correctamente si se accede por turnos a las variables compartidas
- CSon más eficientes que los basados en soluciones hardware
- DNinguna es correcta
12El método shutDownNow() de un objeto de la clase ExecutorService
- AEs un método equivalente a invocar al método shutdown() seguido de una llamada al método awaitTermination()
- BEs un método bloqueante equivalente a invocar el método shutdown() seguido de un blucle que finalice cuando el método isTerminated() devuelva un valor cierto
- CEs un método bloqueante que espera a la finalización de los hilos que actualmente se encuentran ejecutándose en el pool de hilos, pero no al resto de hilos que se encuentran pendientes de ejecución.
- DEs un método que finaliza los hilos del pool de forma inmediata, sin esperar a la finalización de los que actualmente se ejecutan.
13Cuando se utilizan métodos sincronizados para implementar un monitor en Java, todos sus métodos
- ADeben ser sincronizados
- BDeben ser públicos y sincronizados
- CDeben ser públicos, estáticos y sincronizados
- DQue sean públicos deben ser sincronizados
14Los monitores en C++
- ASolo pueden implementarse mediante el uso de instancias de tipo recursive_mutex
- BPueden implementarse mediante el uso de instancias de tipo unique_lock
- CSolo pueden implementarse mediante el uso de primitivas reentrantes
- DPueden implementarse mediante el uso de la primitiva de sincronización call_once
15Un método sincronizado en Java
- Aa) Puede contener un bloque sincronizado que utilice this como cerrojo
- Bb) Puede contener un bloque sincronizado que utilice una variable estática como cerrojo
- Cc) No puede contener un bloque sincronizado
- Dd) Las respuestas a y b son correctas
16En el modelo de memoria CUDA
- ALas regiones de memoria per-block requieren control de exclusión mutua
- BExisten regiones de memoria que no requieren control de exclusión mutua
- CLa región de memoria global requiere control de exclusión mutua
- DTodas las respuestas son correctas
17En el framework RMI el servidor
- APuede efectuar la llamada a un método del cliente, siempre y cuando el cliente quede asociado a un nombre de servicio en el registro de RMI local
- BPuede efectuar dicha llamada, solo si el cliente implementa la interfaz Serializable
- CSolo puede disponer de métodos públicos
- DNinguna es correcta
18Suponga que 1000 hebras comparten el acceso compartido a un objeto común cada una a través de su propia referencia, y ejecutan el acceso a un método inc() de ese objeto que incrementa un contador que inicialmente vale -1. El programador protege el acceso haciendo que cada hebra ejecute la llamada a inc() envolviendo la misma en un bloque de la forma synchronized(this){…miReferencia.inc()…}. El valor final del contador es:
- A999
- B1000
- CUn número indeterminado entre 0 y 1000
- DUn número indeterminado entre 1 y 1001
- ENinguna de las anteriores es correcta
19En Java, utilizando cerrojos de la clase ReentrantLock y variables Condition es posible disponer
- ADe señalización SC y SX
- BDe señalización SA, SC y SX
- CDe señalización SC y SA
- DNinguna de las anteriores es correcta
20Una hebra de C++
- AÚnicamente puede recibir su código mediante un puntero a función
- BTras ser instanciada mediante el constructor de clase, debe ser lanzada explícitamente por programa
- CPuede estar sincronizada con el programa principal o con otras mediante el método join()
- DTodas son correctas
21Desarrollando el framework RMI, el binario rmiregistry:
- APermite registrar diferentes objetos de diferentes clases
- BPermite registrar diferentes instancias de un mismo objeto
- CEfectúa funciones de DNS mediante clientes que hace dynamic-bindig con él
- DTodo lo anterior es cierto
22Es conocido que la anidación de bloqueos en lenguaje Java sobre dos recursos compartidos puede llevar a dos hebras, en el peor de los casos, a una situación de deadlock. Para evitar lo anterior podemos
- AEvitar el anidamiento de bloqueos mediante un monitor
- BNo utilizar recursos compartidos
- CUtilizar el API de alto nivel del lenguaje, que ofrece en tiempo de compilación la capacidad para detectar y eliminar estas situaciones
- DReducir a cero la probabilidad de aquellos flujos de ejecución que conlleven al interbloqueo, cambiando la arquitectura de la codificación / verificar de manera formal las propiedades de corrección de nuestro código
23Cuando se utiliza programación CUDA, el programa principal que lanza el kernel CUDA:
- AEstá sincronizado con parte de los kernels, pero no con todos
- BPuede ejecutar código paralelo y actuar como coprocesador de la GPU
- CPuede tener hebras ejecutándose sobre la CPU, pero deben estar en exclusión mutua con las hebras que ejecutan los kernels de la GPU
- DNada de lo anterior es cierto
24El uso de variables volatile en Java
- AGarantiza al programador que los datos que albergan son accedidos de forma segura frente a hebras concurrentes
- BElimina las caches temporales de esas variables asociadas al motor de ejecución que las hebras utilizan
- CPermite garantizar código parcialmente correcto, pero no totalmente correcto.
- DNinguna de las anteriores es cierta
25El resultado de paralelizar una aplicación sobre una máquina de dos cores ofrece un speedup de 0.75. Esto significa que
- AEl código original es inherentemente paralelo
- BEl coeficiente de bloqueo de la aplicación está próximo a 1
- CSu diseño paralelo es ineficiente
- DNinguna de las anteriores es correcta
26Cuando se utiliza STM en Java sobre Clojure:
- AEl delimitador sintáctico dosync gestiona el acceso a regiones criticas bajo transacciones
- BLos interbloqueos siguen sin poder evitarse
- CPuede haber inconsistencias de la información
- DEs necesario utilizar, también a nivel sintáctico, el delimitador LockingTransaction.runInTransaction()
27En el lenguaje C++ el desarrollo de un monitor supone:
- ADisponer de una única cola de espera por condición para las tareas
- BUna semántica de señalización de tipo SX
- CEs imposible usarlos. C++ no lo permite
- DNinguna de las anteriores son ciertas
28La implementación de la primitiva teórica de región critica en C++
- AEs imposible
- BEs posible utilizando un objeto auxiliar que actúe como cerrojo
- CEs posible encerrando la región entre lock.lock() y lock.unlock() donde lock es un objeto de la clase mutex
- DNinguna de las anteriores son ciertas
29El uso de ejecutores de pool de thread en Java
- AOptimiza el rendimiento para cualquier número de hebras
- BPermite al programador centrarse exclusivamente en las tareas
- CImposibilita el uso de clases contenedoras autosincronizadas
- DSolo tiene sentido en problemas y tareas con Cb=0
30La reentrancia para código concurrente seguro en el lenguaje C++:
- AFunciona exactamente igual que en Java con cualquier tipo de cerrojo que se escoja
- BFunciona únicamente escogiendo cerrojos de la clase mutex
- CNo es posible disponer de ella.
- DNinguna de las anteriores es cierta
31Usted debe determinar el valor de Cb óptimo para una aplicación con paralelismo a nivel de hebras que acaba de escribir. Para ello:
- ABusca el mínimo de la curva Tiempo=f(Cb) mediante experimentación, lo determina de forma aproximada, y deduce a partir de aquí cuántas hebras necesita tener en su aplicación. Busca el mínimo de la curva Tiempo=f(Cb) mediante técnicas analíticas.
- BBusca el máximo de la curva Tiempo=f(Cb) mediante experimentación, y lo determina de forma aproximada.
- CQueda determinada por la tipología del problema
- DNo es posible determina esto de forma adecuada sin un benchmarking profesional. Puesto que su código tiene latencias de E/S y de red, su experiencia como programador le dice que Cb=0.5 aproximadamente.
32El uso de la interfaz Future junto con tareas Callable
- AEs igual que con la interfaz Runnable, cambiando el método run() por el método call().
- BPermite el acceso a los datos de retorno del método call() bajo bloqueos explícitos.
- CPermite el acceso a los datos de retorno del método call() bajo bloqueos implícitos.
- DPermite procesar los objetos que la implementan dándolas como parámetros a objetos de la clase Thread.
33El anidamiento de múltiples operaciones wait(S) sobre diferentes semáforos realizadas por hebras diferentes:
- AEs algo que la especificación estándar del lenguaje Java no permite
- BConlleva irrevocablemente a un deadlock, con independencia del lenguaje que soporte a los semáforos.
- CEs algo que la especificación estándar del lenguaje Java no permite pero la de tiempo real si.
- DSe puede hacer con Java, para ambas especificaciones, y con cualquier lenguaje que soporte semáforos siempre que respeten la invariancia de los mismos.
34En Java los cerrojos de la clase ReentrantLock se utilizan:
- APara tener regiones críticas de grano muy grueso
- BPara no utilizar regiones synchronized
- CPara poder utilizar variables de condición si hacen falta
- DPara optimizar los accesos a los datos que protegen
35Una hebra
- APuede estar detenida en un punto de su código por un bloqueo de exclusión mutua, mientras ejecuta código en una zona diferente
- BPuede acceder a varios objetos diferentes de forma concurrente
- CPuede ser procesada a través de un ejecutor
- DNinguna de las anteriores es correcta
36Usted debe desarrollar una aplicación bajo el framework RMI que controla un sistema de reserva de billetes de avión, y sabe:
- AQue el sistema deberá ser concurrente
- BQue habrá que crear utilizar necesariamente control de exclusión mutua explícito en el lado del servidor
- CQue deberá crear una hebra de servicio por cada petición procedente de un cliente
- DQue utilizando generación dinámica de resguardos puede prescindir de utilizar un DNS local a la máquina que ejecuta el servidor.
37Considere un objeto en Java que dispone de tres métodos m1, m2 y m3. El programador decide que deben ejecutarse en exclusión mutua, y para ello dispone todo el código de los métodos m1 y m3 dentro de un bloque synchronized(this). Para el tercer método, utiliza un objeto de la clase Semaphore que inicializa a 0, y engloba todo el código del mismo bajo el par de instrucciones acquaire() y release(). La sección crítica de todos los casos implica incremental una variable de tipo int que inicialmente vale 3. Tres hebras A, B y C activadas dentro de una co-rutina ejecutan lo siguiente: A.m1, C.m3 y B.m2. Terminada la co-rutina, el programa principal imprime el valor de la variable y este es:
- A3, ya que las tres hebras quedan bloqueadas y no la modifican
- B6, pues las tres hebras hacen su incremento de modo seguro.
- C5, porque dos hebras hacen su incremento y otra no, ya que queda bloqueada.
- DEl programa realmente no imprime nada porque queda bloqueado a causa de las hebras
38Es conocido que la anidación de bloqueos en el lenguaje Java sobre dos recursos compartidos puede llevar a dos hebras, en el peor de los casos, a situación de deadlock. Para evitar lo anterior podemos
- AEvitar el anidamiento de bloqueos mediante un monitor.
- BAnidar transacciones
- CVerificar de manera formal las propiedades de corrección de nuestro código
- DUtilizar el API de alto nivel del lenguaje
39Cuando se utiliza la programación CUDA, el programa principal que lanza el kernel CUDA:
- AEstá sincronizado con parte de los kernels, pero no con todos
- BNo puede ejecutar código paralelo y actuar como coprocesador de la GPU
- CPuede tener hebras sobre la CPU, pero deben estar en exclusión mutua con los kernels de la GPU
- DNada de lo anterior es cierto
40El uso de ejecutores en el lenguaje Java supone
- AOptimizar siempre el rendimiento de la aplicación
- BProcesar indistintamente tareas Callable y Runnable a través de ellos
- CNo controlar la sincronización, pues son los ejecutores quienes controlan el ciclo de vida de las tareas.
- DAsegurar la exclusión mutua de las tareas sobre los datos compartidos.
41El uso de variables volatile en el ámbito de la concurrencia
- ANos garantiza que los datos con accedidos de forma seguro
- BSirven solo para implementar algoritmos de control de exclusión mutua con espera ocupada
- CÚnicamente tiene sentido cuando esas variables son estáticas
- DNinguna de las anteriores es cierta
42El resultado de paralelizar una aplicación sobre una máquina de ocho cores ofrece un speed-up de 2.75. Esto significa que
- AEl código original es inherentemente paralelo
- BEl coeficiente de bloqueo de esta aplicación está próximo a 0
- CNo se han utilizado ejecutores en el procesamiento de las hebras paralelas
- DNinguna de las anteriores es cierta
43Cuando se utiliza STM en Java sobre Clojure:
- ADesaparece la necesidad de controlar la exclusión mutua
- BLos interbloqueos siguen sin poder evitarse
- CTenemos garantizada la consistencia de la información
- DTenemos escrituras concurrentes y lecturas no concurrentes
44En el lenguaje C++ el desarrollo de un monitor exige:
- AEl uso de sincronización call_once.
- BEl uso exclusivo de recursive_mutex
- CUtilizar unique_lock y variables de condición si son necesarias
- DNinguna de las anteriores es correcta.
45La implementación del concepto teórico de región critica en Java
- AExige que los métodos sean synchronized
- BExige utilizar un objeto auxiliar que actúe como cerrojo
- CExige acotar con synchronized(this) la región
- DTodas las anteriores son ciertas.
46Los contenedores autosincronizados de Java
- AOptimizan el rendimiento de los productores-consumidores
- BElevan el nivel de abstracción para el programador
- CPueden manejarse desde tareas gestionadas por ejecutores
- DTodas las anteriores son cierta
47Se desea paralelizar un algoritmo para el que se ha determinado un Cb=0, y que tiene que trabajar sobre una máquina de 8 cores lógicos, para procesar un vector de 10^6 componentes sin interdependencia entre ella. Con estos datos, usted decide:
- AUtilizar un contenedor sincronizado para optimizar el rendimiento
- BUtilizar 16 tareas con 16 sub-vectores disjuntos y procesarlas utilizando un objeto de la clase ThreadPoolExecutor con corePoolSize=4
- CUtilizar 16 tareas con 16 sub-vectores y procesarlas utilizando un ejecutor de tamaño fijo mediante newFixedThreadPool(16)
- DNinguna de las anteriores es cierta
48Los hilos Daemon en Java
- AEjecutan tareas de alto y bajo nivel que no terminan nunca
- BTienen sentido en sistemas reactivos
- CPermanecen activos hasta que se apaga la maquina
- DSolo hay realmente un hilo daemon correspondiente al garbaje collector
49Considere el nivel MIMD de la taxonomía de Flynn. Dicho nivel contempla:
- AArquitectura de acoplamiento fuerte
- BArquitectura de acoplamiento débil
- CAmbas
- DArquitecturas SIMD mejoradas con memoria NUMA
- ENinguna de las anteriores es cierta
50Usted dispone de un servidor remoto soportado mediante el framework RMI. Dicho servidor define entre otros, un recurso que debe gestionarse bajo control de exclusión mutua. Su equipo de programadores controla dicha gestión mediante un método void myControl () que protege el recurso mediante el API de la clase Semaphore. Sus programadores crean el semáforo necesario mediante la instrucción Semaphore mySem = new Semaphore(0). El objeto servidor se registra, y queda en espera de peticiones sobre el puerto 2001. Múltiples clientes situados en máquinas virtuales distintas piden a través sus referencias remotas la ejecución del métodomyControl(), y la arquitectura remota:
- AProcesa secuencialmente esas peticiones, obligada por el sistema de gestión de la concurrencia del framework RMI.
- BProcesa esas peticiones en paralelo, incluso en la zona de código protegida en exclusión mutua con el semáforo.
- CSus programadores han desarrollado un código que no es totalmente correcto pero sí parcialmente, y usted los abronca.
- DSus programadores han desarrollado un código que no es parcialmente correcto, y usted los despide.
- ELa arquitectura no tiene problema alguno bajo los supuestos planteados, y funciona normalmente. Usted felicita a sus programadores.
51Usted desea implementar la primitiva teórica de control de la concurrencia conocida como región critica. Para lograrlo, decide que lo correcto es:
- AEnglobar el código de la región con un cerrojo de clase ReentrantLock
- BEnglobar el código de la región critica utilizando un objeto de la clase Semaphore y su API
- CUtilizar un objeto de clase AtomicInteger, ya que el recurso al fin y al cabo es un simple contador
- DUtilizar un monitor utilizando el API de alto nivel de Java, ya que es la construcción que en Java más se aproxima al concepto de región critica
- ENada de lo anterior es cierto
52Cuando usted utiliza una implementación de un monitor con el API de alto nivel en Java
- ASabe que la misma utiliza la señalización SU, para optimizar el rendimiento todo lo posible
- BSabe que debe indicar al monitor mediante un método especifico el tipo de señalización a utilizar, para así adaptarlo a sus necesidades especificas
- CUsted utiliza el monitor, y no se preocupa de nada mas
- DSabe que la señalización en este contexto es SA, y por tanto no hay señalización explicita en el monitor
- ENada de lo anterior es cierto
53La arquitectura GPU en CUDA presenta una jerarquía de memoria de tres niveles porque
- AEra lo adecuado para mapear texturas en el ámbito de los videojuegos, donde tuvo su origen
- BEra obligatorio para un adecuado balance de carga de procesamiento entre la GPU y la CPU
- CAl programador en C, el modelo de memoria del lenguaje le obligo a ello
- DPorque pertenece al nivel MIMD de la taxonomía de Flynn
- EPorque permite un mayor nivel de paralelismo entre hebras CUDA
54Se desea paralelizar un algoritmo para el que se ha determinado que Cb es 0,5 y que tiene que trabajar sobre una máquina con 8 cores lógicos, para procesar 60 tareas con apertura de sockets a servidor remoto sin interdependencia entre ellas. Con estos datos, usted decide:
- Autilizar un contenedor sincronizado de tareas para optimizar el rendimiento
- Butilizar 60 tareas y procesarlas utilizando un objeto de clase ThreadPoolExecutor con corePoolSize=4
- Cutilizar 60 tareas procesarlas utilizando un ejecutor de tamaño fijo mediante newFixedThreadPool(16)
- Dutilizar 60 tareas y procesarlas utilizando un objeto de clase ThreadPoolExecutor con corePoolSize=8
- Eninguna de las anteriores es cierta
55Se necesita procesar en paralelo sobre un procesador multicore un cubo de datos de 10^3 x 10^3 x 10^3 componentes con interdependencias conocidas entre datos vecinos (la vecindad es cúbica, de longitud uno y con condiciones de frontera nulas), para generar una nueva versión del cubo con datos actualizados resultado del procesamiento. Asuma que dispone de la memoria necesaria parametrizando la JVM mediante el flag adecuado. Para lograr el mejor rendimiento posible, usted decide:
- AUtilizar tantas tareas como cores tenga el procesador, y escribir los datos en el mismo cubo original
- BUtilizar tantas tareas como cores tengas el procesador, y escribir los datos en un segundo cubo, dado que dispone de memoria para ello
- CUtilizar tantas tareas como cores tenga el procesador, y escribir los datos en el mismo cubo original, con control de exclusión mutua
- DUtilizar tantas tareas como cores tenga el procesador, y organizar los datos mediante secciones transversales del cubo, que se insertan en un objeto de clase ArrayList
- ENinguna de las anteriores es cierta
56El multiprocesamiento simétrico mediante particionamiento del dominio de datos
- AEs propio y limitado al lenguaje Java
- BEs un modelo de programación paralela
- CSolo tiene sentido en lenguajes de programación orientado a objetos
- DEs inaplicable con las arquitecturas de procesadores actuales. Está obsoleto
- ETiene sentido en problema de Cb próximo a 1
57Considere una hipotética instrucción máquina llamada leerYAsignar que puede ser llamada desde su lenguaje de programación favorito, que admite como parámetro la dirección de memoria de una variable lógica que actúa como cerrojo, y que ejecuta bajo atomicidad las siguientes tareas, en el orden en que aparecen: lee el anterior valor del cerrojo, pone el valor del cerrojo a true y devuelve el anterior valor del cerrojo. A partir de aquí, se escribe el siguiente código concurrente:
var libre:boolean := false;
n:integer := 1;
process [P[i:1..n] {
var i:integer i= 0;
while(i < 10) {
while(leerYAsignar(libre)){
n:=n+1;
libre := false;
i:= i+1;
}
}
}
El valor final de la variable compartida n si se lanzan diez instancias de este proceso es:- A100
- B1000
- Cun número en el intervalo 0-1000
- D10
- Ees un código que no verifica la propiedad de seguridad.
58Cuando se utilizan transacciones en lugar de bloqueos de exclusión mutua
- AEl rendimiento de la aplicación aumenta siempre
- BEl rendimiento de la aplicación no tiene por qué aumentar
- CPueden dar lugar a interbloqueos
- DNo permite compartir recursos entre tareas concurrentes
- ENo tienen por qué ejecutarse atómicamente
59El método start() de la clase Thread
- AFuerza a que la hebra sobre la cual se invoca comience su ejecución de manera inmediata
- BSitúa al objeto sobre el cual se invoca en el heap, proporciona una referencia al mismo, y comienza su ejecución de manera inmediata
- CPuede ser invocado sobre objetos que expresan concurrencia implementando la interfaz Runnable
- DEs necesario invocarlo inmediatamente después de enviar una tarea que expresa concurrencia implementando la interfaz Runnable a un ejecutor
- ENada de lo anterior es cierto
60El uso de un contenedor de datos autosincronizado entre varias tareas concurrentes
- ANo requiere que todas las tareas posean una referencia al mismo
- BSolo es posible cuando las tareas son procesadas mediante un ejecutor
- CMejora el rendimiento siempre
- DMejora el rendimiento en determinadas ocasiones
- ENada de lo anterior es cierto
61La verificación de la propiedad de seguridad mediante las ecuaciones de Bernstein
- AEs adecuada para una demostración formal de la seguridad
- BEvita las escrituras concurrentes
- CEs inaplicable en la práctica, cuando trabajamos con código concurrente de cientos o miles de instrucciones no atómicas
- DTodas las anteriores son ciertas
- ENinguna de las anteriores es cierta
62Se desea implementar un sistema de control de una válvula de presión en una central térmica, y usted determina emplear para ello el API de JRTS. Dado lo anterior, estima que necesita controlar de forma periódica la presión en la válvula, mientras que ocasionalmente inyecta fuel-oil en las turbinas de generación. En consecuencia, deberá utilizar:
- AHebras de T.R. periódicas y gestores de eventos asíncronos ligados a hebras de T.R. esporádicas.
- BHebras T.R. esporádicas y gestores de eventos asíncronos ligados a hebras de T.R. periódicas
- CÚnicamente gestores de eventos asíncronos
- DNinguna de las anteriores es correcta, y basta con utilizar hilos de T.R
63La reentrancia para código synchronized en el lenguaje Java
- ATiene sentido cuando un objeto es un monitor
- BFunciona cuando el código synchronized reentrante es recursivo
- CFunciona cuando un objeto concreto tiene código synchronized reentrante y código no synchronized
- DTodas las anteriores son ciertas
64Un hilo creado por otro hilo
- AEs siempre reentrante, por lo que no se bloquea al realizar llamadas recursivas
- BNunca se bloquea al tratar de adquirir un cerrojo bloqueado por el hilo padre, pues comparten espacio de direcciones.
- CDebe esperar para poder adquirir cerrojo de los métodos sincronizados del hilo padre
- DNinguna es correcta
65Un hilo…
- APuede estar ejecutando el protocolo de entrada a la sección crítica mientras otro se encuentra ejecutando instrucciones del protocolo de salida.
- BNo puede estar ejecutando el protocolo de entrada a la sección crítica mientras otro se encuentra ejecutando instrucciones del protocolo de salida.
- CPuede encontrarse ejecutando instrucciones de la sección crítica mientras otro hilo ejecuta las del protocolo de salida.
- DPuede estar ejecutando instrucciones del protocolo de salida al mismo tiempo que otro hilo también las ejecuta.
66En la especificación JRTS la interfaz Schedulable
- AModela las clases RealTImeThread y NoHeapRealTimeThread
- BHereda de la interfaz Runnable de Java
- CModela la clase AsyncEventHandler
- DTodas las respuestas anteriores son correctas
67Los monitores en lenguaje C+
- APermiten varias colas de espera por condición
- BNo permiten colas de espera por condición; funcionan únicamente para proteger recursos compartidos bajo control de exclusión mutua.
- CFuncionan igual que los monitores en Java con el API de alto nivel.
- DNinguna de las anteriores es cierta
68En el lenguaje C++ el desarrollo de un monitor supone:
- AUna semánica de señalización SU
- BDisponer de múltiples colas de espera por condición para las tareas obligatoriamente
- CQue es imposible usarlos, C++ no lo permite
- DDisponer de múltiples colas de espera por condición para las tareas, en su caso
- EDisponer de un único wait-set análogo al que existe en el API estándar de Java
69En los programas concurrentes:
- ASe pueden producir resultados diferentes para el mismo conjunto de datos de entrada.
- BNinguna de las anteriores es correcta
- CEl tiempo empleado para terminar la ejecución siempre es la misma
- DPodemos determinar de forma clara el orden de ejecución de las diferentes instrucciones que lo componen
70En los procesos de resolución de una llamada a un procedimiento remoto
- ALos mensajes que han de transmitirse deberá confeccionarlos el programdor
- BEl programador deberá tener presente la codificación de la información de la máquina remota.
- CNinguna de las anteriores es correcta
- DEs responsabilidad del sistema la solución a la transmisión de la información
71El algoritmo de Peterson frente al de Dekker
- Aa) Tiene una mejor solución para el programa de sincronización entre procesos
- Bb) No tiene el problema de espera ocupada que sí tiene Dekker
- Cc) Es más eficiente que el algoritmo de Dekker
- Dd) Ninguna de las respuestas es correcta
72Desde el punto de vista de un Sistema Operativo, un proceso es
- AEntidad lógica que se almacena en un dispositivo de almacenamiento
- BEntidad lógica que podrá ser cargada en memoria para su plantificación
- CNinguna es correcta
- DEntidad lógica a la que la CPU podrá plantificar y asignar recursos
73La operación wait(s)
- ABloquea el proceso que la ejecuta si s=0
- BSi s=0 decrementa el valor de s y bloquea el proceso
- CDecrementa el valor de s y entonces bloquea el proceso si s=0
- DBloquea el proceso que la ejecuta si s=1
74En la llamada a procedimiento remoto
- ASe utilizará el mismo lenguaje de programación para codificar los procesos
- BNinguna es correcta
- CLos dos sistemas deberán tener una misma arquitectura
- DDeberá ser el mismo Sistema Operativo en las máquinas remotas
75La inicialización de la variable de un semáforo
- ASólo puede hacer una única vez en su ciclo de vida
- BPuede inicializarse tantas veces como se quiera
- CNinguna es correcta
- DNo se inicializa en un ciclo de vida
76El problema de interbloqueo:
- ATodas son falsas
- BSolo tiene solución si se resuelve mediante el uso de monitores
- CSolo tiene solución si se resuelve mediante el uso de semáforos
- DSolo tiene solución si se resuelve mediante el uso de algoritmos de espera ocupada
77Los semáforos son
- ANinguna es correcta
- BHerramientas que solucionan el problema de la exclusión mutua
- CUna estructura de datos con operaciones atómicas para su manejo
- DHerramientas para el problema de concurrencia de Sistemas Distribuidos
78La exclusión mutua entre diferentes procesos garantiza
- ASolo es encera en Sistemas Distribuidos
- BEl acceso seguro a los recursos compartidos
- CNo es necesario garantizar exlusión mutua entre procesos
- DEl acceso seguro a la información compartida entre procesos
79La posibilidad que nos permite un sistema multihilo es:
- ANinguna es correcta
- BSon un elemento presente en todos los Sistemas Operativos
- CNo ofrece ninguna ventaja sobre un sistema multiproceso
- DPermite una mejor paralización de un problema sin necesidad de crear nuevos procesos
80La gestión de los procesos bloqueados en un semáforo
- AMediante el uso de semáforos, los procesos no pasan a estado bloqueado
- BEl sistema operativo desbloqueará a los procesos en función de la prioridad
- CDebe ser siempre FIFO para evitar la inanición
- DPuede ser FIFO o LIFO
81Determine en cuál de las siguientes situaciones existe concurrencia
- ADos procesos que se ejecutan de forma simultánea
- BDos hilos que se ejecutan de forma simultánea
- CDos procesos que activan dos hilos concurrentes y que se ejecutan de forma simultánea
- DTodas las anteriores son correctas
- ENinguna de las anteriores es correcta
82En la especificación JRTS los objetos Schedulable
- ANo guarda relación alguna con los objetos RealTimeThread
- BSon una abstracción que representa objetos con capacidad de ejecución en JRTVM
- CUnicamente tienen acceso a la memoria inmortal
- DNinguna de las respuestas anteriores es correcta.
83En los sistemas distribuidos:
- ADebemos garantizar la correcta sincronización de los procesos
- BDebemos garantizar el acceso a de los procesos a los recursos locales
- CDebemos garanizar la exlcusión mutua de las secciones críticas
- DTodas son correctas
84En la comunicación asíncrona entre procesos
- ANinguna primitiva de envío o recepción bloquearán los procesos implicados
- BLa primitiva de recepción bloqueará al proceso si no hay datos en el buzón
- CLa primitiva de envío bloqueará al emisor
- DAmbas primitivas de enviío o recepción bloquearán a los procesos implicados
85Para que un programa concurrente sea correcto, deben cumplirse las siguientes propiedades
- AViveza y seguridad
- BSeguridad e inanición
- CExclusión mutua y viveza
- DInterbloqueo e inanición
86El algoritmo de exclusión mutua de Dekker
- AEstá orientado a entornos distribuidos
- BEs válido para n procesos con apenas modificaciones
- CEstá orientado a entornos centralizados
- DPresenta situaciones en las que puede no garantizar las propiedades de viveza
87La relación existente entre procesos e hilos es:
- ALos recursos podrán ser asociados tanto a los procesos como a los hilos
- BLos procesos son estructuras ligeras mientras que los hilos son estructuras pesadas
- CLos hilos están asociados al proceso que los crea
- DEl SO debe manejar la misma información para el mantenimiento de los procesos
88Las variables de condición en un monitor
- ASon necesarias para poder mantener la sincronización de los procesos dentro del monitor
- BControlan diferentes condiciones dentro del monitor
- CGarantizan la exlusión mutua de las funciones del monitor
- DSon como los semáforos dentro del monitor
89Un semáforo “s” inicializado al valor 2
- ALos semáforos se inicializan siempre a valor 1
- BDos procesos podrán ejecutar wait(s) sin bloquearse
- CEl primer proceso que alacene la sentencia wait podrá acceder a su sección crítica
- DPermite que dos procesos estén simultáneamente en su sección crítica
90En el problema del productor/consumidor resuelto mediante semáforos
- ALos procesos productores deben sincronizarse con los procesos consumidores para garantizar la corrección del problema
- BTodas las anteriores son falsas
- CSólo es necesario garantizar la exclusión mutua al buffer compartido
- DLos procesos productores deben sincronizarse entre sí para garantizar la correción del problema
91¿Qué son las condiciones de Bernsein?
- AAyudan a la sincronización de los procesos
- BSirven para determinar las secciones críticas de los procesos
- CDeterminan si un conjunto de instrucciones puede ejecutarse concurrentemente
- DIndican si dos o más procesos pueden ejecutarse concurrentemente
92La utilización de un canal de sincronización:
- ASe utilizará como elementos de sincronización entre procesos en entornos remotos
- BEs el tipo de canales habituales en las comunicaciones síncronas
- CPermite definir un tipo por defecto en la comunicación síncrona
- DNo existe ese tipo de canales
93¿Cuándo hablamos de dos o más procesos son concurrentes?
- ACuando tenemos al menos tantas unidades de procesamiento como procesos
- BCuando se ejecutan en ordenadores diferentes
- CEs suficiente si las instrucciones de los procesos se intercalan en la ejecución
- DSólo en el caso de ejecución paralela
94En la comunicación directa entre procesos, es necesario
- AEl emisor debe conocer al destinatario y el receptor al remitente
- BConocer al destinatario del mensaje
- CConocer el remitente del mensaje
- DNo se requiere ningún tipo de identificación
95En el problema del productor/consumidor si la primitiva de envío no bloquea al productor
- AEl emisor deberá asegurarse que el consumidor esté disponible
- BNo hay solución posible con esa suposición de partida
- CDeberemos utilizar un buzón de tamaño indefinido
- DNinguna de las anteriores es correcta
96Para poder seguir la ejecución de un hilo será necesario almacenar
- AAl menos la información de contexto y pila
- BNinguna de las anteriores es correcta
- CUna cantidad de información similar a la necesaria para gestionar un proceso
- DLa información de contexto, pila y recursos asignados
97El paso de mensajes síncronos permite la comunicación
- AUno a uno
- BMuchos a muchos
- CMuchos a uno
- DUno a muchos
98En la comunicación síncrona entre procesos
- AEl receptor espera siempre al emisor antes de iniciar la transmisión
- BEl primero que alcanza la primitiva de comunicación deberá esperar hasta que el otro alcance la suya antes de iniciar la transmisión
- CNi emisor ni receptor esperan antes de iniciar la transmisión
- DEl emisor espera siempre al receptor antes de iniciar la transmisión
99La llamada a procedimiento remoto:
- AEs un elemento necesario en la estructura de los Sistemas Distribuidos
- BPermite la ejecución de un procedimiento presente en un proceso remoto dentro de un Sistema Distribuido
- CNinguna de las anteriores es correcta
- DEs un tipo de comunicación habitual en Sistemas Distribuidos
100En términos de eficiencia
- ALos algoritmos de espera ocupada son más eficientes que los semáforos
- BLos monitores son más eficientes que los semáforos
- CLa eficiencia de los semáforos depende exclusivamente de la CPU
- DA priori, no puede determinarse qué técnica de sincronización es la más eficiente
101La operación wait(s)
- ABloquea el proceso que la ejecuta si s=1
- BBloquea el proceso que la ejecuta si s=0
- CSi s=0 decrementa el valor de s y bloquea el proceso.
- DDecrementa el valor de s y entonces bloquea el proceso si s=0
102El problema del interbloqueo
- ASe resuelve mediante el uso de monitores
- BSe resuelve mediante el uso de semáforos
- CTodas las anteriores son falsas
- DNo es un problema que se de en la programación concurrente
103El algoritmo de Dekker
- ASoluciona el problema de sincronización entre procesos
- BSoluciona mediante espera ocupada el problema de la exclusión mutua
- CSufre de inanición para el problema de la exclusión mutua
- DEs un algoritmo incorrecto para la solución de la exclusión mutua
104En la comunicación síncrona entre procesos
- ANinguna de las anteriores es correcta
- BEl buffer sólo se comparte entre emisor y receptor
- CEl tamaño de buffer debe especificarse en la comunicación
- DNo hay necesidad de buffer en la transmisión
105La operación signal(..) de un semáforo
- AIncrementará siempre el valor de la variable del semáforo
- BNinguna de las anteriores es correcta
- CNo hará nada a la variable del semáforo
- DSi hay procesos bloqueados no incrementará el valor de la variable del semáforo
106Los monitores requieren de la utilización y definición de dos tipos de procesos
- AProceso monitor y proceso principal
- BProcesos bloqueados y procesos bloqueantes
- CProcesos padre y procesos hijo
- DProcesos activos y procesos pasivos
107La utilización de un canal
- AEstablecerá el tipo de información que se transmitiran emisor y receptor en una comunicación síncrona
- BEstablecerá el tipo de sincronización necesaria en la comunicación
- CPermitirá el almacenamiento de información para la comunicación entre procesos
- DNinguna de las anteriores es correcta
108En las llamadas a procedimientos remotos (RPC), la invocación al resguardo del cliente
- ALa invocación se realizar siempre a un módulo que se encuentra en otro sistema
- BSiempre genera el bloqueo del proceso que realiza la invocación
- CNo requiere de conexión entre cliente y servidor
- DDebe garantizar que existe concordancia entre los parámetros
109Los monitores en relación a los semáforos
- ANinguna de las anteriores es correcta
- BSon herramientas de más alto nivel de programación con una estructura que ayuda a la corrección del programa
- CNo ayudan más que los semáforos
- DSon herramientas de más bajo nivel de programación
110La exclusión mutua mediante inhibición de interrupciones
- ANo puede utilizarse en sistemas multiprocesador
- BGarantiza la ausencia de inanición
- CMejora el rendimiento de las aplicaciones
- DÚnicamente garantiza la exclusión mutua en operaciones E/S
111
La ejecución concurrente de varios procesos implica- ALa necesidad de múltiples unidades de procesamiento
- BQue existan múltiples programas dentro del sistema
- CUna arquitectura del SO que la permita
- DUn SO monoprogramado
112Para un correcto funcionamiento de los procesos concurrentes, se debe asegurar
- ALa exclusión mutua y la sincronización
- BSolo la exclusión mutua
- CLa exclusión mutua, la sincronización y evitar el interbloqueo
- DNinguna de las anteriores es correcta
113La especificación de tiempo real para Java (JRTS) define un modelo de planificación de 28 prioridades y carácter expulsivo, lo cual supone:
- AQue el programador debe solventar la planificación recurriendo a objetos soportados mediante Schedulable.
- BQue no es necesario diseñar una planificación, ya que la expulsividad del modelo lo hace innecesario.
- CQue el programador debe, siempre, implementar una planificación mediante ejecutivo cíclico.
- DQue el programador es completamente responsable de analizar e implementar la planifabilidad de las soluciones de tiempo real que programa.
114Se han desarrollado dos soluciones en Python que multiplican matrices paralelamente utilizando los módulos threading y multiprocessing, y obtenido los speedups con ambas soluciones para una arquitectura de 8 cores lógicos, suponiendo que Cb = 0. Estos speedups pueden ser
- AIgual a 7,14 para threading y 1,0 multiprocessing
- BIgual a 5,38 para threading y 7,14 para multiprocessing.
- CIguales a 1,00 para threading y para multiprocessing, ya que el GIL impide un paralelismo real en Python con ambos módulos
- DIgual a 0,99 para threading y 7,14 para multiprocessing
115La presencia del GIL (Global Interpreter Lock) en el lenguaje Python supone cuando programamos con este lenguaje y el módulo Threading
- APresencia de paralelismo MIMD según la taxonomía de Flynn
- BPresencia de parelelismo pero no de concurrencia
- CAusencia de concurrencia y de paralelismo, ya que el GIL impide ambas.
- DPresencia de concurrencia pero no de parelelismo
116La especificación de tiempo real para Java (JRTS) define un modelo de planificación de 28 prioridades y carácter expulsivo, lo cual supone:
- AQue el programador debe solventar la planificación recurriendo a objetos soportados mediante Schedulable.
- BQue no es necesario diseñar una planificación, ya que la expulsividad del modelo lo hace innecesario.
- CQue el programador debe, siempre, implementar una planificación mediante ejecutivo cíclico.
- DQue el programador es completamente responsable de analizar e implementar la planifabilidad de las soluciones de tiempo real que programa.
117Una de las principales diferencias entre un semáforo y una variable de condición es:
- AQue en ambos casos se utiliza una cola de procesos bloqueados
- BLa gestión de procesos bloqueados en un semáforo S siempre es FIFO
- CLa invocación de la primitiva wait(S) en un semáforo S siempre bloquea al hilo
- DLa variable de condición carece de estado, por lo que la instrucción send(C) no tiene efecto si la cola está vacía
118Durante la programación concurrente con JAVA, la reentrancia es una característica:
- ADisponible tanto en el API estándar como en el API de alto nivel
- BDisponible únicamente en el API estándar con métodos synchronized cuando el método es recursivo
- CDisponible únicamente en el API estándar con métodos synchronized
- DDisponible únicamente en el API estándar con cerrojos de clase ReentranLock
119La concurrencia basada en un esquema de paso de mensajes es adecuada
- ANingún caso de los anteriores es correcto
- BCuando se tiene paralelismo de datos por división del dominio de datos en memoria común entre las tareas
- CCuando hay exclusión mutua entre datos compartidos por diferentes tareas concurrentes
- DCuando se tienen tareas recurrentes que comparten memoria
120Usted ha determinado que una solución concurrente lo más eficiente posible a un determinado problema requiere el uso de dos conjuntos de datos disjuntos entre sí. A partir de aquí, usted concluye
- AQue necesita utilizar una única región crítica condicional que engloba a ambos conjuntos bajo exclusión mutua
- BQue necesita proteger ambos conjuntos de datos bajo un semáforo S que inicialmente vale 1
- CQue necesita utilizar dos monitores que engloban bajo exclusión mutua a cada uno de los conjuntos de datos
- DQue necesita utilizar un monitor único que engloba a ambos conjuntos bajo exclusión mútua
121Los métodos wait() y notify() de la clase Condition en Python:
- ATodas las respuestas anteriores son correctas
- BUtilizan una semántica de señalización SC
- CRequieren el uso de condiciones de guarda al utilizar wait()
- DSon atómicos
122En un escenario de programación concurrente bajo memoria transaccional software con datos compartidos entre varias tareas concurrentes y protegidos mediante transacciones:
- ANo se requieren operaciones de commit ni de roll-back cuando todas las tareas son lectoras
- BNo se requieren operaciones de commit ni de roll-back cuando todas las tareas son escritoras
- CEs posible una única operación de roll-back y múltiples operaciones de commit cuando hay igual número de tareas lectoras y escritoras superior a diez para cada tipo de tarea
- DEs posible una única operación de committ sin operaciones de roll-back cuando hay múltiples tareas escritoras
123Utilizando MPJ-Express es posible tener una cita o <<rendezvous>> entre dos tareas comunicadas
- ANo podemos tener una cita entre dos tareas
- BUtilizando Gather/Scatter
- CUtilizando Ssend/Receive
- DUtilizando Bcast/Reduce
124En una solución basada en el framework RMI el único objeto que soporta el servicio en el lado del servidor gestiona diversos contadores numéricos que almacenan información sobre los clientes que solicitan el servicio, y que deben gestionarse de la forma más eficiente posible. Dado lo anterior, usted:
- AControla la exclusión mutua con objetos atómicos
- BControla la exclusión mutua sobre todos los contadores con objetos de clase Semaphore
- CSabe que no necesita control de exclusión mutua, puesto que no programó hebras en su servidor cuando escribe código RMI
- DSabe que no necesita control de exclusión mutua, dado que el servidor creará nuevos objetos servidores de forma automática que lo hacen necesario
125La programación en Java con ejecutores tiene sentido
- ACuando se implanta una convolución matricial sobre una arquitectura MIMD de 4 cores lógicos
- BCuando se implanta un servidor de red con el framework RMI
- CCuando se implanta un servidor de red con tareas soportadas por la interfaz Callable o Runnable
- DCuando se tienen muy pocas tareas soportadas mediante expresiones λ
126Cuando implementamos un monitor utilizando C++:
- ASabemos que utiliza un único wait-set
- BSiempre tenemos que utilizar condiciones de guarda
- CNo es necesario llamar al método wait habiendo tomado previamente el bloqueo sobre un cerrojo
- DPodemos emplear tantas variables de condición como sea necesario
127Suponga un conjunto de hebras en Java que realizan de forma concurrente una operación de autoincremento sobre la variable compartida x. Dicha variable x es declarada volatile, por tanto:
- ALas operaciones de lectura y escritura en memoria son atómicas, pero no la de autoincremento, por lo que el resultado será una operación de hebra no segura realizada entre dos operaciones sincrónicas
- BNi las operaciones de lectura y escritura en memoria, ni la de autoincremento son atómicas, por lo que el resultado será una operación de hebra no segura
- CLas operaciones de lectura y escritura en memoria no son atómicas, pero sí la de autoincremento, por lo que el resultado será una operación atómica realizada entre dos operaciones no sincrónicas y por tanto es una operación de hebra no segura
- DLas operaciones de lectura y escritura en memoria y la de auto incremento son atómicas en su conjunto, por lo que el resultado será una operación de hebra segura
128En un sistema de tiempo real, las tareas que se ejecutan en la región de memoria inmortal
- APueden ser expulsadas
- BEn la memoria inmortal las tareas no pueden ser expulsadas
- CPueden ser expulsadas por tareas de menor prioridad
- DPueden ser expuladas por el gc
129Se programa en Java una clase M que consta de 5 métodos de los cuales 3 de ellos están sincronizados mediante un cerrojo de clase ReentrantLock, y dos no. La clase define un conjunto de atributos. A continuación se escribe un programa que instancia un objeto O de clase M, y crea hebras que comparten el acceso a O mediante variables de referencia. En esas condiciones:
- AEl objeto O implementa de manera adecuada el concepto teórico de monitor.
- BExiste exclusión mutua sobre los datos que el objeto O encapsula.
- CEs posible tener en tiempo t múltiples hebras accediendo al objeto O.
- DNo existe reentrancia para aquellas hebras que acceden al objeto O a través de
método que están sincronizados.
130El uso de variables volatile en el ámbito de la concurrencia
- Anos garantiza que los datos almacenados en ellas son accedidos de forma segura.
- Bpermite garantizar código parcialmente correcto, pero no totalmente correcto.
- Csirven para optimizar el rendimiento de la aplicación.
- Dfuerza a que la lectura/escritura de estas variables se haga en memoria principal.
131Se desea paralelizar un algoritmo para el que se ha determinado un coeficiente de bloqueo Cb=0, y que tiene que trabajar sobre una máquina con 8 cores lógicos, para procesar un vector de 10^6 componentes sin interdependencia conocidas
entre ellas. Con estos datos, usted decide:- Autilizar un contenedor sincronizado para modelar el vector y optimizar el
rendimiento. - Butilizar 16 tareas con 16 sub-vectores disjuntos y procesarlas utilizando un objeto
de clase ThreadPoolExecutor con corePoolSize=4. - Cutilizar utilizar 16 tareas con 16 subvectores y procesarlas utilizando un ejecutor de
tamaño fijo mediante newFixedThreadPool(16). - Dninguna de las respuestas anteriores es correcta
- Autilizar un contenedor sincronizado para modelar el vector y optimizar el
132Los monitores escritos en lenguaje C++
- Apermiten varias colas de espera por condición.
- Bpermiten únicamente una cola de espera por condición, con señalización SU.
- Cfuncionan únicamente para proteger recursos compartidos bajo control de
exclusión mutua, igual que una región crítica. - Dfuncionan igual que los monitores del lenguaje Python.
133Se desea paralelizar un algoritmo para el que se ha determinado que Cb=0.8 y que tiene que trabajar sobre una máquina con 8 cores lógicos, para procesar 60 tareas con apertura de sockets a un servidor remoto y posterior descarga de datos, sin interdependencias conocidas entre ellas. Con estos datos, usted decide:
- Autilizar un contenedor sincronizado de tareas para optimizar el rendimiento.
- Butilizar 60 tareas y procesarlas utilizando un objeto de clase ThreadPoolExecutor con corePoolSize=4.
- Cutilizar 60 tareas y procesarlas utilizando un objeto de clase ThreadPoolExecutor con corePoolSize=40.
- Dutilizar 60 tareas y procesarlas utilizando un objeto de clase ThreadPoolExecutor con corePoolSize=16.
134Considere un problema de naturaleza numérica que se ha resuelto mediante procesamiento paralelo utilizando un procesador multicore de 16 cores, y donde no se han identificado latencias conocidas; se sabe que la paralelización ha sido bien realizada, y las pruebas realizadas para un rango de tareas paralelas de 2 a 32 ilustran un speedup máximo de 0.98 para 2 tareas. Usted deduce:
- Aque el coeficiente de bloqueo del problema está próximo a uno.
- Bque el problema es inherentemente no paralelizable.
- Cque el análisis debería haber probado un rango de tareas superior a 32.
- Dnada de lo anterior es cierto.
135La planificación mediante ejecutivo cíclico en un sistema de tiempo real
- Ase realiza on-line de forma dinámica durante la ejecución del sistema
- Bes completamente segura frente a la concurrencia sin necesidad de programar un
control explícito de exclusión mutua. - Ctiene un hiperperiodo Tm=mcd(T1,T2,...,Tm)Tm=mcd(T1,T2,...,Tm)
- Daprovecha todos los cores disponibles de la plataforma.
136Desde el punto de vista de las primitivas teóricas de control de la concurrencia, una
región crítica- Apuede simularse únicamente con semáforos.
- Bpuede simularse con semáforos y también con monitores.
- Cpuede simularse únicamente con monitores.
- Dlas primitivas de control teórico de la concurrencia no pueden simularse entre sí.
137Usted dispone de un servidor remoto soportado mediante el framework RMI. Dicho servidor define entre otros, un recurso que debe gestionarse bajo control de exclusión mutua. Su equipo de programadores controla dicha gestión mediante un método void myControl() que protege el recurso mediante el API de la clase Semaphore. Sus programadores crean el semáforo necesario mediante la instrucción Semaphore mySem = new Semaphore(2). El objeto servidor se
registra, y queda en espera de peticiones sobre el puerto 2001. Múltiples clientes situados en máquinas virtuales distintas piden a través sus referencias remotas la ejecución del método myControl(), y la arquitectura remota:- AProcesa secuencialmente esas peticiones, obligada por el sistema de gestión de la concurrencia del framework RMI.
- BSus programadores han desarrollado un código que es seguro pero carece de vivacidad, y usted los abronca.
- CSus programadores han desarrollado un código que no es seguro, y usted los despide.
- DLa arquitectura no tiene problema alguno bajo los supuestos planteados, y funciona normalmente preservando la integridad de los datos. Usted felicita a sus programadores.
138Cuando se utiliza el modelo de memoria transaccional software en Java sobre Clojure:
- Ael delimitador sintáctico dosync gestiona el acceso a regiones críticas bajo transacciones gestionadas por el manejador de transacciones.
- Blos interbloqueos entre tareas concurrentes siguen sin poder evitarse.
- Cpuede haber inconsistencias de los datos compartidos entre tareas que están protegidos bajo transacciones.
- Des necesario utilizar a nivel sintático, el delimitador LockingTransaction.runInTransaction().
139El uso de un enfoque paralelo en la resolución de un problema da lugar a
- Auna mejora del rendimiento de la solución paralela frente a la secuencial, siempre.
- Bno mejorar nunca el rendimiento.
- Cuna mejora del rendimiento dependiente de la naturaleza del problema.
- Duna mejora del rendimiento dependiente, exclusivamente, del número de cores de
la máquina.
140Cuando se programa el control de la exclusión mutua con las primitivas disponibles
para ello en los lenguajes de programación Java, C++ y Python, la característica de
"reentrancia"- Aes inherente a todas las primitivas para los tres lenguajes.
- Bno es necesariamente inherente a todas las primitivas de los tres lenguajes.
- Cdepende de cómo estén soportados las hebras en los diferentes lenguajes.
- Ddepende del modelo de memoria que cada lenguaje implementa.
141El lenguaje Java soporta la implementación del concepto teórico de monitor mediante el los API estándar y de alto nivel. A partir de aquí, considere un problema concurrente resuelto mediante un monitor teórico que requiere la presencia de cinco variables de condición. A continuación se escriben implementaciones con Java de este monitor con ambos API, y para ambas, el número de tareas que utilizan ambos implementaciones es elevado. Entonces
- ALa versión del monitor con el API de alto nivel resultará menos eficiente que la versión con el API estándar.
- BAmbas versiones tendrá una eficiencia equivalente.
- CDado que con ambas API, en tiempo solo hay una hebra activa en el monitor, no tiene sentido especular sobre el rendimiento.
- DLa versión del monitor con el API de alto nivel resultará más eficiente que la versión con el API estándar.
142La técnica de paralelismo de datos mediante división del dominio de datos entre mútiples tareas paralelas puede desarrollarse adecuadamente
- Acon Python utilizando tareas soportadas mediante objetos de la clase Thread.
- Búnicamente con Python cuando se dispone de una GPU.
- Ccon los lenguajes Java, C++, Python pero no con el API MPJ-Express para Java.
- Dcon los lenguajes Java, C++, Python y el API MPJ-Express para Java.
143Considere un sistema que controla el acceso concurrente a información compartida entre tareas. Sabemos que el acceso a dicha información implica un número de operaciones de escrituras concurrentes muy alto frente al número de lecturas concurrentes, e igualmente sabemos que la carga de tareas será elevada. En esas condiciones, usted como diseñador de una solución eficiente para el sistema
- Adescarta de inmediato una solución basada en memoria transaccional software.
- Bconsidera que merece la pena implementar soluciones con memoria transaccional software y bloqueos estándares y desarrollar un "benchmarking" para estimar cuál de ellas le ofrece mejor rendimiento.
- Cdado el desbalance entre el número de operaciones de lectura y escritura, estima que la solución basada en memoria transaccional software y opta por ella.
- Dconsidera que una solución con memoria transaccional que utilice Java sobre Clojure es la mejor.
144Para programar una solución a un problema con coeficiente de bloqueo Cb=0 utilizando el lenguaje Python usted escogería una aproximación
- Ade paralelismo con procesos, compartiendo memoria.
- Bde paralelismo con procesos, comunicándolos mediante mensajes.
- Cde paralelismo con hebras, compartiendo memoria y utilizando bloqueos de
exclusión mutua cuando sea necesario. - Del Global Interpreter Lock (GIL) impide que Python desarrolle un paralelismo real de
ninguna forma.
145Una hebra soportada en Java mediante una lambda-expresión
- APuede estar detenida en un punto de su código por un bloqueo de exclusión mutua, mientras ejecuta código de una zona diferente.
- BPuede acceder a varios objetos diferentes de forma concurrente.
- CPuede ser procesada a través de un ejecutor.
- Dtiene un ciclo de vida distinto a una hebra soportada mediante Runnable.
146Usted debe desarrollar una aplicación bajo el framework RMI que controla un
sistema de reserva de billetes de avión, y sabe:- AQue puede situar DNS y objetos servidores en máquinas diferentes.
- BQue habrá que utilizar necesariamente control de exclusión mutua explícito en el lado del servidor.
- CQue deberá crear una hebra de servicio por cada petición procedente de un cliente.
- DQue utilizando generación dinámica de resguardos puede prescindir de utilizar un DNS local a la máquina que ejecuta el servidor.
147El uso de la interfaz Future junto con tareas Callable
- Aes igual que con la intefaz Runnable, cambiando el método run() por el método call().
- Bpermite el acceso a los datos de retorno del método call() bajo bloqueos explícitos, que el programador debe definir escogiendo alguna técnica de control adecuada.
- Cpermita procesar a esas tareas dándolas como parámetros a objetos de la clase Thread.
- Dpermite el acceso a los datos de retorno del método call() de manera segura, cuando la elección y gestión de las estructuras de datos se hace adecuadamente.
148Se desea desarrollar un protocolo que permita, dado un monitor escrito en C++ que soporta inter-hebras mediante múltiples colas de condición, obtener un monitor semánticamente equivalente utilizando el API estándar de JAVA. Usted considera que dicho protocolo debe
- Acodificar un método synchronized en Java por cada método del monitor C++
- Bcodificar un método synchronized en JAVA por cada método del monitor en C++, y codificar la sincronización en el monitor JAVA, declarando una variable Condition por cada variable_condition que aparece en el monitor con C++.
- Cno es posible construir utilizando el API estándar de JAVA un monitor semánticamente equivalente a otro escrito con C++, ya que al tener un único wait-set, es imposible codificar la sincronización que el monitor en C++ ofrece mediante múltiples variables de condición.
- Dninguna de las alternativas ofrecidas en las respuestas anteriores es correcta.
149Considere el framework RMI de JAVA, para invocación de métodos pertenecientes a objetos situados remotamente, y donde es necesaria la existencia de un middleware (capas de stub). Las funciones de este middleware son:
- Aefectuar directamente la interfaz entre la aplicación Java y la tarjeta de red.
- Befectuar la serialización de los parámetros que se transfieren, y gestionar la espera de los códigos que se comunican hasta que reciben los datos que necesitan.
- Cefectuar la serialización de los parámetros que se transfieren, y localizar al objeto servidor previa consulta al DNS soportado por rmiregistry.
- Defectuar la serialización de los parámetros que se transfieren, y registrar l objeto servidor en el DNS soportado por rmiregistry.
150Los algoritmos de control de la exclusión mutua con variables compartidas y espera ocupada conforman un conjunto de técnicas para control de la concurrencia que son
- Aaltamente transportables entre arquitecturas diferentes.
- Baltamente flexibles frente para acomodar la gestión de número e tareas concurrentes creciente en tiempo de ejecución.
- Caplicables para programar concurrencia en sistema basados en memoria compartida y en paso de mensajes.
- Descasamente eficientes cuando el número de tareas que se programan en un sistema con memoria común es muy elevado, y se utiliza creación dinámica de tareas concurrentes.
151Utilizando el lenguaje Python, se implementa una solución paralela para el producto de matrices de alta dimensión de números reales. La solución se ejecuta sobre una arquitectura de dos procesadores con un banco de memoria común de 128 GB de memoria, y un total , en conjunto, de 16 cores. Su equipo de programadores implementa la solución y efectúa una batería de pruebas. Le remiten un corto informe donde le indican que las pruebas muestran un speedup medio de 0.85. Usted deduce que
- Asu equipo de programadores ha efectuado una implementación de la solución utilizando paso de mensajes con procesos
- Bsu equipo de programadores ha efectuado una implementación de la solución utilizando hebras, pero no hay considerado el impacto del Global Interpreter Lock sobre el rendimiento.
- Csu equipo de programadores ha efectuado una implementación de la solución utilizando paso de mensajes con procesos, pero no ha considerado las latencias derivadas de las operaciones de envío y recepción de mensajes
- Dsu equipo de programadores ha efectuado una implementación de la solución utilizando paso de mensajes con procesos y hebras, en un enfoque de paralelismo mixto.
152Cuando se programa paralelismo de datos utilizando el lenguaje Python con división automática del dominio de datos entre hebras concurrentes, para un problema con del que se sabe mediante un análisis previo que admite una paralelización eficiente
- Aes posible lograr speedups mayores a la unidad para cualquier número de hebras mayor o igual a dos.
- Bes posible lograr speedups mayores a la unidad para cualquier número de hebras mayor o igual a dos, pero únicamente cuando esa hebras se procesan a través de un ejecutor de pool de threads.
- Ces posible lograr speedups mayores a la unidad para cualquier número de hebras mayor o igual a dos, siempre que determinemos el número de hebras mediante la correcta aplicación de la ecuación de Subramanian.
- Dninguna de las anteriores es correcta.
153Selecciona una:
- Ael programa se ejecuta, imprime "Thread-0", después imprime "Fin..." y termina.
- Bel programa se ejecuta, imprime "Thread-0" y se bloquea debido a que todas las hebras toman dos veces un bloqueo sobre el cerrojo "k".
- Cel programa se ejecuta, imprime "Thread-0" y se bloquea debido a la gestión del "wait-set" que se ha implementado, no terminando normalmente.
- Del programa se ejecuta e imprime lo siguiente, pudiendo variar el orden de la impresión que cada hebra efectúa, debido al entrelazado:
Thread-0
Thread-4
Thread-8
Thread-9
Thread-2
Thread-5
Thread-1
Thread-7
Thread-3
Thread-6
Fin...
154Las ecuaciones de Bernstein son una herramienta de análisis matemático aplicable a programas concurrentes que
- Ason de aplicación en sistemas concurrentes sin memoria común.
- Bson aplicables en concurrencia con Java y MPJ-Express.
- Cson aplicables con Java, C++ y Python con hebras.
- Dson aplicables con Java, C++ y Python con procesos.
155Seleccione una:
- Anecesita procesar cuatro tareas Runnable almecenando las superficies de cada trapecio en posiciones distintas de un
array con necesidades obligadas de control de exclusión mutua. - Bnecesita procesar ocho hebras implementadas con lambda-expresiones, almacenando (y sumando) la superficie de
cada trapecio en una variable "double" estática llamada "integral", sin necesidades obligadas de control de exclusión
mutua - Cnecesita un array de tipo "double" moldeado a "Future", soportando a ocho tareas mediante la interfaz "Callable",
retornando a ese array la superficie de cada trapecio a través del retorno del metodo "call()". - Dque es mejor utilizar un esquema de paso de mensajes utilizando MPJ-Express, de forma que cada tarea reciba un
elemento de la partición, calcule la superficie de un trapecio, y la retorne al programa principal para que la sume con
las demás.
- Anecesita procesar cuatro tareas Runnable almecenando las superficies de cada trapecio en posiciones distintas de un
156...mediante división del dominio de datos entre tareas paralelas. Durante el análisis del problema, usted encuentra que una fracción del 50% del código de cada tarea paralela debe ejecutarse secuencialmente debido a dependencias de datos. Sus desarrolladores le informan de que tras una batería de pruebas con la misma nube de datos sobre una arquitectura de 16 cores obtienen un speedup de 15.68. Con esos datos, usted decide que
- Asus desarrolladores han implementado correctamente la solución paralela analizada por usted.
- Bsus desarrolladores han controlado adecuadamente la ejecución secuencial de las fracciones de código que así lo requieren.
- Csus desarrolladores han efectuado una mala implementación de la toma de tiempos y/o del cálculo del speedup en el programa.
- Dninguna de las anteriores es correcta.
157Considere un monitor escrito en lenguaje Java mediante el API alto nivel que utiliza un único cerrojo de clase
"ReentrantLock" para acotar íntegramente mediante el par de métodos lock()-unlock() el código de tres de los seis métodos que el monitor posee. En estas condiciones, ese monitor es utilizando por un conjunto de 20 hebras concurrentes implementadas mediante la interfaz Runnable, 5 de las cuales acceden al monitor a través de los tres métodos acotados mediante el cerrojo, y las 15 restantes a través de los métodos restantes. Usted considera que- Aestablece un orden total sobre las 20 hebras concurrentes que acceden al monitor.
- Bestablece un orden parcial sobre las 5 hebras concurrentes que acceden al monitor a través de los métodos acotados
por el cerrojo. - Cno establece ningún tipo de orden sobre las hebras concurrentes que acceden al monitor.
- Destablece dos órdenes parciales, uno sobre el conjunto de cinco hebras, y otro sobre las quinces hebras restantes.
158Considere un problema orientado a la detección de patrones en secuencias de ADN, y su resolución distribuida sobre una arquitectura de tipo cluster de procesadores, que dispone de 40 nodos de procesamiento comunicados por una red dedicada que presenta cierta latencia en la transferencia de datos. Cada nodo dispone de 8 cores de ejecución y una memoria dedicada. En este contexto usted decide que la solución al problema utilizando el lenguaje Java
- Anecesita utilizar 320 tareas y procesarlas a través de un ejecutor.
- Bnecesita determinar el coficiente C , y determinar el número de tareas necesarias
aplicando la ecuación de Subramanian. - Cnecesita utilizar la extensión de Java MPJ-Express en un esquema de tipo master-slave, diseminando la detección de secuencias desde una tarea master a tarea slaves situadas en los nodos.
- Dnecesita utilizar paralelismo por división del dominio de datos entre 40 tareas, cada una situada en un nodo, como medio de lograr speedups superiores a 20.
159Utilizando el lenguaje Python es posible comunicar a los procesos concurrentes/paralelos utilizando el concepto de pipe o cauce. El uso de estos cauces implica que
- Apodemos dividir un dominio de datos común entre los procesos concurrentes/paralelos.
- Bestamos utilizando paso de mensajes y direccionamiento directo entre los procesos concurrentes/paralelos.
- Cestamos utilizando paso de mensajes y direccionamiento indirecto entre los procesos concurrentes/paralelos.
- Dninguna de las anteriores es correcta.
160La planificación en la especificación de tiempo real de Java (JRTS) se construye
- Amediante sobreescritura de los métodos de gestión de prioridades de Java.
- Bmediante herencia de la clase Thread, incorporando nuevas subclases que dan soporte a gestión de prioridades que JRTS necesita.
- Cmediante la definición de una nueva jerarquía de clases de JRTS que da soporte a la gestión de prioridades para tiempo real.
- Dmediante la extensión del modelo de prioridades de Java estándar a un nuevo modelo que permite instanciar ejecutivos cíclicos para controlar la planificación.
161La memoria transaccional software es una herramienta que permite el acceso de múltiples tareas concurrentes a datos compartidos, gestionándolos dentro del ámbito de una transacción. Su uso permite a los programadores garantizar códigos concurrentes que son
- Avivaces.
- Bvivaces y seguros.
- Cseguros.
- Dvivaces pero no seguros.
162Seleccione una:
- A2
- B2 o 4 o 8
- C8
- D4 o 8
163Considere el API de alto nivel para control de la concurrencia en lenguaje Java y dentro del mismo, el sub-API constituido por la clase Semaphore, que ofrece la implementación que este lenguaje hace del concepto teórico de semáforo. Este sub- API
- Aofrece exactamente la misma semántica que la definida por las operaciones wait(S) y signal(S) del concepto teórico de semáforo.
- Bofrece una semántica que es un superconjunto que engloba y amplía a la definida por las operaciones wait(S) y signal(S) del concepto teórico de semáforo.
- Cofrece una semántica que es un subconjunto que reduce a la definida por las operaciones wait(S) y signal(S) del concepto teórico de semáforo, ya que en Java no se necesita contemplar esa semántica con carácter íntegro y global.
- Dofrece la garantía de que cualquier solución que se programe utilizándolo está necesariamente libre de "deadlocks".
164Seleccione una:
- Aimprime -1000 y el tiempo de ejecución
- Bimprime -2000 y el tiempo de ejecución.
- Ces un código que carece de vivacidad.
- Des un código que carece de seguridad y de vivacidad.
165El API MPJ-Express para paso de mensajes en lenguaje Java logra implementar comunicación uno a muchos mediante
- Adireccionamiento directo con la instruccion MPI.COMM_WORLD.Send
- Bdireccionamiento directo con la instrucción MPI.COMM_WORLD.Bcast
- Cdireccionamiento directo con la instruccion MPI.COMM_WORLD.SSend
- Dno es posible efectuar la difusión uno a muchos con Java y MPJ-Express.
166... lenguaje Java. Para ello, se escribe una clase C de Java que encapsule los recursos necesarios (array de datos y punteros de inserción y extracción: In_ptr y Out_ptr), con el objetivo de poder instanciar a partir de C tantos monitores como se desee.
Para ello, su equipo de programadores- Adebe escribir una clase con cerrojos de clase ReentrantLock y condiciones Condition, e incorporar la sincronización estándar necesaria para resolver el problema.
- Bdebe escribir una clase con cerrojos de clase "ReentrantLock" y condiciones "Condition", hacer estáticos los recursos encapsulados, e incorporar la sincronización estándar necesaria para resolver el problema.
- Cdebe escribir una clase cuyos métodos estén cualificados como "synchronized", definir condiciones "Condition", , e incorporar la sincronización estándar necesaria para resolver el problema.
- Ddebe escribir una clase utilizados cerrojos "ReentrantLock", utilizar el "wait-set" que los objetos Java soportan por defecto, e incorporar la sincronización estándar necesaria para resolver el problema.
167Considiere un cluster de procesadores del cuál se sabe que la red de comunicaciones entre nodos es muy lenta para los estándares actuales. Cada nodo del cluster dispone de 16 núcleos de ejecución con 128 GB de memoria RAM. Se desea ejecutar en el cluster la simulación de un modelo de plegamiento de proteínas utilizando un esquema de paso de mensajes, y se sabe que el algoritmo base de la simulación implica una alta tasa de comulación entre tareas paralelas. En estas condiciones:
- AUsted se empeña en intentar optimizar más el algoritmo
- BSe conforma con lo que hay, supone que Cb = 0 y ejecuta la simulación
- CEncarga a su equipo de programadores una labor de benchmarking e intenta determinar Cb de forma más precisa
- DNada de lo anterior tiene sentido
168La planificación mediante un ejecutivo cícliclo en un sistema de tiempo real tiene sentido:
- ACuando el sistema de tiempo real además tiene carácter de sistema empotrado
- BCuando una de las tareas del sistema es periódica, y se sabe que se activa cada T segundos de tiempo del sistema
- CCuando existe un orden total iterado entre todas las tareas del sistema, conocido a priori
- DCuando existe un orden parcial entre todas las tareas del sistema, conocido a priori
169Una solución cliente-servidor con sockets en Java utiliza un servidor multihebrado mediante un pool de hebras que involucra a estructuras de datos compartidas que son listas numéricas. Diferentes clientes pueden trabajar sobre la misma o sobre diferentes listas. Usted desea un servidor lo más eficiente posible y para ello:
- AModela sus listas mediante clases contenedoras autosincronizadas
- BEngloba el acceso a todas las listas bajo el control de un objeto de clase Semaphore
- CEncapsula a todas las listas en un único monitor utilizando el API de alto nivel para concurrencia
- DEngloba el acceso a todas las listas bajo el control de un objeto de clase ReentrantLock
170Se desea efectuar una convolución tridimensional utilizando un kernel de convolución de 3x3x3 celdas sobre una matriz sobre una matriz también tridimensional de 10^9x10^9x10^9 celdas mediante procesamiento paralelo utilizando el lenguaje C++. Su plataforma hardware es un sistema empotrado con una memoria que no permite alojar más que la matriz de datos, el kernel de convolución, y el código objeto ejecutable de su programa (además del sistema operativo), si bien el disco duro tiene tanto espacio libre como necesite, aunque presenta tiempos de lectura-escritura que pueden considerarse lentos. Con los datos anteriores, usted:
- ADecide que no es posible solucionar el problema con esos presupuestos
- BUtiliza dos copias de la matriz, una en memoria principal para escritura, otra en el disco duro para lectura, implementa una solución paralela con Cb = 0 y divide la matriz original entre las tareas paralelas
- CUtiliza dos copias de la matriz, una en memoria principal para escritura, otra en el disco duro para lectura , implementa una solución paralela donde determina cuánto vale Cb y divide la matriz original entre las tareas paralelas
- DPrograma una solución secuencial, que es la única viable con las especificaciones proporcionadas
17185. Los algoritmos de control de exclusión mutua con memoria común
- AGeneran sobrecargas de ejecución
- BSon altamente transportables
- CNo dependen del modelo de memoria del lenguaje en que se implementan
- DImplican el uso de colas de espera ocupada para gestionar la exclusión mutua
172...programador puede utilizar semáforos
- Acon una semántica equivalente a la proporcionada por los semáforos teóricos
- Bcon una semántica que restringe a la proporcionada por los semáforos teóricos
- Ccon una semántica que amplía a la proporcionada por los semáforos teóricos
- Dcon una semántica equivalente a la de los semáforos de Java
173Si se proporciona 1000 como valor de entrada para la variable niter
- AImprime -1000 y el tiempo de ejecución
- Bimprime -2000 y el tiempo de ejecución
- Ces un código que carece de vivacidad
- Des un código que carece de seguridad y vivacidad
174Considiere un cluster de procesadores del cuál se sabe que la red de comunicaciones entre nodos es muy lenta para los estándares actuales. Cada nodo del cluster dispone de 16 núcleos de ejecución con 128 GB de memoria RAM. Se desea ejecutar en el cluster la simulación de un modelo de plegamiento de proteínas utilizando un esquema de paso de mensajes, y se sabe que el algoritmo base de la simulación implica una alta tasa de comulación entre tareas paralelas. En estas condiciones:
- AEncarga a su equipo de programadores una labor de benchmarking e intenta determinar Cb de forma más precisa
- BNada de lo anterior tiene sentido
- CUsted se empeña en intentar optimizar más el algoritmo
- DSe conforma con lo que hay, supone que Cb = 0 y ejecuta la simulación
175Suponga que 500 hebras comparten el acceso a un objeto común cada
una a través de su propia referencia, y ejecuta el acceso a un método
inv() de ese objeto que incrementa un contador que inicialmente vale
cero. El programador protege el acceso haciendo que cada hebra
ejecuta la llamada a inc() envolviendo la misma en un bloque de la
forma sychronized(this) { …miReferencia.inc(); … }. El valor final del
contador es:- A500
- B499
- CUn número indeterminado entre 0 y 499
- DUn número indeterminado entre 1 y 500
176Los hilos creados por otro hilo pueden compartir información con el hijo padre:
- AA través de variables estáticas definidas en el hilo padre o el hilo hijo
- BPasando por referencia a los hilos hijos las variables definidas
- CA través de un archivo
- DTodas son correctas
177Un hilo...
- APuede estar ejecutando el protocolo de entrada a la sección crítica mientras otro se encuentra ejecutando instrucciones del protocolo de salida.
- BNo puede estar ejecutando el protocolo de entrada a la sección crítica mientras otro se encuentra ejecutando instrucciones del protocolo de salida.
- CPuede encontrarse ejecutando instrucciones de la sección crítica mientras otro hilo ejecuta las del protocolo de salida.
- DPuede estar ejecutando instrucciones del protocolo de salida al mismo tiempo que otro hilo también las ejecuta.
Informationen
- Beschreibung
- Quiz am Preguntas Tipo Test PCTR, erstellt von Miguel Afan am 05/05/2020.
- Autor
- Miguel Afan
- Sprache
- Español
- Aufrufe
- 29
- Bewertung
- Noch keine Bewertungen Bewerte dieses Quiz