tuberias transferencia sistemas programación programacion paso pasaje operativos mensajes envio distribuidos concurrency shared-memory message-passing

concurrency - programación - transferencia de mensajes sistemas operativos



¿Cuál es la diferencia entre el paso de mensajes y los modelos de concurrencia de memoria compartida? (7)

Corrígeme si me equivoco, pero me sorprende que esto no se haya preguntado antes aquí ...


  1. En el modelo de memoria compartida, la memoria se comparte mediante procesos cooperativos, que pueden intercambiar información leyendo y escribiendo datos, pero en el mensaje la comunicación se realiza por medio de mensajes intercambiados entre los procesos cooperantes.
  2. La memoria compartida ayuda a ejecutar procesos al mismo tiempo, pero no puede pasar mensajes.
  3. El recurso de paso de mensajes tiene dos operaciones: enviar (mensaje) y recibir (mensaje). El proceso del cual tiene tamaño fijo o variable.
  4. La transmisión de mensajes es útil para intercambiar cantidades menores de datos, porque no es necesario evitar conflictos. La transmisión de mensajes también es más fácil de implementar que la memoria compartida para la comunicación entre procesos.
  5. En los sistemas de memoria compartida, las llamadas al sistema son necesarias solo para establecer regiones de memoria compartida. Una vez que se establece la memoria compartida, todos los accesos se tratan como accesos rutinarios a la memoria, y no se necesita ayuda del kernel.

Más rápido

La memoria compartida permite la máxima velocidad y comodidad de comunicación, ya que se puede hacer a velocidades de memoria cuando está dentro de una computadora. La memoria compartida es más rápida que el envío de mensajes, ya que los sistemas de paso de mensajes se implementan típicamente usando llamadas al sistema y, por lo tanto, requieren la tarea más larga de intervención del kernel.


Aunque está preguntando por las diferencias entre el modelo de transmisión de mensajes y el modelo de memoria compartida y ya ha obtenido buenas respuestas con respecto a sus actuaciones, formas de intercambiar información y problemas de concurrencia, me gustaría señalar que:

No puede haber diferencias fundamentales entre ellos con respecto a su computabilidad (bajo ciertas condiciones).

Puede simular una memoria compartida sobre el sistema subyacente de transmisión de mensajes. Esto hace posible ver el modelo de memoria compartida como un lenguaje de nivel superior para diseñar algoritmos en sistemas de paso de mensajes distribuidos asíncronos.

En particular, este documento ABD@JACM''95 muestra que

Cualquier algoritmo libre de espera basado en registros de múltiples lectores atómicos, de un solo escritor (y múltiples escritores) se puede emular automáticamente en sistemas de paso de mensajes, siempre que al menos la mayoría de los procesadores no estén defectuosos y permanezcan conectados. La sobrecarga introducida por estas emulaciones es polinomial en la cantidad de procesadores en el sistema.


El rendimiento del sistema de envío de mensajes puede ser demasiado bajo para algunas aplicaciones que requieren un tiempo de respuesta rápido, pero si necesita mayor velocidad o procesamiento en tiempo real, puede utilizar un sistema de memoria compartida.


Es una diferencia bastante simple. En un modelo de memoria compartida, todos los trabajadores operan con los mismos datos. Esto abre muchos de los problemas de concurrencia que son comunes en la programación paralela.

Los sistemas de paso de mensajes hacen que los trabajadores se comuniquen a través de un sistema de mensajería. Los mensajes mantienen a todos separados, de modo que los trabajadores no puedan modificar los datos de los demás.

Por analogía, digamos que estamos trabajando juntos con un equipo en un proyecto. En un modelo, todos estamos abarrotados alrededor de una mesa, con todos nuestros documentos y datos establecidos. Solo podemos comunicarnos cambiando cosas sobre la mesa. Tenemos que tener cuidado de no tratar de operar la misma información a la vez, o se volverá confuso y las cosas se mezclarán.

En un modelo de transmisión de mensajes, todos nos sentamos en nuestros escritorios, con nuestros propios documentos. Cuando queremos, podemos pasarle un papel a alguien más como un "mensaje", y ese trabajador ahora puede hacer lo que quiera con él. Solo tenemos acceso a todo lo que tenemos delante de nosotros, así que nunca tenemos que preocuparnos de que alguien vaya a acercarse y cambiar uno de los números mientras estamos en el medio de resumirlos.

Ok, tonta analogía!


Los modelos de pase de mensajes (Erlang, por ejemplo) no tienen ningún estado compartido; toda la sincronización y comunicación se realiza mediante el intercambio de mensajes. Los modelos de memoria compartida se comunican mediante lectura / escritura en bloques de memoria compartida, que están protegidos por semáforos o similar.


Para diferenciar entre Paso de mensaje y memoria compartida, considere cinco cosas:

  1. comunicación: - En el caso de transmisión de mensajes, la comunicación depende del Programador, como a qué proceso se comunicará. pero en el caso de la memoria compartida, la comunicación se realiza automáticamente.
  2. distribución de datos: -mp (Manualmente) sm (Automático)
  3. Soporte H / W: - mp (simple) sm (Extensivo porque debe ser inteligente para detectar el interproceso de forma automática)
  4. corrección: -mp (difícil) sm (menos difícil)
  5. rendimiento: -mp (difícil) sm (muy difícil) `

el paso de mensajes es un buen método para justificar los datos pero tiene un tiempo de respuesta lento para una comunicación más rápida. Pero en la memoria compartida, los datos del modelo se extraen de una memoria y un grupo de trabajo puede hacer un trabajo diferente sobre los mismos datos