Resumen de varias formas de comunicación entre procesos de Linux: análisis del kernel de Linux

Descripción general de la comunicación entre procesos

Explicación en video relacionada con la comunicación del kernel de Linux: kernel de Linux, la realización de componentes de comunicación entre procesos

                                                Kernel de Linux, implementación del programador de procesos, análisis del código fuente del kernel

Propósito de la comunicación de procesos

  • Un proceso que transmite datos necesita enviar sus datos a otro proceso. La cantidad de datos enviados está entre un byte y varios M bytes

  • Datos compartidos varios procesos quieren operar datos compartidos, un proceso para compartir datos

  • Notifique que un proceso necesita enviar un mensaje a otro proceso o grupo de procesos. Notifique (ellos) que ha ocurrido un evento (como notificar al proceso padre cuando el proceso termina).

  • Compartir recursos Los mismos recursos se comparten entre varios procesos. Para hacer esto, se requiere que el kernel proporcione un mecanismo de bloqueo y sincronización.

  • Control de procesos Algunos procesos quieren controlar completamente la ejecución de otro proceso (como el proceso de depuración). En este momento, el proceso de control espera interceptar todas las trampas y excepciones de otro proceso, y poder conocer sus cambios de estado en el tiempo.

Desarrollo de comunicación entre procesos (IPC) de Linux

Los medios de comunicación de procesos en Linux se heredan básicamente de los medios de comunicación de procesos en la plataforma Unix. Las dos principales contribuciones al desarrollo de Unix, Bell Labs de AT&T y BSD (Berkeley Software Publishing Center en la Universidad de California, Berkeley), tienen un énfasis diferente en la comunicación entre procesos. El primero hizo mejoras y expansiones sistemáticas a los primeros métodos de comunicación entre procesos de Unix, formando un "sistema V IPC". El proceso de comunicación se limita a una sola computadora; esta última omite esta restricción y forma un mecanismo de comunicación entre procesos basado en un socket. Linux heredó los dos

  • Comunicación temprana entre procesos de UNIX

  • Comunicación entre procesos basada en System V

  • Comunicación entre procesos basada en Socket

  • Comunicación entre procesos POSIX.

Los métodos de comunicación entre los procesos UNIX incluyen: tuberías, FIFO y señales.

Los métodos de comunicación entre procesos de System V incluyen: cola de mensajes de System V, semáforo de System V, memoria compartida de System V

La comunicación entre procesos POSIX incluye: cola de mensajes posix, semáforo posix y memoria compartida posix.

Debido a la diversidad de números de versión de Unix, la Asociación de Proyectos Eléctricos y Electrónicos (IEEE) ha desarrollado un estándar Unix independiente Este nuevo estándar ANSI Unix se llama Interfaz de sistema operativo portátil para entornos informáticos (PSOIX). La mayoría de los números de versiones populares y de Unix existentes siguen el estándar POSIX. Linux ha seguido el estándar POSIX desde el principio; BSD no está exento de comunicación entre procesos dentro de una sola máquina (el conector en sí puede usarse para la comunicación entre procesos dentro de una sola máquina). De hecho, muchos IPC independientes con números de versión Unix tienen rastros de BSD. Como el mapeo de memoria anónimo compatible con 4.4BSD, la implementación de 4.3 + BSD de semántica de señal confiable, y así sucesivamente.

Método de comunicación entre procesos utilizado por linux

  1. Tubería (tubería), tubería de corriente (s_pipe) y tubería famosa (FIFO)

  2. Señal

  3. cola de mensajes

  4. Memoria compartida

  5. señal

  6. Enchufe

Tubo

Hay dos restricciones en los métodos de comunicación como las tuberías: una es la comunicación semidúplex, donde los datos solo pueden fluir en una dirección, y la otra es que solo se pueden usar entre procesos relacionados. El parentesco del proceso generalmente se refiere a la relación del proceso padre-hijo.

Streaming pipe s_pipe: la primera restricción se elimina y se puede transmitir en ambas direcciones.

Las tuberías se pueden utilizar para la comunicación entre procesos relacionados. Pipe con nombre: name_pipe supera la limitación de que la tubería no tiene nombre, por lo que además de tener las funciones de la tubería. También acepta la comunicación entre procesos no relacionados;

El interesante contenido del desarrollo de servidores Linux C / C ++ incluye: C / C ++, Linux, Nginx, ZeroMQ, MySQL, Redis, MongoDB, ZK, transmisión de medios, P2P, kernel de Linux, Docker, TCP / IP, corrutina, DPDK y Intercambio de conocimientos más avanzado. Haga clic en el enlace para suscribirse y verlo directamente: C / C ++ Linux Server Development / Linux Background Architect-Learning Video

Adquisición de video + 1035101242 (VX mismo número)

 

Semáforo (semóforo)

El semáforo es un contador que puede usarse para controlar el acceso a recursos compartidos por múltiples procesos.

A menudo se utiliza como mecanismo de bloqueo. Evitar cuando un proceso accede a recursos compartidos. Otros procesos también acceden al recurso. Por lo tanto, se utiliza principalmente como medio de sincronización entre procesos y entre diferentes subprocesos en el mismo proceso.

La señal es un método de comunicación más complejo, que se utiliza para notificar al proceso de recepción que se ha producido un determinado evento. Además de la comunicación entre procesos, el proceso también puede enviar una señal al proceso en sí. Además de admitir la función semántica de señal de Unix temprana sigal, linux también admite la función de señal sigaction cuya semántica se ajusta al estándar Posix.1 (en realidad, esta función se basa en BSD, para lograr un mecanismo de señal confiable. También puede unificar la interfaz externa, usando la función sigaction La función de señal se implementa nuevamente);

Cola de mensajes

La cola de mensajes es una lista enlazada de mensajes, almacenada en el kernel e identificada por el identificador de la cola de mensajes.

La cola de mensajes supera las deficiencias de una menor cantidad de información de transmisión de señales, la canalización solo puede transportar flujos de bytes sin formato y el tamaño de búfer limitado.

La cola de mensajes es una lista vinculada de mensajes. Contiene la cola de mensajes del sistema V de cola de mensajes Posix. Los procesos con permisos suficientes pueden agregar mensajes a la cola y los procesos con permisos de lectura pueden leer mensajes en la cola.

La cola de mensajes supera las deficiencias de la señal que transporta menos información, la tubería solo puede transportar un flujo de bytes sin formato y el tamaño de búfer limitado.

Señal (singal)

La señal es una forma de comunicación más complicada, que se utiliza para notificar al proceso de recepción que ha ocurrido un evento.

Se utiliza principalmente como medio de sincronización entre procesos y entre diferentes subprocesos del mismo proceso.

Memoria compartida (memoria compartida)

La memoria compartida consiste en mapear una sección de la memoria a la que pueden acceder otros procesos. Esta memoria compartida se crea mediante un proceso. Pero múltiples procesos pueden acceder a él. La memoria compartida es el método IPC más rápido y está diseñado específicamente para la baja eficiencia de otros métodos de comunicación entre procesos.

A menudo se comunica con otros mecanismos de comunicación. Como semáforo, utilizar en conjunto. Lograr la sincronización y comunicación entre procesos.

Permita que varios procesos accedan al mismo espacio de memoria. Es el formulario de IPC más rápido disponible.

Está diseñado para la baja eficiencia de ejecución de otros mecanismos de comunicación. A menudo se utiliza junto con otros mecanismos de comunicación, como semáforos. Lograr la sincronización y exclusión mutua entre procesos.

Enchufe

Socket es también un mecanismo de comunicación entre procesos, que es diferente de otros mecanismos de comunicación. Se puede utilizar para la comunicación de procesos entre diferentes máquinas.

Un mecanismo de comunicación entre procesos más general. Puede utilizarse para la comunicación entre procesos entre diferentes máquinas.

Originalmente fue desarrollado por la rama BSD del sistema Unix, pero ahora generalmente se puede portar a otros sistemas similares a Unix: tanto Linux como las variantes de System V admiten sockets.

Comparación de la eficiencia de varios métodos de comunicación entre procesos

Nota: Sin conexión: se refiere a la capacidad de enviar mensajes sin llamar a alguna forma de OPEN Control de flujo: asumiendo que el sistema tiene pocos recursos o no puede recibir muchos otros mensajes, el proceso de envío puede realizar un control de flujo

Comparación y ventajas y desventajas de varios métodos de comunicación.

  1. Pipeline: velocidad lenta. Capacidad limitada, solo los procesos padre e hijo pueden comunicarse

  2. FIFO: no importa qué proceso se pueda comunicar, pero la velocidad es lenta

  3. Cola de mensajes: la capacidad está limitada por el sistema y debe prestar atención al problema de no leer los datos la última vez que los leyó por primera vez.

  4. Semáforo: no puede transmitir mensajes complejos, solo se puede utilizar para sincronización

  5. Área de memoria compartida: Es muy fácil controlar la capacidad y la velocidad es rápida, pero debe estar sincronizada, por ejemplo, cuando se está escribiendo un proceso. También hay un proceso para prestar atención al tema de la lectura y la escritura, que es equivalente a la seguridad de los subprocesos. por supuesto. El área de memoria compartida también se puede utilizar para la comunicación entre subprocesos, pero esto no es necesario.Los subprocesos ya han compartido una parte de la memoria en el mismo proceso.

Supongamos que el usuario transmite menos información o necesita señales para desencadenar ciertos comportamientos. El mecanismo de señal de interrupción suave mencionado anteriormente es una forma simple y efectiva de comunicación entre procesos.

Pero si la cantidad de información requerida para ser transmitida entre procesos es relativamente grande o existe un requerimiento para el intercambio de datos entre procesos, entonces se deben considerar otros métodos de comunicación.

Las tuberías sin nombre son simples y convenientes. Pero se limita a la forma de comunicación unidireccional. Y solo puede compartir la canalización entre el proceso que lo creó y sus descendientes:

Los procesos con relaciones arbitrarias pueden utilizar tuberías conocidas. Pero porque ha existido durante mucho tiempo en el sistema. Error fácil de uso inadecuado. Por lo tanto, generalmente no se recomienda para usuarios normales.

El almacenamiento en búfer de mensajes ya no puede limitarse a procesos padre-hijo. Se acuerda que los procesos aleatorios pueden realizar la comunicación entre procesos a través de colas de mensajes compartidas, y las funciones de llamadas del sistema para realizar la sincronización entre el envío y la recepción de mensajes, de modo que los usuarios ya no tengan que considerar problemas de sincronización al usar búfer de mensajes para la comunicación, lo que es conveniente de usar. Sin embargo, la copia de información requiere tiempo de CPU adicional, lo que no es adecuado para situaciones con grandes cantidades de información o operaciones frecuentes.

En vista de las deficiencias del almacenamiento en búfer de mensajes, la memoria compartida utiliza búfer de memoria para intercambiar información directamente sin copiar. La velocidad rápida y la gran cantidad de información son sus puntos fuertes.

Sin embargo, el método de comunicación de la memoria compartida se realiza conectando directamente el búfer de memoria compartida al espacio de direcciones virtuales del proceso, por lo que. El problema de sincronización de las operaciones de lectura y escritura entre estos procesos no puede ser logrado por el sistema operativo. Debe ser resuelto por cada proceso utilizando otras herramientas de sincronización. Además, porque la entidad de memoria existe en el sistema informático. Por lo que solo puede ser compartido por procesos en el mismo sistema informático.

Comunicación de red inconveniente.

Los bloques de memoria compartida proporcionan un mecanismo para una comunicación bidireccional eficiente entre un número arbitrario de procesos.

Todos los usuarios pueden leer y escribir datos. Sin embargo, todos los programas deben cumplir y cumplir ciertos acuerdos para evitar condiciones de carrera, como sobrescribir el espacio de la memoria antes de leer la información.

Desafortunadamente, Linux no puede garantizar estrictamente el acceso exclusivo a los bloques de memoria compartida, incluso cuando crea un nuevo bloque de memoria compartida utilizando IPC_PRIVATE. Al mismo tiempo, varios procesos que utilizan bloques de memoria compartida deben coordinar el uso del mismo valor de clave.

Supongo que te gusta

Origin blog.csdn.net/Linuxhus/article/details/112901020
Recomendado
Clasificación