El Kernel de Linux - Inter-Process Comunication

9 - Inter-Process Comunication

[editar]
Tutorial creado por Juan Carlos Inostroza. Extraido de: http://www.tux.cl/articulos.php?id=28
30 de Noviembre de 1999
El IPC es un mecanismo en el cual los procesos que se están ejecutando posean medios para compartir recursos, sincronizarse y compartir datos entre ellos. Linux implementa todas las formas de IPC a través de recursos compartidos, estructuras de datos de kernel y colas de espera.

Estas formas de IPC son a través de

  • Señales
  • Colas de Espera
  • Bloqueos de Archivos
  • Pipes y Named Pipes, que permiten una transferencia de datos bidireccional y orientada a la conexion entre dos procesos, explicitamente seteando los pipes o comunicandolos a través de named pipes en el sistema de archivos (N. del E.:piensen en ls -als | more como una forma de piping)
  • Unix Domain Sockets, otro medio de transferencia, más usado en el modelo INET
  • IPC de System V compuesta por
    • Semaforos
    • Colas de Mensaje
    • Memoria Compartida

Una señal es una notificación enviada a un proceso por el kernel o por otro proceso. Las señales se envían a través de send_sig(). El numero de señal se da como parámetro, como también el proceso destino. Los procesos pueden registrar sus propias señales, a través de la funcion signal().

Los bloqueos de archivo estan soportados directamente por el kernel. Para bloquear un archivo, puede usarse open() simplemente.

Pipes (tuberías) pueden ser usadas con pipe(), para filesystems read() o write() y para named pipes open().

Para Unix Domain Sockets, toda la funcionabilidad está encapsulada en socketcall().

En IPC de System V, existe una interfaz común para los tres métodos, ipc().

Las colas de espera son solo listas con los procesos que esperan por un evento del kernel, como la finalizacion de una lectura de DMA. Un proceso puede entrar voluntariamente a una cola de espera con sleep_on() o interruptable_sleep_on() y despertar con wake_up() o wake_up_interruptable() (que remueve los procesos de esta cola).

Los bloqueos de archivos ocurren para prevenir que dos procesos puedan acceder al mismo archivo. Esta exclusión puede ser hecha al archivo completa o a una porción del archivo.

Los Pipes y Named Pipes son similares, pero su creación es diferente. En ambos casos debe existir un descriptor de archivo que esta enlazado a la tubería. Después de la creacion de la tubería, una página de memoria es asociada a ella que es tratada como un buffer circular, donde las funciones de escritura se manejan de forma atómica. Si se llena este buffer, se bloquea el proceso de escritura. Si se leen mas datos de los existentes, el proceso de lectura se bloquea. Así, cada tubería posee un proceso de espera asociado.

Los semaforos se implementan con colas de espera, siguiendo el modelo clásico de semáforos. Cada semáforo posee un valor asociado. Existen dos operaciones para este manejo, up() y down(). Cuando el valor del semáforo es 0, el proceso que ocupa el semáforo (para decrementar su estado) es bloqueado en la cola de espera.

Las colas de mensajes son listas que los procesos leen o escriben secuencias de bytes. Los mensajes se reciben en el mismo orden que son escritos. Existen dos colas, una para los procesos que envian un mensaje completo a la cola y otra para ordenar las escrituras de los mensajes.

La memoria compartida es la forma más rápida de IPC. Permite que los procesos puedan compartir regiones de la memoria. La creación de esta memoria compartida se hace a través del administrador de memoria.
[editar]

1 opinión

Linux.

Bueno bueno bueno.

Tutoriales relacionados con 'El Kernel de Linux'

Linux es en realidad un Kernel. Una distribución GNU/Linux es la mezcla de software GNU... Más »
Esta es la primerísima edición del Linux en Castellano COMO. La audiencia a la que... Más »
Este documento describe el soporte de sonido para Linux. Enumera el hardware de sonido soportado,... Más »
La compilación del kernel se hace a la manera Debian, es decir, con herramientas propias... Más »
Esta guía no es un documento general de seguridad. Esta guía está específicamente orientada a... Más »

Autor y licencia de 'El Kernel de Linux'


Tutorial de Juan Carlos Inostroza. Extraido de: http://www.tux.cl/articulos.php?id=28 CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.