0% encontró este documento útil (0 votos)
215 vistas5 páginas

PC2 - Sist. Distribuidos

Este documento contiene las respuestas de Ruben Dario Quispe VIilca a nueve preguntas sobre conceptos relacionados con sistemas distribuidos, como mutex, comunicación cliente-servidor, hilos, RPC y comunicación orientada a conexión vs sin conexión. Ruben explica cada concepto y da ejemplos de su uso.

Cargado por

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

PC2 - Sist. Distribuidos

Este documento contiene las respuestas de Ruben Dario Quispe VIilca a nueve preguntas sobre conceptos relacionados con sistemas distribuidos, como mutex, comunicación cliente-servidor, hilos, RPC y comunicación orientada a conexión vs sin conexión. Ruben explica cada concepto y da ejemplos de su uso.

Cargado por

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

Nombre:

- Ruben Dario Quispe VIilca (U19311120)

Ejercicios

1. Explica las tres cosas que debe garantizar un MUTEX.

o Exclusión mutua: Solo un hilo puede acceder a la sección crítica (parte del código
que debe ser ejecutada de manera exclusiva) en un momento dado.
o Espera ocupada: Si un hilo intenta acceder a la sección crítica y esta está siendo
utilizada por otro hilo, el primero debe esperar activamente hasta que la sección
esté disponible.
o Ausencia de deadlock: No debe haber una situación en la que dos o más hilos
estén esperando indefinidamente por recursos que están siendo retenidos por
otros hilos.

2. Dadas las variables X y Z, con hilo H1 fijando ambas variables a 0 mientras hilo H2 fija a
ambas variables en 1, escribe el seudocódigo de un MUTEX que garantice la consistencia
de ambas variables.

```
mutex = 0
H1:
while mutex != 0 do
; Espera ocupada
end while
X=0
Z=0
mutex = 1

H2:
while mutex != 0 do
; Espera ocupada
end while
X=1
Z=1
mutex = 1
```

Este código utiliza una variable `mutex` para garantizar la exclusión mutua entre los hilos
H1 y H2. Cuando un hilo quiere acceder a las variables X y Z, primero verifica si `mutex` es
igual a cero (lo que indica que no hay otro hilo usando las variables). Si `mutex` es
diferente de cero, el hilo entra en un ciclo de espera ocupada hasta que `mutex` vuelva a
ser cero. Una vez que el hilo tiene acceso exclusivo a las variables, puede modificarlas
según sea necesario y luego establece `mutex` en uno para indicar que ha terminado.

3. Multicast es una tecnología para comunicación en grupo, explica su funcionamiento.

Multicast es una tecnología de comunicación en grupo que permite enviar un mensaje a


múltiples destinatarios al mismo tiempo. En lugar de enviar copias individuales del
mensaje a cada destinatario, el mensaje se envía una sola vez y se distribuye a todos los
miembros del grupo.

Para lograr esto, Multicast utiliza direcciones IP especiales que identifican a un grupo de
destinatarios en lugar de una única dirección IP para un solo destinatario. Cuando un
emisor envía un mensaje a una dirección IP de Multicast, el mensaje se envía a todos los
miembros del grupo identificado por esa dirección IP.

Los routers en la red también juegan un papel importante en la tecnología Multicast. Los
routers pueden detectar cuáles son los grupos de Multicast activos y asegurarse de que los
mensajes enviados a esas direcciones IP sean entregados solo a los miembros del grupo
correspondiente.

En resumen, Multicast permite enviar mensajes a múltiples destinatarios al mismo tiempo


utilizando direcciones IP especiales y aprovechando la capacidad de los routers para
entregar mensajes solo a los miembros del grupo correspondiente.

4. Cita al menos tres funciones relacionadas con los hilos y el uso de cada una de ellas.

1. Creación de hilos: Permite crear nuevos hilos dentro de un proceso existente. Los hilos
pueden ejecutar tareas en paralelo y compartir recursos con otros hilos del mismo
proceso.

2. Sincronización de hilos: Permite coordinar la ejecución de múltiples hilos para evitar


problemas como condiciones de carrera o bloqueo mutuo. Algunas técnicas comunes para
la sincronización de hilos incluyen semáforos, mutexes y variables condicionales.

3. Terminación de hilos: Permite finalizar la ejecución de un hilo cuando ya no es necesario


o cuando ocurre un error. Es importante asegurarse de que los recursos compartidos por el
hilo sean liberados correctamente antes de su terminación.

En general, las funciones relacionadas con los hilos permiten aprovechar al máximo el
potencial del procesamiento en paralelo y mejorar el rendimiento y la eficiencia en
aplicaciones que requieren tareas concurrentes.

5. Cita al menos tres desventajas del modelo cliente - servidor.


1. Escalabilidad limitada: El modelo cliente-servidor puede tener problemas de
escalabilidad cuando el número de clientes que acceden al servidor aumenta
significativamente. Esto puede llevar a una sobrecarga del servidor y a una disminución en
el rendimiento.

2. Dependencia del servidor: En el modelo cliente-servidor, los clientes dependen


completamente del servidor para realizar cualquier tarea o procesamiento. Si el servidor
falla o experimenta problemas, todos los clientes pueden verse afectados.

3. Complejidad en la gestión de la red: El modelo cliente-servidor puede requerir una


infraestructura de red compleja para garantizar la comunicación entre los clientes y el
servidor. Esto puede aumentar los costos y la complejidad en la gestión de la red.

En general, aunque el modelo cliente-servidor es ampliamente utilizado y ofrece muchas


ventajas, también tiene algunas desventajas que deben ser consideradas al diseñar
sistemas distribuidos.

6. Explica la diferencia entre el RPC y el modelo cliente - servidor.

El RPC (Remote Procedure Call) es una variante del modelo cliente-servidor que permite a
un programa llamar a un procedimiento ubicado en otra máquina como si fuera un
procedimiento local. En el RPC, el programador no se preocupa por las transferencias de
mensajes o de las E/S, ya que una llamada a un procedimiento remoto se parece lo más
posible a una llamada local. Para lograr esta transparencia, el RPC utiliza un resguardo de
cliente que se encarga de empacar los parámetros en un mensaje y le solicita al núcleo que
envíe el mensaje al servidor, posteriormente se bloquea hasta que regrese la respuesta.

Por otro lado, en el modelo cliente-servidor tradicional, los clientes envían solicitudes al
servidor para realizar tareas específicas y esperan una respuesta. El servidor es
responsable de procesar las solicitudes y enviar respuestas a los clientes correspondientes.
En este modelo, los clientes dependen completamente del servidor para realizar cualquier
tarea o procesamiento.

En resumen, la principal diferencia entre el RPC y el modelo cliente-servidor es que en el


primero se busca lograr la transparencia entre llamadas locales y remotas mediante la
emulación de llamadas locales, mientras que en el segundo los clientes dependen
completamente del servidor para realizar cualquier tarea o procesamiento.

7. Explica la diferencia entre envío de datagrama y flujo de datos.

El envío de datagrama y el flujo de datos son dos formas diferentes de comunicación en


sistemas distribuidos.
El envío de datagrama es un servicio sin conexión que se asemeja a enviar una carta postal.
En este servicio, el cliente envía un mensaje al servidor sin establecer una conexión previa.
El servidor recibe el mensaje y responde si es necesario. Este servicio es útil para
aplicaciones que requieren una comunicación rápida y eficiente, pero no necesitan
garantías de entrega o recepción.

Por otro lado, el flujo de datos es un servicio orientado a la conexión que proporciona una
comunicación confiable y ordenada entre el cliente y el servidor. En este servicio, se
establece una conexión entre el cliente y el servidor antes de enviar cualquier dato. Los
datos se transmiten en forma de flujo continuo, lo que significa que los datos se entregan
en orden y sin pérdidas. Este servicio es útil para aplicaciones que requieren una
comunicación confiable y ordenada, como la transferencia de archivos o la transmisión de
video.

En resumen, la principal diferencia entre el envío de datagrama y el flujo de datos es que el


primero no establece una conexión previa entre el cliente y el servidor, mientras que en el
segundo sí se establece una conexión antes del intercambio de datos. Además, mientras
que el envío de datagrama es útil para aplicaciones que requieren una comunicación
rápida y eficiente pero no necesitan garantías de entrega o recepción, el flujo de datos
proporciona una comunicación confiable y ordenada entre los clientes y los servidores.

8. ¿Cuándo es importante usar una comunicación orientada a conexión?

Es importante utilizar una comunicación orientada a conexión cuando se requiere una


comunicación confiable y ordenada entre el cliente y el servidor. Este tipo de comunicación
establece una conexión previa entre el cliente y el servidor antes de enviar cualquier dato,
lo que garantiza que los datos se entreguen en orden y sin pérdidas.

La comunicación orientada a conexión es útil para aplicaciones que requieren una


transferencia de datos confiable, como la transferencia de archivos o la transmisión de
video. También es útil para aplicaciones que requieren interacciones complejas entre el
cliente y el servidor, como las aplicaciones web que utilizan protocolos como HTTP o
HTTPS.

En resumen, la comunicación orientada a conexión es importante cuando se necesita una


comunicación confiable y ordenada entre el cliente y el servidor, especialmente en
aplicaciones que requieren transferencias de datos complejas o críticas.

9. ¿Cuándo es importante usar una comunicación sin conexión?

Es importante utilizar una comunicación sin conexión cuando se necesita una


comunicación rápida y eficiente entre el cliente y el servidor, pero no se requiere una
garantía de entrega o recepción de los datos.
La comunicación sin conexión, también conocida como servicio de datagrama, es útil para
aplicaciones que requieren una transferencia de datos rápida y eficiente, como los juegos
en línea o las aplicaciones de chat. También es útil para aplicaciones que no necesitan
garantías de entrega o recepción, como la transmisión de datos en tiempo real.

En resumen, la comunicación sin conexión es importante cuando se necesita una


comunicación rápida y eficiente entre el cliente y el servidor, pero no se requiere una
garantía de entrega o recepción de los datos.

10. ¿Cuál es la diferencia entre un servidor de transacciones y un servidor de archivos?

Un servidor de transacciones es un tipo de servidor que se utiliza para procesar


transacciones en una base de datos. Estas transacciones pueden incluir operaciones como
la inserción, actualización o eliminación de datos en la base de datos. El servidor de
transacciones garantiza que todas las transacciones se completen correctamente y que los
datos se mantengan consistentes.

Por otro lado, un servidor de archivos es un tipo de servidor que se utiliza para almacenar
y compartir archivos entre diferentes usuarios o sistemas. Los usuarios pueden acceder a
los archivos almacenados en el servidor y realizar operaciones como la lectura, escritura o
eliminación de archivos.

En resumen, la principal diferencia entre un servidor de transacciones y un servidor de


archivos es su función principal. Un servidor de transacciones se utiliza para procesar
transacciones en una base de datos, mientras que un servidor de archivos se utiliza para
almacenar y compartir archivos entre diferentes usuarios o sistemas.

11. ¿Cuál es la diferencia entre una función send( ) y sendto( )?

La función send() se utiliza para enviar datos a través de un socket orientado a conexión, es
decir, un socket que ha establecido una conexión previa con otro socket. La dirección del
socket destino ya está establecida y no necesita ser especificada en la llamada a la función
send().

Por otro lado, la función sendto() se utiliza para enviar datos a través de un socket sin
conexión, también conocido como servicio de datagrama. En este caso, la dirección del
socket destino debe ser especificada en la llamada a la función sendto().

En resumen, la principal diferencia entre las funciones send() y sendto() es que send() se
utiliza para sockets orientados a conexión y no requiere especificar la dirección del socket
destino, mientras que sendto() se utiliza para sockets sin conexión y requiere especificar la
dirección del socket destino en cada llamada.

También podría gustarte