Diferencia entre revisiones de «Mensajería»
De Wiki de Sistemas Operativos
Línea 17: | Línea 17: | ||
** Se emplea un elemento intermediario. | ** Se emplea un elemento intermediario. | ||
** Recurso compartido especial en el sistema: BUZÓN. | ** 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 == | == Formas de transmisión == | ||
Línea 22: | Línea 23: | ||
* '''Transmisión por copia''' | * '''Transmisión por copia''' | ||
** ''Directa'': el mensaje se copia de espacio de emisor a espacio de receptor) | ** ''Directa'': el mensaje se copia de espacio de emisor a espacio de receptor) | ||
− | ** ''Indirecta'': el mensaje se copia de espacio de emisor a espacio de SO, y de ahí 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''' | * '''Transmisión por referencia''' | ||
Línea 29: | Línea 30: | ||
* '''Transmisión por copia de escritura''': el mensaje sólo se copia si se modifica por emisor o receptor. | * '''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 send() | ||
+ | **Sincronía: el proceso emisor que realiza el send() queda bloqueado hasta que el receptor llama a recv() | ||
+ | **Asicrona: 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 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" |
Revisión del 22:06 6 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 send()
- Sincronía: el proceso emisor que realiza el send() queda bloqueado hasta que el receptor llama a recv()
- Asicrona: 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 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"