Comunicación entre procesos

Comunicación entre procesos

La comunicación entre procesos, en inglés IPC (Inter-process Communication) es una función básica de los sistemas operativos. Los procesos pueden comunicarse entre sí a través de compartir espacios de memoria, ya sean variables compartidas o buffers, o a través de las herramientas provistas por las rutinas de IPC. La IPC provee un mecanismo que permite a los procesos comunicarse y sincronizarse entre sí, normalmente a través de un sistema de bajo nivel de paso de mensajes que ofrece la red subyacente.

La comunicación se establece siguiendo una serie de reglas (protocolos de comunicación). Los protocolos desarrollados para internet son los mayormente usados: IP (capa de red), protocolo de control de transmisión (capa de transporte) y protocolo de transferencia de archivos , protocolo de transferencia de hipertexto (capa de aplicación).

Los procesos pueden estar ejecutándose en una o más computadoras conectadas a una red. Las técnicas de IPC están divididas dentro de métodos para: paso de mensajes, sincronización, memoria compartida y llamadas de procediemientos remotos (RPC). El método de IPC usado puede variar dependiendo del ancho de banda y latencia (el tiempo desde el pedido de información y el comienzo del envió de la misma) de la comunicación entre procesos, y del tipo de datos que están siendo comunicados.

Contenido

Conceptos básicos

El sistema operativo provee mínimamente dos primitivas, enviar y recibir, normalmente llamadas send y receive. Asimismo, debe implementarse un enlace de comunicación entre los procesos de la comunicación. Este enlace puede ser unidireccional o multidireccional según permita la comunicación en solo uno o en varios sentidos.

Tipos de comunicación

La comunicación puede ser:

  • Síncrona o asíncrona
  • Persistente (persistent) o momentánea (transient)
  • Directa o indirecta
  • Simétrica o asimétrica
  • Con uso de buffers explícito o automático
  • Envío por copia el mensaje o por referencia
  • Mensajes de tamaño fijo o variable

Síncrona

Quien envía permanece bloqueado esperando a que llegue una respuesta del receptor antes de realizar cualquier otro ejercicio.

Asíncrona

Quien envía continúa con su ejecución inmediatamente después de enviar el mensaje al receptor.

Persistente

El receptor no tiene que estar operativo al mismo tiempo que se realiza la comunicación, el mensaje se almacena tanto tiempo como sea necesario para poder ser entregado (Ej.: e-Mail).

Momentánea (transient)

El mensaje se descarta si el receptor no está operativo al tiempo que se realiza la comunicación. Por lo tanto no será entregado.

Directa

Las primitivas enviar y recibir explicitan el nombre del proceso con el que se comunican. Ejemplo:

enviar (mensaje, A) envía un mensaje al proceso A

Es decir se debe especificar cual va a ser el proceso fuente y cual va a ser el proceso Destino.

Las operaciones básicas Send y Receive se definen de la siguiente manera: Send (P, mensaje); envía un mensaje al proceso P (P es el proceso destino). Receive (Q, mensaje); espera la recepción de un mensaje por parte del proceso Q (Q es el proceso fuente).

Nota: Receive puede esperar de un proceso cualquiera, un mensaje, pero el Send sí debe especificar a quién va dirigido y cuál es el mensaje.

Indirecta

La comunicación Indirecta: Es aquella donde la comunicación está basada en una herramienta o instrumento ya que el emisor y el perceptor están a distancia.

Simétrica

Todos los procesos pueden enviar o recibir. También llamada bidireccional para el caso de dos procesos.

Asimétrica

Un proceso puede enviar, los demás procesos solo reciben. También llamada unidireccional. Suele usarse para hospedar servidores en Internet.

Uso de buffers automático

El transmisor se bloquea hasta que el receptor recibe el mensaje (capacidad cero).

RPC

(Remote Procedure Call / llamada a un procedimiento remoto) Permitir que los programas realicen llamadas a funciones localizadas en otras máquinas. Los programadores no se tienen que preocupar por los detalles de la programación de la red. Conceptualmente simple.

Desde el punto de vista de un programador la llamada a una función remota es y funciona de la misma manera que lo haría si la llamada fuese local. En este sentido, se logra transparencia.

Cada función pasa a tener dos partes: cliente, la máquina local donde se implementa la interface (prototipo de una función) para invocar las funciones remotas. Servidor, implementación de las funciones propiamente dichas.

Paso de parámetros

No debería de existir ningún problema si dos máquinas son homogéneas, sin embargo la realidad no suele ser ésta. Pueden surgir problemas de diferentes codificación de caracteres (ej.: mainframe IBM: EBCDIC, IBM PC: ASCII) o diferentes tipos de ordenación de bytes (ej.: Intel: little endian, Sun SPARC: big endian).

Como solución a estos problemas es importante lograr un acuerdo del protocolo usado. La parte encargada de generar los mensajes no debe de presuponer el uso de un lenguaje de programación específico.

Invocación remota de métodos (RMI)

Es un mecanismo de expansión de RPC cuyo objetivo es dar soporte a sistemas orientado a objetos.

La idea es tener objetos distribuidos. Para acceder al estado de un objeto sólo se realiza a través de métodos definidos por un objeto interface. Un objeto ofrece múltiples interfaces. Una interface puede ser implementada por múltiples objetos.

Comunicación orientada a mensajes

Las comunicaciones RPC se basan en la idea que el receptor está operativo para poder invocar una cierta función, no podemos suponer que el receptor siempre estará operativo y esperando a comunicarse. La solución es definir la comunicación en término de paso de mensajes.

Mensajes momentáneos vs. mensajes persistentes

Momentáneos: no soportan el envío de mensajes persistentes. (1) Sockets, (2) Message-passing interface (MPI).

Sockets Berkeley

Sistema fuertemente acoplado a las redes TCP/IP

Sockets API:

  1. socket: crea una nueva comunicación.
  2. bind: añade la dirección local al socket.
  3. listen: queda en espera de conexiones.
  4. accept: queda bloqueado hasta la llegada de un pedido de conexión.
  5. connect: pedido de establecimiento de conexión.
  6. send: enviar datos por la conexión.
  7. receive: recibir datos por la conexión.
  8. close: desvincula el socket la dirección local.

Message-passing interface (MPI)

Diseñado para aplicaciones paralelas crea un nivel de abstracción más alto que el provisto por sockets. Provee una interface con primitivas más avanzadas. Por el contrario cuenta con una gran cantidad de implementaciones (librería y protocolos) propietarias lo que genera la necesidad de una interface standard.

MPI API:

  1. MPI_bsend: vincula la salida de mensajes con el buffer de salida local.
  2. MPI_send: envía un mensaje y espera hasta que es copiado al buffer.
  3. MPI_ssend: envía un mensae y espera hasta que el receptor inicie.
  4. MPI_sendrecv: envía un mensaje y espera respuesta.
  5. MPI_isend: pasa la referencia de un mensaje y continúa.
  6. MPI_issend: para la referencia de un mensaje y espera hasta que el receptor inicie.
  7. MPI_recv: recibe un mensaje; se bloquea en el caso de no haberlo.
  8. MPI_irecv: verifica si hay mensajes entrantes; no se bloquea.

Persistentes: el mensaje se encola y se entrega cuando se pide. (1) Message-oriented middleware (MOM)

Implementaciones

Hay un número de APIs que pueden ser usadas por IPC. Un número de plataformas independientes de APIs incluidas las siguientes:

  • Tuberías Anónimas y con nombre
  • Common Object Request Broker Architecture (CORBA)
  • Distributed Computing Environment (DCE)
  • Message Bus (MBUS) (especificado en RFC 3259)
  • ONC RPC
  • Sockets
  • XML XML-RPC or SOAP
  • ZeroC's Internet Communications Engine (ICE)

Las siguienteas son plataformas específicas de APIs:

  • Apple Computer's Apple events (previamente conocido como Interapplication Communications (IAC)).
  • Freedesktop.org's D-Bus
  • KDE's Desktop Communications Protocol (DCOP)
  • Libt2n parar C++ solamente, manejos de objetos y excepciones complejos.
  • The Mach kernel's Mach Ports
  • Microsoft's ActiveX, Component Object Model (COM), Distributed Component Object Model (DCOM), Dynamic Data Exchange (DDE), Object Linking and Embedding (OLE), anonymous pipes, named pipes, Local Procedure Call
  • Novell's SPX
  • POSIX mmap, message queues, semaphores, and Shared memory
  • RISC OS's messages
  • Solaris's Doors
  • System V's message queues, semaphores, and Shared memory

Message-oriented middleware o Message-queuing systems

Aparece un tercer componente de la conexión que realiza tareas de almacenamiento de mensajes. Esto permite que el emisor y el receptor estén inactivos. Permite comunicaciones persistentes asíncronas. Transferencia de mensajes que duren minutos a comparación de segundos o milisegundos. La aplicación más conocida que utiliza dicho modelo es el correo electrónico (e-Mail).

La idea básica consiste en insertar (putting) o quitar (taking) mensajes en una cola. Al emisor sólo se le puede garantizar que el mensaje ha sido insertado correctamente en la cola. No existen garantías de cuándo será leído dicho mensaje.

No está ligado a ningún tipo específico de modelo de red.

Message-queuing system API:

  1. put: añadir un mensaje a una cola.
  2. get: bloquear hasta que la cola no esté vacía, luego quitar el primer elemento.
  3. poll: verificar si hay mensaje, quitar el primero. Nunca se bloquea.
  4. notify: instalar en la cosa un dispositivo que avisará cuando un nuevo mensaje se inserte en la cola.

Comunicación orientada a streams

Los modelos RPC, RMI y MOM realizan comunicaciones independientes del tiempo. Existen también sistemas donde el tiempo es crucial en la comunicación, o los resultados de salida serán incorrecto; es así el caso de trasmisión de audio, video, sensor de datos, etc. (comunicación continua de datos) donde cortes de comunicación generan retardos no deseados.

Comunicación entre procesos Linux

La comunicación puede simplemente ser cuestión de dejar que otro proceso sepa que ha ocurrido algún evento, o puede implicar la transferencia de datos de un proceso a otro.

Señales

El mecanismo estándar para informar a un proceso que ha ocurrido un evento es la señal. Se pueden enviar señales de un proceso a otro pero sin enviar información. Las señales no necesitan ser generadas por otro proceso, también puede ser generada por el kernel.

Linux también implementa un mecanismo de semáforos. Un proceso puede esperar un semáforo tan fácilmente como espera una señal.

Paso de datos entre procesos

El mecanismo de tubería (pipe) estándar permite a un proceso hijo heredar un canal de comunicación con su padre; los datos que se escriben en un extremo de la tubería se leen en el otro. También define un conjunto de servicios para trabajo en red que pueden enviar flujos de datos tanto a procesos locales como remotos.

Hay otro método que es la memoria compartida que ofrece una forma extremadamente rápida de comunicar cantidades grandes o pequeñas de datos; cualquier dato escrito por un proceso en una region de memoria compartida puede ser leído por cualquier otro proceso que haya mapeado dicha region en su espacio de direcciones.

Freedesktop

Para comunicación entre aplicaciones gráficas existe D-Bus, usado por GNOME y KDE entre otros. Permite fácilmente comunicar unas aplicaciones con otras o controlar cualquier elemento de una interfaz gráfica desde consola a con un programa hecho al efecto.

Comunicación multicast

Es la abstracción de diseminación de datos. Utilizando el soporte de difusión (broadcast) en las redes locales para realizar tareas como protocolos epidémicos.

Tabla de métodos de IPC

Método Provisto por (sistema operativo u otro ambiente )
Archivo Todos los sistemas operativos.
Señal La mayoría de los Sistemas Operativos; algunos, como Windows, solo implementan señales en las liberías de C run-time de C y actualmente no proveen soportes paro su uso como técnica de IPC.
Socket La mayoría de los sistemas operativos.
Tubería / Pipes Todos los sistemas POSIX.
Named pipe Todos los sistemas POSIX.
Semáforo Todos los sistemas POSIX.
Memoria compartida Todos los sistemas POSIX.
Mensajes Usado en el paradigma MPI, Java RMI, CORBA y otros.
Mapa de Memoria Todos los sistemas POSIX. Windows también es apto para esta técnica, las APIs usadas son específicas de esta plataforma.
Cola de Mensajes La mayoría de los Sistemas Operativos.
puertos Algunos Sistemas Operativos.

Referencias

daaa.


Wikimedia foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Mira otros diccionarios:

  • Comunicación de Procesos Secuenciales — Este artículo o sección necesita una revisión de ortografía y gramática. Puedes colaborar editándolo (lee aquí sugerencias para mejorar tu ortografía). Cuando se haya corregido, borra este aviso por favor. CSP (Comunicación de Procesos… …   Wikipedia Español

  • Comunicación (desambiguación) — Comunicación y comunicaciones pueden referirse a: Comunicación, el intercambio de información, un proceso de interacción social básico Medio de comunicación Medios de comunicación de masas o mass media Telecomunicación, técnica de transmisión de… …   Wikipedia Español

  • Comunicación — Un modelo simple de comunicación con un emisor que transmite un mensaje a un receptor. Para otros usos de este término, véase Comunicación (desambiguación). La comunicación es el proceso mediante el cual se puede transmitir información de una… …   Wikipedia Español

  • Comunicación política — Las instituciones políticas son uno de los sujetos de creación de información más importantes en la sociedad, y sus informaciones son fundamentalmente de carácter político. Las técnicas de comunicación política de las instituciones tienen una… …   Wikipedia Español

  • Comunicación multimodal — Podemos definir la comunicación multimodal como aquella comunicación en la que intervienen modos humanos, como por ejemplo: la voz o el habla, los gestos, los ojos, los movimientos, etc. El objetivo de la comunicación multimodal es hacer más… …   Wikipedia Español

  • procesos familiares perturbados: alcoholismo — Diagnóstico de enfermería aprobado por la Eleventh National Conference on the Classification of Nursing Diagnoses (XI Congreso Nacional sobre Clasificación de Diagnósticos de Enfermería). Se define como el estado en el cual las funciones… …   Diccionario médico

  • Comunicación intersubjetiva — La comunicación intersubjetiva es un concepto en construcción propuesto por Antonio Pascuali en el XIX Encuentro de la Asociación Mexicana de Investigadores de la Comunicación[1] (AMIC) en 2007 con motivo de la apertura de un grupo de… …   Wikipedia Español

  • Comunicación digital — La comunicación digital es un fenómeno que ha calado en la vida cotidiana del hombre. Surge como efecto de las nuevas tecnologías que se introducen de manera vertiginosa en el campo de la comunicación social. Intenta fusionar el periodismo con… …   Wikipedia Español

  • Comunicación técnica — La comunicación técnica es el proceso de la transmisión de información técnica a través de la escritura, el habla y otros medios de comunicación a un público específico. La información es útil si el público a quien va dirigida puede realizar una… …   Wikipedia Español

  • Comunicación intercultural — La comunicación intercultural es una disciplina que tiene como objetivo estudiar la forma en que la gente de diferentes orígenes culturales se comunica entre sí. Se encarga también de producir algunos lineamientos que permitan esta comunicación… …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”