Comunicación entre procesos: descripción general
La comunicación entre procesos (IPC) es un mecanismo que implica la comunicación de un proceso con otro proceso. Esto generalmente ocurre solo en un sistema.
La comunicación puede ser de dos tipos:
Entre procesos relacionados que se inician desde un solo proceso, como los procesos padre e hijo.
Entre procesos no relacionados, o dos o más procesos diferentes.
A continuación se presentan algunos términos importantes que debemos conocer antes de continuar con este tema.
Pipes- Comunicación entre dos procesos relacionados. El mecanismo es semidúplex, lo que significa que el primer proceso se comunica con el segundo proceso. Para lograr un dúplex completo, es decir, para que el segundo proceso se comunique con el primer proceso, se requiere otra tubería.
FIFO- Comunicación entre dos procesos no relacionados. FIFO es un dúplex completo, lo que significa que el primer proceso puede comunicarse con el segundo proceso y viceversa al mismo tiempo.
Message Queues- Comunicación entre dos o más procesos con capacidad full duplex. Los procesos se comunicarán entre sí publicando un mensaje y recuperándolo de la cola. Una vez recuperado, el mensaje ya no está disponible en la cola.
Shared Memory- La comunicación entre dos o más procesos se logra a través de una memoria compartida entre todos los procesos. La memoria compartida debe protegerse entre sí sincronizando el acceso a todos los procesos.
Semaphores- Los semáforos están diseñados para sincronizar el acceso a múltiples procesos. Cuando un proceso desea acceder a la memoria (para leer o escribir), debe bloquearse (o protegerse) y liberarse cuando se elimina el acceso. Esto debe repetirse en todos los procesos para proteger los datos.
Signals- La señal es un mecanismo de comunicación entre múltiples procesos a modo de señalización. Esto significa que un proceso de origen enviará una señal (reconocida por un número) y el proceso de destino lo manejará en consecuencia.
Note - Casi todos los programas de este tutorial se basan en llamadas al sistema en el sistema operativo Linux (ejecutado en Ubuntu).