Mensajería

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar

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()
    • 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 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"