2012-03-04 24 views
6

¿Cómo procceses se comunican entre sí? Usando todo lo que he aprendido hasta ahora con la programación, no puedo explicar cómo funcionan los sockets, los sistemas de archivos y otras cosas relacionadas con el envío de mensajes entre programas.¿Cómo se comunican los programas entre sí?

Por cierto que utilice un sistema operativo basado en Linux si vas a añadir nada OS específica. Gracias por adelantado. La pregunta me ha estado molestando por años. También estoy adivinando que el núcleo tiene algo que ver con eso.

+1

Lo que está buscando es "IPC": https://en.wikipedia.org/wiki/Inter-process_communication –

+0

Por lo tanto, cuando solicita abrir un archivo, por ejemplo, utilizando una API del sistema operativo, hay una compartida espacio de memoria que se escribe en el que el sistema operativo recibe la información y sirve el archivo? ¿Estoy en lo cierto o estoy completamente equivocado? Gracias de nuevo. –

+0

Al abrir un archivo, el sistema operativo proporciona la capacidad de leer y escribir en ese archivo (y algunas otras cosas como buscar y truncar). Lo que significa exactamente cuando dos procesos abren el mismo archivo, y cómo funciona realmente, depende de los detalles de implementación del núcleo y no está expuesto a los procesos del usuario. –

Respuesta

9

En la mayoría de los mecanismos IPC (Interprocess Communication), la respuesta general a su pregunta es la siguiente: el proceso A llama al kernel pasando un puntero a un búfer con datos que se transferirán al proceso B; el proceso B llama al kernel (o ya se encuentra bloqueado en una llamada al kernel) que pasa un puntero a un búfer para ser llenado con los datos de proceso A.

Esta descripción general es cierto para sockets, pipes, System V message queues, archivos ordinarios etc. Como se puede ver el costo de comunicación es alto ya que implica al menos un cambio de contexto.

Signals constituyen un mecanismo de IPC asincrónico en el que un proceso puede enviar una notificación simple a otro proceso activando un controlador registrado por el segundo proceso (alternativamente no hacer nada, detener o matar ese proceso si no se registra ningún controlador, dependiendo de la señal)

Para transferir gran cantidad de datos se puede usar System V shared memory en cuyo caso dos procesos pueden acceder a la misma porción de la memoria principal. Tenga en cuenta que incluso en este caso, hay que emplear un mecanismo de sincronización, como System V semaphores, que se traducen en cambios de contexto también.

Por eso, cuando los procesos necesitan comunicarse con frecuencia, es mejor hacerlos hilos en un solo proceso.

+0

Gracias. Eso tiene mucho sentido. Creo que estaba pasando por alto las cosas. Muy detallado y claro. Gracias de nuevo. –

+1

No estoy seguro de que los hilos siempre menor el número de cambios de contexto (desde luego no hacerlo, si usted tiene mucho menos núcleos de hilos). Los hilos están programados, como los procesos están en Linux (el programador del kernel está programando tareas, ya sea hilos de procesos de subprocesos múltiples o procesos de subprocesos únicos). –

Cuestiones relacionadas