Diferencia entre revisiones de «Mensajería»
De Wiki de Sistemas Operativos
Línea 34: | Línea 34: | ||
* Comportamiento del emisor, '''send()''' | * Comportamiento del emisor, '''send()''' | ||
− | ** | + | **Síncrona: el proceso emisor que realiza el send() queda bloqueado hasta que el receptor llama a recv() |
− | ** | + | **Asíncrona: suponemos capacidad de almacenamiento en el destinatario o en el buzón. Allí acumulamos los mensajes entrantes y el receptor irá leyendo cuando pueda. Es más ágil pero el destinatario/buzón necesita capacidad de almacenamiento, la cual será limitada y los mensajes posteriores pueden caer en saco roto |
* Comportamiento del receptor, '''recv()''' | * Comportamiento del receptor, '''recv()''' | ||
** Bloqueante: un recv() sin mensajes a procesar pasa a estado bloqueado. Si se hace un send() vuelve a estado preparado | ** Bloqueante: un recv() sin mensajes a procesar pasa a estado bloqueado. Si se hace un send() vuelve a estado preparado | ||
** No bloqueante: recv() sin mensajes a procesar devuelve un "prueba más tarde" | ** No bloqueante: recv() sin mensajes a procesar devuelve un "prueba más tarde" |
Revisión del 00:45 7 abr 2011
Es una unidad de información que se intercambia entre dos o más procesos.
Mediante los mensajes podemos transmitir información y sincronizar procesos (mediante la espera de un cierto mensaje).
Primitivas:
- send(mensaje): envía mensaje
- receive(mensaje): recibir mensaje
Destino y fuente
- Denominación Directa
- Se emplea ID para identificar al destinatario.
- Valores especiales: BROADCAST (a todos), MULTICAST (a un grupo).
- Denominación Indirecta
- Se emplea un elemento intermediario.
- Recurso compartido especial en el sistema: BUZÓN.
- Habiendo intermediarios, hay que comprobar las identidades pues pueden ser falsas/erróneas
Formas de transmisión
- Transmisión por copia
- Directa: el mensaje se copia de espacio de emisor a espacio de receptor)
- Indirecta: el mensaje se copia de espacio de emisor a espacio (buzón) de SO, y de ahí a espacio de receptor.
- Transmisión por referencia
- Directa: lo que se copia es un puntero al mensaje
- Global: el emisor crea mensaje en espacio de SO, y se copia a espacio de receptor un puntero al mismo.
- Transmisión por copia de escritura: el mensaje sólo se copia si se modifica por emisor o receptor.
Formas de comunicación
- Comportamiento del emisor, send()
- Síncrona: el proceso emisor que realiza el send() queda bloqueado hasta que el receptor llama a recv()
- Asíncrona: suponemos capacidad de almacenamiento en el destinatario o en el buzón. Allí acumulamos los mensajes entrantes y el receptor irá leyendo cuando pueda. Es más ágil pero el destinatario/buzón necesita capacidad de almacenamiento, la cual será limitada y los mensajes posteriores pueden caer en saco roto
- Comportamiento del receptor, recv()
- Bloqueante: un recv() sin mensajes a procesar pasa a estado bloqueado. Si se hace un send() vuelve a estado preparado
- No bloqueante: recv() sin mensajes a procesar devuelve un "prueba más tarde"